Стая насекомых 30к (VFX | Niagara | HLSL | UE5)

Стая насекомых 30к (VFX | Niagara | HLSL | UE5)

Кто видел | не видел прошлые посты. Коротко: Я делаю VFX со стаей насекомых на HLSL, для оптимизации использую кастомные ноды в материале и hlsl в Niagara. Насекомые имеют разные состояния поведения, регулируется это параметрами. Оптимизация такая 30к частиц на 100 фпс, 21к частиц на 120+ фпс - уровень производительности на порядок выше чем в примере от эпик или похожих ассетах.

Пример использования на локации в нашем ассете.

По этапам:
Базу логики подсмотрел в видео, но у меня оно не работало, поэтому пришлось переписывать. Возможно невнимательность, я хз. Была сложность с определением кватерниона. И частицы не могли нормально определить поверхность. Также безуспешны стали потуги реализации это в С++, потому что гораздо дешевле это просчитывать на GPU, а не CPU. Вот результат.

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

Далее возникла сложность с сеткой расстояний, на которую я уже не могу повлиять. И если у мешей плохая геометрия и хреновая сетка расстояний, то определение вершин для частиц затрудняется. Если, кто-то знает как делать костюмную сетку расстояний для меша и возможно ли это - буду благодарен за инфу, тот инструментарий который в движке позволяет заменить сетку расстояний на другой шейп, нихрена не работает корректно.
Вот результат с учётом косяков с сеткой расстояний (Generate mesh distance field)

Ну и наконец благодаря вашим советам я добавил боунс боксы с определением границ для ниагары. Это уже это после исправления всех сложностей.
Теперь можно выбирать стейты и спавнить частицы в рамках бокса вне зависимости от покрываемой области. А также выбирать точки следования, например из норы в нору.
Красота...

Следующий этап для меня был создание ещё одного hlsl класса, который будет изменять поведение не вредя другим классам. По сути это просто некая боунс сфера, которая говорит каждой частице "тебе в другую сторону". И это расширяет функционал. Т.е. эта условная сфера может быть на фонарике, на персонаже, на лампочке, на патроне, на дымовой шашке - без разницы, какой будет визуал. Главно, что теперь есть возможность прямого взаимодействия с частицами. А я напомню что заспавнить без проблем можно десятки тысяч частиц.

Ну и как пример, то о чём я сказал выше это визуальная часть, для "типо" иммерсивного взаимодействия. "Вишенка на стаи насекомых"

Ну и если дочитали тут можно посмотреть урок по созданию подобного boosty (бесплатно, без регистрации).

А тут можно приобрести готовую версию Fab.com
Ну или также на бусти.
Расширенный вариант появится в нашем маркете, в ближайшие дни.
Если в тексте есть орфографические ошибки, мне всё ровно.
Спасибо за внимание, подписывайтесь. Ссылка на канал в профиле - гайды, обзоры, развлечение, разработка игр. Пока.

66
11 комментариев

Прайд насекомых

1
Ответить

Не думал сделать лимит на плотность живности? А то когда их много в одной точке выглядит странно

Ответить

он есть, определяется силой отталкивания. Но если завышать параметр и рядом с 1 частицей будет 6 других, то она не сможет найти выход и будет быстро менять положение. В глаза начинает бросаться. Пока думаю, что можно ещё сделать

1
Ответить

А есть режим для арахнофобов?

Ответить

а тогда смысла не будет) надо чтобы вызывало страх, мерзость и всё подобное

Ответить