Для большинства физических явлений, что перекочевали из мира реального в виртуальный, давно придуманы оптимизированные и корректно работающие решения. Тем не менее, для реализации и работы с каждым из них требуются присущие знания.
И что делают ребята с NVIDIA? Вокруг одной идеи обрисовывают работу каждого используемого поведения физических тел, а именно : твердые и мягкие тела, ткань, веревки и самая лучшая по совокупности факторов на сегодняшний день вода.
В этой статье я опишу базовую логику работы технологии, на гифках покажу симуляцию каждой из вышеописанных приблуд и уделю пару строчек интеграции в Unity.
Основы основ
Для начала, весь ассет NVIDIA Flex для Unity весит всего 14 мегабайт, 5 из которых занимают модельки для демонстраций в сценках, остальное - пара скриптов, описывающие поведение партиклов.
Партиклами называют те самые сферки, которые вселяются в объект и становятся физической плотью оного на равне, а то и лучше обычных коллайдеров.
И с самых первых шагов необходимо выбрать вариант существования испытуемого. Flex дает на выбор два варианта :
- ArrayActor - множество партиклов, что появятся в начале сцены - с ними и играйтесь
- SourceActor - источник, откуда партиклы появляются. Конечно здесь можно выбрать время их жизни, так что может быть полезно для ручья например.
Более понятно будет на примере воды :
Твердые и мягкие тела
Мне совершенно не понятно, кто в здравом уме будет использовать Flex для симуляции поведения твердого тела (и мягкого в большинстве случаев), ведь он жрет в десятки больше ресурсов, работая точно так же!
Все же покажу работу для полноты картины и последовательности объяснений :
Пора объяснять : скрипты описывают размеры сфер-партиклов, максимальное колличество соседей, с которыми она может взаимодействовать, коэффиценты упругости и скольжения.
Сами же скрипты, описывающие поведение цельного объекта, на самом деле указывают сферкам паттерн поведения - как вести себя самому, друг с другом и окружающим миром.
Как можно узреть здесь, поведение мягкого тела позволяет партиклам налезать друг на друга, чтобы симулировать деформацию и магию упругости.
Конечно все эти объекты могут выглядеть нормально, а не как набор партиклов, так что как раз сейчас я быстренько объясню структуру объекта, который я добавил для следующей демонстрации.
Так как мне лень даже с дивана встать, я добавил модельку мартышки с блендера, для демонстрации вполне сойдет :
А теперь спидран по объяснению : создав объект пустышку, ей нужно добавить компонент поведения что вы желаете (картиночка 1), после создав и вставив в первый слот FlexContainer - это скрипт с описанием общего поведения(2), а второй (в моем случае FlexSoftAsset) - с конкретными настройками под выбранное поведение(3).
Для визуализации модели в изначальном её виде нужно добавить Flex Soft Skinning и стандартный Skinned Mesh Renderer (4).
Все это дело конечно же взаимодействует с родными, описанными Unity твердыми телами :
Ткань
Ткань мягко сказать необычна. найти ей применение, когда есть старые добрые методы, я бы не осмелился, однако она превосходно обрабатывает столкновения как сама с собой, другими флексовыми причудами, так и с простыми объектами.
По итогу можно сказать, что решение прекрасно подойдет для синематиков, мульфильмов, но пока не для игр.
Стандартная симуляция ткани в Unity создает по мини-партиклу на каждую вершину модели и обрабатывает их столкновения с парочкой других объектов, когда Flex-объект, что я показал на гифках, имеет чуть более 1600 партиклов и реагирует на все.
Водичка
Вот и добрались до самого интересного и примечательного, что реализовано в этой магии. Я уверен, что последовательное объяснение принесло плоды, поэтому для начала покажу пару гифок, а как работает водица вы догадаетесь сами :
Здесь можно сразу узреть, что по включению настройки "Fluid", сферки становятся более скользкими и начинают "липнуть" друг к другу. Так и выглядит внутренняя кухня симуляции физики. Получить ту красоту, что вы узрели в начале, можно добавив скрипт, шейдер и пробу окружающих отражений :
Скрипт вообщем-то тем и занимается, что диктует шейдеру, мол сбившиеся в соплю партиклы - один объект и рендери их вместе.
Вот еще пару забавностей и демонстрация возможностей настройки :
Но это все что касается графония. Там есть так же настройки физики. Как вязкость, скольжение и другие :
А вот в товарище ArrayActor все же проглядываются партиклы сквозь шейдер :
А тут проглядываются мэмы и те же статьи, но с вероятными оповещениями и появлением в фид ленте : группа ВК
Все технологии NVIDIA в играх