55 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Симуляция ткани

Симуляция ткани

Симуляция ткани — весьма сложный и ресурсозатратный процесс. Таковым он является потому, что объект-ткань должен иметь большое количество полигонов. Зато ткань помогает достичь большой живости и реалистичности.

Создание ткани

Для симуляции ткани нам понадобится плоскость и объект, на который наша ткань будет падать. Расположим плоскость над объектом.

Плоскость, расположенная над кубом

Теперь включим для плоскости поведение Cloth на вкладке настроек физики.

Для плоскости назначаем физику Cloth

Ткань, как и мягкое тело, взаимодействует с объектами с поведением Collision. Назначим кубу поведение Collision

Выставляем Collision для куба

Если ты создал Plane, то у тебя выйдет какая-то странная картинка с вот такой вот кривой поверхностью.

Симуляция ткани (Plane)

Если же ты создавал Grid, то картина будет выглядеть получше.

Симуляция ткани (Grid)

Глядя на два этих примера, ты, наверное, уже догадался, что качество симуляции зависит от количества полигонов, на которые подразделена наша плоскость. В случае с Plane симуляция сработала не совсем корректно, потому что Blender не смог модифицировать один лишь полигон в настоящую ткань.

Чем больше полигонов — тем правдоподобнее будет симуляция и тем медленнее она будет просчитываться.

Симуляция ткани (количество полигонов на плоскости = 1296)

Настройки ткани

Ткань — это подвид Soft Body. Так что основные настройки похожи. Рассмотрим их подробнее

Статья в тему:  Кто контрит омника дота 2

Включение симуляции ткани

  • Имеются готовые преднастройки, которые можно выбрать в списке PRESETS. Они меняют параметры материала.
  • QUALITY – качество. Определяет количество шагов вычислений симуляции за кадр анимации. Чем выше, тем лучше качество, но медленнее.
  • MASS – масса материала.
  • STRUCTURAL – упругость структуры материала. Его способность сохранять форму.
  • BENDING – коэффициент складок. Чем больше значение, тем меньше маленьких складок.
  • SPRING – упругость ткани. AIR – сопротивление воздуха.
  • VELOCITY – скорость ткани.
  • Галочка PINNING позволяет закрепить группу вершин, установленную в окошке ниже. На неё не будет распространяться симуляция. Это удобно при создании флага или плаща.

Столкновение ткани

В большинстве случаев ткань не просто висит в 3D пространстве, она взаимодействует с окружением. Для того чтобы это работало нужно выполнить некоторые предварительные настройки (далее увидишь, как это все сделать):

  • Объекту с поведением ткани нужно сказать, что он участвует в коллизиях (столкновениях).
  • Не обязательно (но желательно), чтобы ткань сталкивалась сама с собой.
  • Другие объекты должны быть мешами и могут быть деформированы (например, скелетная анимация).
  • Другим объектам тоже нужно сказать, что они участвуют в столкновении с тканью.

Настройки столкновений

Проверь, что стоит галочка напротив Cloth Collision. Это значит, что столкновения ткани включены

Настройка столкновения ткани

  • QUALITY – основное свойство симуляции. Чем выше, тем лучше симуляция и тем она сложнее вычисляется.
  • DISTANCE – как только другой объект приблизится к ткани на это расстояние (в единицах Блендера), симуляция начнёт толкать ткань.
  • REPEL – сила отталкивания ткани, когда она близка к столкновению.
  • REPEL DISTANCE – максимальная дистанция для применения отталкивающей силы. Должна быть больше, чем минимальная.
  • FRICTION – сила трения, которая действует на ткань, когда она скользит по другому мешу. У шёлка, например, она меньше, чем у резины.
Статья в тему:  Как снять вещи с героя дота 2

Столкновения ткани с собой

Настоящая ткань никогда не проходит сквозь саму себя и взаимодействует со своей поверхностью. Для того, чтобы осуществить это в Blender, в настройке Cloth Collision поставь галочку напротив Self Collision. Как только ты включишь внутренние коллизии, откроются дополнительные соответствующие настройки.

Настройки внутренней коллизии

  • QUALITY – качество. Работает по абсолютно такому же принципу, как и при общих коллизиях.
  • DISTANCE – дистанция столкновений. Значение 0.75 стоит по умолчанию и работает почти во всех случаях. Для быстрых объектов можно установить значение 1, значение 0.5 весьма рискованно, так как может стать причиной полигонных артефактов в поведении ткани. Однако оно работает быстрее.

Работа с тканью

Посмотри ролик и попробуй создать и «уронить» ткань на один из своих смоделированных ранее предметов.

Что такое симуляция ткани дота 2

На кой чёрт вам понадобилось делать симуляции на клиенте?

Действительно есть ММО и MOBA игры, которые не используют симуляцию на клиенте (самым ярким примером можно привести Dota 2, где нет предсказания ввода — инпут отправляется на сервер, сервер производит симуляцию, результат (дельта изменений) присылается клиенту — по итогу в случае лага игра «застывает», произвести реверс игровой логики можно только создав карту и став хостом).

Роль симуляции на клиенте выше обозначил автор — это «предикшен локального клиента», то есть предсказание ввода — говоря проще, в играх с быстрым геймплеем (например шутер) клиент не ждет ответа от сервера, чтобы передвинуть сущность игрока или произвести выстрел, он самостоятельно просчитывает логику передвижения (физику) игрока, которая будет просчитана позже и сервером, когда запрос клиента дойдет до него.

Статья в тему:  Калибровка ммр дота 2 что это

При реверсе игр Apex Legend / PUBG можно в том или ином виде увидеть очередь инпутов, размер которой динамически изменяется в зависимости от состояния сети, и timeline произведенных предсказаний — если полученные от сервера данные не сошлись (клиент не просчитал определенные факторы, например оглушение) с данными в timeline, производится rollback — начиная с последнего полученного от сервера фрейма данных идет повторная симуляция вплоть до текущего фрейма клиента.

Физика для мобильного PvP шутера и как мы подружили её с ECS

Большое спасибо за ответ, теперь я Вас понял.

У нас был прототип — но делали не на Unity — использовали Unreal. Суть в том, что есть 2d мир и помимо твердых тел есть упругие тела, флюиды (только жидкости если точнее) и ткани (cloth) — физика таких тел представлена частицами (использовали LiquidFun). Что-то похожее на Terraria планировали, выживалку. По итогу физика была ядром механики и очень много съедала времени — довольно много чего испробовали — слать снапшоты было вообще не вариант. Пробовали локстепом сделать и передавать только инпут, пробовали как-то вычислительные шейдеры подключить — но по итогу так и не нашли способ.

Физика для мобильного PvP шутера и как мы подружили её с ECS

Посмотрел видео, довольно интересно.

Но видео рассказывает о Peer to Peer, где каждый клиент обязан симулировать всю физику (до конца так и не понял как они частицы симулируют). У нас простая интерполяция, мы других игроков двигаем не при помощи физики, зачем нам их инпут? У них понятно почему инпут, у них до этой модели вообще как я понял был локстеп, каждый клиент поддерживает симуляцию, у него нет сервера, который поможет. Если другие игроки взаимодействуют с миром — игрок не может это знать, будет рассинхрон — но это будет рассинхрон не из-за ошибки вычислений.

Статья в тему:  Как установить вулкан дота 2

Физика для мобильного PvP шутера и как мы подружили её с ECS

или на худой конец использование той же версии PhysX на сервере, что и на клиенте

Конкретно на этот вариант и надеялся. Я подумывал поэкспериментировать с этим, но пока только мысли — надеялся что у вас что-то подобное, когда спрашивал.

Да, этого крайне много в том же BulletSharp и на исправление уходит тонна времени.

Не рассматривали физику Unity ни в каком виде, т.к. на сервере у нас нет Unity.

Да, такой вариант разве что для прототипов может подойти, там много лишнего получается — хотя сейчас можно настраивать PlayerLoop (ScriptBehaviourUpdateOrder.UpdatePlayerLoop), экспериментальная штука, но все равно много лишнего.

она всё равно недетерминированная, так зачем мучиться? =)

Физика для мобильного PvP шутера и как мы подружили её с ECS

Спросил в надежде — может используете что-нибудь от Unity, нативно на клиенте и сервере, может что-нибудь уже можно применять для мультиплеера от них. Я пробовал BulletSharp, он недетерменированный, но это все решается (синхронизируется) — при компиляции из плюсов под нужную платформу можно убрать кучу ненужного функционала: ткани, канаты, сложные джоинты и т.д.

Для 2d мы пробовали Volatile — только из-за хранения истории его использовать смысла нет, это дело второстепенное; пробовали нативно Box2d — на iOS были большие проблемы с производительностью; по итогу написали свой, с применением ECS подхода — детерминированно, но простенько — без джоинтов, только коллизии, сенсоры и рейкасты.

Статья в тему:  Ошибка чтения диска дота 2 что делать

Физика для мобильного PvP шутера и как мы подружили её с ECS

Как я на спор развернул двусвязный список за O(1)

Тут дело в том, что двусвязанный список не оперирует индексами, он использует связи. Все удобство и все свойства двусвязанного списка заключаются в использовании узла, который знает о соседних узлах, которые в свою очередь могут находиться в памяти где угодно. В Вашем случае у меня, например, есть объект D — но я не могу просто использовать этот объект D для работы, я обязан отобразить его на индекс, который скажет, где он располагается в data (struct node < size_t index; >) — это все к тому, что предложенная структура не является double linked list. Структура это не просто интерфейс, важно ее устройство.

Проблема дыр — это основная проблема Вашего способа — простое запоминание индексов дыр тут не поможет — для быстродействия это ничто, но в плане памяти — нужно помнить обо всех дырах, что в случае большого capacity очень накладно.

Соответственно структуру лучше выбирать, когда известна задача — статья больше полезна для разминки мозгов, за что автору спасибо.

Как работают пули в видеоиграх?

TCP против UDP или будущее сетевых протоколов

Летняя интернатура Intel 0x7E3 ждет своих студентов

Визуализация времени возрождения Рошана

К сожалению нет такой технической книги, которую я бы прочитал на достойном уровне — обычно читаю кусками. Под Windows мне понравилась книга Windows System Programming, под Linux был затык в понимании, помогла The Linux Programming Interface (прочитал страниц 70, не больше), запомнилась книга Python Programming for Hackers and Reverse Engineers.

Статья в тему:  Как выйти из лоу приорити дота 2 2017

Мое знакомство с реверсом началось с того, что я устал прокачивать навык метания ножа в игре Silent Storm (где навыки прокачиваются по мере их использования, как в The Elder Scrolls) и захотел автоматизировать этот процесс — в этом помогли общение на форумах и много самостоятельных исследований. Не могу вспомнить, чтобы книги поначалу как-то помогли — но после практики действительно позволяют углубить знания (как по мне, только после практики).

Помимо приведенных книг могу посоветовать канал Zer0Mem0ry.

Визуализация времени возрождения Рошана

Согласен, читы доставляют большие проблемы честным игрокам. В Dota 2, LoL, WoW это не супер сильно ощущается, а вот в шутерах это огромная проблема.

Игроки, которые хотят развиваться в жанрах, где читеры имеют слишком сильное преимущество и не дают нормально играть, обычно уходят в лиги (к примеру esea для CS:GO), где свои, довольно суровые античиты (что все равно не спасает), свой mm, а главное — у людей другое отношение к игре.

В итоге нечестному игроку придется заплатить не только за игру, а еще за платформу лиги + подписка на чит будет стоить уже других денег (а если его поймают, забанят не только аккаунт, а еще и железо — отмыть такой бан также стоит дополнительных затрат).

Как улучшить геймдизайн с помощью оптимальных стратегий

Оптимальная стратегия минимизирует как затраты на производство, так и разнообразие. У каждого свои интересы и предпочтения по геймплею — почему так популярны Dota 2, LoL и прочие MOBA?

Статья в тему:  Как играть в варкрафт 3 дота

Одна из причин — разнообразие. На примере Dota 2: можно в одном сражении взять однокнопочного Лиорика, в другой Инвокера с 10 способностями, а в третьей пикнуть Пуджа, фаниться и фидить на нем всю игру, словить 4 репорта и пойти играть лп.

Самое главное — полезность фичи, остальное уже вопрос ресурсов.

Визуализация времени возрождения Рошана

Вообще видел много постов на соответствующих форумах про баны за использование Cheat Engine — помню даже пост, где автор был возмущен тем, что получил бан за то, что CE был запущен — просто запущен, не был даже выбран процесс для анализа.

Хотя примечательно то, что в последнее время я действительно не встречал постов с жалобами / вопросами о наказании. Не могу сказать, что много ковырял Dota 2 с помощью CE — перед тем, как кинуться изучать игру, я почитал форумы и быстро вышел на Source2Gen. Cheat Engine я активно использовал ранее для изучения CS:GO — и получал баны (правда меня банили через 1,5-2 недели, примерно с таким же периодом получал баны на аккаунты с Dota 2, но не по причине использование CE — Ваш бан спустя 2 часа меня удивил).

То же самое можно сказать про использование отладчика (в моем случае x64dbg) — я применял его очень активно (как с использованием ScyllaHide, так и без, как в рейтинговых сражениях, так и в своем лобби), VAC закрывал на это глаза.

Статья в тему:  Трейд дота 2 что это такое

Я не видел информации, чтобы CE как то скрывал свою работу (как это делает ScyllaHide в x64dbg), возможно он стал перехватывать определенные системные вызовы (опять же, предположение). Стоит также сказать, что разработчики постоянно что-то меняют в античите — возможно, если бы я начал писать бота не пол года, а скажем 1-2 года назад, то плагин ScyllaHide был бы обязателен для отладки.

Подведу итог: не могу ответить на Ваш вопрос точно, лишь выскажу предположения:

  • CE начал перехватывать системные вызовы и заметать следы (что врят ли, не слышал такого).
  • Вы попали под период, когда разработчики действительно вели себя кровожадно, но в следствии большого кол-ва ложных срабатываний и жалоб были вынуждены ослабить хватку. (вероятнее всего. на это указывает бан в течении 2 часов — хоть это и не бан за внедрение/подмену/перехват кода, все равно довольно оперативно)
голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: