{"id":2568,"title":"\u0422\u0435\u043b\u0435\u043f\u043e\u0440\u0442\u0430\u0446\u0438\u044f \u0440\u0435\u043a\u043b\u0430\u043c\u043d\u044b\u0445 \u043a\u0430\u043c\u043f\u0430\u043d\u0438\u0439 \u0438\u0437 \u00ab\u042f\u043d\u0434\u0435\u043a\u0441\u0430\u00bb \u0432 Google","url":"\/redirect?component=advertising&id=2568&url=https:\/\/vc.ru\/promo\/321806-kak-ne-zamorachivatsya-s-reklamnoy-kampaniey-i-bystro-nastroit-ee-v-google-obyasnyaem-v-5-50-i-500-slovah&placeBit=1&hash=842592b001f89eba8e751c8412550d4825bd0026e6df82eb3f2e06239bc3df51","isPaidAndBannersEnabled":false}
Укроп

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

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

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

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

Основы основ

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

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

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

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

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

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

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

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

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

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

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

SoftActor

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

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

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

А теперь спидран по объяснению : создав объект пустышку, ей нужно добавить компонент поведения что вы желаете (картиночка 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 все же проглядываются партиклы сквозь шейдер :

0
0 комментариев
Популярные
По порядку
Читать все 0 комментариев
{"hash":"600601b8","params":{"id":"dtfru","service":1,"title":"\u041f\u0440\u044f\u043c\u043e\u0439 \u044d\u0444\u0438\u0440","isLegacy":false}}