Как устроена NVIDIA Flex

Как устроена NVIDIA Flex

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

И что делают ребята с NVIDIA? Вокруг одной идеи обрисовывают работу каждого используемого поведения физических тел, а именно : твердые и мягкие тела, ткань, веревки и самая лучшая по совокупности факторов на сегодняшний день вода.

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

Основы основ

Для начала, весь ассет NVIDIA Flex для Unity весит всего 14 мегабайт, 5 из которых занимают модельки для демонстраций в сценках, остальное - пара скриптов, описывающие поведение партиклов.Партиклами называют те самые сферки, которые вселяются в объект и становятся физической плотью оного на равне, а то и лучше обычных коллайдеров.

И с самых первых шагов необходимо выбрать вариант существования испытуемого. Flex дает на выбор два варианта :

  • ArrayActor - множество партиклов, что появятся в начале сцены - с ними и играйтесь
  • SourceActor - источник, откуда партиклы появляются. Конечно здесь можно выбрать время их жизни, так что может быть полезно для ручья например.

Более понятно будет на примере воды :

Source Actor - бесконечно создающий партиклы
Array Actor - создавший нечто, изначально наследующий указанную геометрию

Твердые и мягкие тела

Мне совершенно не понятно, кто в здравом уме будет использовать Flex для симуляции поведения твердого тела (и мягкого в большинстве случаев), ведь он жрет в десятки больше ресурсов, работая точно так же!

Все же покажу работу для полноты картины и последовательности объяснений :

Твердое тело с "резиновым" пресетом

Пора объяснять : скрипты описывают размеры сфер-партиклов, максимальное колличество соседей, с которыми она может взаимодействовать, коэффиценты упругости и скольжения.

Сами же скрипты, описывающие поведение цельного объекта, на самом деле указывают сферкам паттерн поведения - как вести себя самому, друг с другом и окружающим миром.

SoftActor

Как можно узреть здесь, поведение мягкого тела позволяет партиклам налезать друг на друга, чтобы симулировать деформацию и магию упругости.

Конечно все эти объекты могут выглядеть нормально, а не как набор партиклов, так что как раз сейчас я быстренько объясню структуру объекта, который я добавил для следующей демонстрации.

Так как мне лень даже с дивана встать, я добавил модельку мартышки с блендера, для демонстрации вполне сойдет :

Как устроена NVIDIA Flex

А теперь спидран по объяснению : создав объект пустышку, ей нужно добавить компонент поведения что вы желаете (картиночка 1), после создав и вставив в первый слот FlexContainer - это скрипт с описанием общего поведения(2), а второй (в моем случае FlexSoftAsset) - с конкретными настройками под выбранное поведение(3).Для визуализации модели в изначальном её виде нужно добавить Flex Soft Skinning и стандартный Skinned Mesh Renderer (4).

Все это дело конечно же взаимодействует с родными, описанными Unity твердыми телами :

Порох кончился :(

Ткань

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

Партиклы + mesh filter, mesh renderer и Flex Cloth Deformation
Взаимодействие с обычным Rigidbody

По итогу можно сказать, что решение прекрасно подойдет для синематиков, мульфильмов, но пока не для игр.Стандартная симуляция ткани в Unity создает по мини-партиклу на каждую вершину модели и обрабатывает их столкновения с парочкой других объектов, когда Flex-объект, что я показал на гифках, имеет чуть более 1600 партиклов и реагирует на все.

Водичка

Вот и добрались до самого интересного и примечательного, что реализовано в этой магии. Я уверен, что последовательное объяснение принесло плоды, поэтому для начала покажу пару гифок, а как работает водица вы догадаетесь сами :

Обычное поведение партиклов, что летят из "источника"
После включения галочки "Fluid

Здесь можно сразу узреть, что по включению настройки "Fluid", сферки становятся более скользкими и начинают "липнуть" друг к другу. Так и выглядит внутренняя кухня симуляции физики. Получить ту красоту, что вы узрели в начале, можно добавив скрипт, шейдер и пробу окружающих отражений :

Водица, проба отражений и партиклы сквозь шейдер

Скрипт вообщем-то тем и занимается, что диктует шейдеру, мол сбившиеся в соплю партиклы - один объект и рендери их вместе.Вот еще пару забавностей и демонстрация возможностей настройки :

Из водички в ртуть и молоко
В нефть? Любая черная текстура и ползунок блеска

Но это все что касается графония. Там есть так же настройки физики. Как вязкость, скольжение и другие :

Вязкость

А вот в товарище ArrayActor все же проглядываются партиклы сквозь шейдер :

44 показа
881881 открытие
Начать дискуссию