14/12/2018

Немного неочевидных вещей в партикловой системе Cascade на UE4

Новая партикловая система Niagara выдает потрясающие штуки в early access, но, к сожалению, весь продакшен до сих пор сидит на Cascade и будет сидеть ближайшее время и дальше, расширяя его возможности блюпринтами. Поэтому давайте глянем на некоторые неочевидные вещи текущей партикловой системы, с которыми вы можете столкнуться и потратить N-ое количество времени на поиск решений, которых может и вовсе не быть.

GPU-частицы нельзя сделать изначально разноцветными

Да, GPU-шные частицы позволяют пользоваться вектор филдами и спавнить тысячи частиц без особых проблем, но взамен этого имеют свои ограничения и не могут использовать некоторые модули. Однако то, что даже модуль Initial Color с GPU-частицами работает не полностью — довольно неочевидно (ведь цвет GPU-частиц вполне себе меняется со временем). Где-то в доках вроде как была маленькая строчка, которая поясняла это, но кто ж её упомнит. В общем, сделать так, чтобы GPU-частицы изначально рождались с разными цветами мы не сможем. Но, конечно, есть варианты с некоторыми костыльными решениями, которые иногда могут подойти.

Модуль Orbit не меняет пивот и не анимируется

Когда вы сталкиваетесь с модулем Orbit, вы думаете: «Воу, с этой штукой можно будет сделать красивые вещи! Например, если совместить её с трейлами, которые можно сделать Ribbon-частицами или же просто спавнить хвост частицами через Emitter Initial Location». Но это не так. Модуль на самом деле не смещает центр координат частицы и он остается без закручивания. Что приводит нас к тому, что все выше перечисленные модули вообще не видят движения от модуля Orbit, и поэтому прицепить что-то за частицами с Orbit'ом не получится =(

А ещё вы не сможете его нормально анимировать, так как для ввода значений Curves берется время эмиттера и by life анимации для каждой частички не получится. И с GPU-частицами немного иначе работает. Такие дела.

В ветке 4.20 сломан Beam-эмиттер

Если вы работаете с проектом на версии движка 4.20 и создаете частицы типа Beam Data, то заметите, что он не работает, как нужно. А именно: не обращает внимание на Lifetime частиц и эмиттера, на количество его повторений Loops, не меняет во времени параметры луча типа цвета или альфы.

Какой выход? Делать такие частицы на 4.21 — там вроде как все починили уже. Либо делать такой тип эмиттера на ранних версиях типа 4.19 или 4.18 и мигрейтить в двадцатую — у некоторых такой способ работал.

Ввод Uniform параметров для Particle Systems в блюпринтах

В чатицах есть метод ввода параметров Uniform — он рандомит вводные числа от одной границы до другой.

И есть метод ввода Particle Parameter — с помощью него вы можете вводить данные извне партикловой системы. Либо просто из левел-эдитора, либо из блюпринта.

Неочевидность здесь заключается в вводе Uniform значения через Parameter. То есть по дефолту выставляемое значение константное и не имеет границ — это поле Constant. И, если на уровне мы можем вручную поменять ввод параметров на рандом:

То, когда мы обычно вводим параметры в блюпринте, там ничего подобного нет:

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

Поэтому решением для ввода такого рода параметров будет конструкция с Make ParticleSysParam, в которой такого рода введние параметров учитывается, хотя конструкция и выглядит сложнее обычного ввода. Если вы и так вводили параметры через такую конструкцию и не знали горя — вы молодец.

Фиксированные баунд боксы у GPU-частиц

Не забывайте фиксировать и выставлять вручную Bounding Box у GPU-частиц, иначе они пропадают как только центр эмиттера исчезает из поля зрения.

Коллизия меш-частиц

Несмотря на присутствие в модулях, метод коллизии Scene Depth с частицами типа Mesh Data не работает.

Меш партиклы ≠ статик меш

По структуре меш-партикли, которые используются в Mesh Data частицах, оказывается несколько отличаются от обычного ​Static Mesh, даже если вы используете один и тот же меш-ассет. Поэтому, если вы в материале используете ноды вроде LocalPosition, например, для какого-нибудь дисолва, то в частицах такой материал вполне может работать неправильно.

Перезапуск анрила

Ну и топ типс :) Если по вашей логике в частицах всё должно работать так, а работает иначе — попробуйте перезапустить движок. К сожалению, зачастую это помогает.

Текст: Дмитрий Соколов

Recent Posts

Создание короткого фильма на UE4

21/03/2019
Команда студентов подробно рассказывает о создании короткого фильма исключительно средствами движка UE4.

Дизайн окружения для игр ААА-класса

20/03/2019
Лори Дюран рассказывает об участии в разработке For Honor и делится полезными советами для тех, кто хочет изучить искусство создания окружающей среды.

Создание сцены мультяшного побережья в UE4

19/03/2019
Дэсмонд Ман рассказывает о создании Real-Time Games Environment в UE4 и стилизованном искусстве в целом.