Немного неочевидных вещей в партикловой системе 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, например, для какого-нибудь дисолва, то в частицах такой материал вполне может работать неправильно.
Перезапуск анрила
Ну и топ типс :) Если по вашей логике в частицах всё должно работать так, а работает иначе — попробуйте перезапустить движок. К сожалению, зачастую это помогает.
Текст: Дмитрий Соколов