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

Терпение, труд и Backbone

07/11/2019
О Backbone не слышал только ленивый. Детективная игра с элементами стелса в сеттинге антиутопичного Ванкувера. Рассказываем, как пиксельная игра в оболочке Unreal Engine шагает к успеху.

Кому принадлежит ваша игра?

05/11/2019
Специалисты компании Social Quantum помогают нам разобраться, какие шаги необходимо предпринять и какие документы оформить, чтобы избежать споров о правах на игру.

Разработка мультиплеера на Blueprints. Часть 2

28/10/2019
Продолжаем разговор — типы серверов, game mode, инструменты, классы, разработка фич, репликация виджетов, сетевая оптимизация.