Туториал по созданию дождя в Unreal Engine 4 Niagara
Для этого понадобится сама капля и комплексный эффект всплеска.
Разработчики игры Rogue Spirit из студии Kids With Sticks опубликовали в своём блоге туториал по созданию эффекта дождя в Unreal Engine 4 Niagara. Выбрали из текста главное.
Капли дождя
Всё начинается с создания простого материала для капель дождя.
Затем создайте новую систему Niagara и убедитесь, что вы добавили следующие параметры:
- Color (LinearColor);
- SpawnRate (float).
Создайте пустой эмиттер со следующими модулями.
Emitter Properties
Для просчёта столкновений капель с землёй используйте CPU симуляцию — у Sim Target выберите показатель CPUSim.
Убедитесь, что у вас поставлена галочка на Fixed Bounds — это нужно для того, чтобы границы эмиттера не пересчитывались на каждом тике.
Emitter State
Просто используйте системные настройки без каких-либо изменений.
Spawn Rate
Убедитесь, что вы применили параметр SpawnRate от User.SpawnRate. Благодаря этому вы сможете увеличивать или уменьшать интенсивность дождя во время игры.
Initialize Particle
- Поставьте Lifetime Mode — Random.
- В поле Color выберите User — благодаря этой настройке можно менять цвет во время игры.
- Sprite size mode — Random Non-Uniform.
Box Location
Это важный пункт, так как система будет прикреплена к герою. Для каждого проекта нужно подобрать своё значение, которое будет отвечать задачам игры.
Add Velocity
Скорость прибавляется сразу после спавна частицы. Если в вашей игре предусмотрен ветер, вы можете добавить его вектор. Можно использовать направление ветра в качестве системного параметра, чтобы управлять этим значением.
Collision
Этот модуль особенно важен, так как нам нужно знать, где и когда будут появляться дождевые брызги. Если вам не нужен этот эффект, можете отключить модуль, так как он требует больше всего вычислений.
Particle State
Этот параметр нужен для того, чтобы убедиться, что частицы с истёкшим lifetime будут уничтожены.
Solve Forces and Velocity
Когда вы используете AddVelocity или другие модули, которые каким-то образом изменяют скорость частиц, вам нужно добавить модуль Solve Forces and Velocity, обновляющий вычисления.
Scale Sprite Size by Speed
Это необязательный модуль, который позволит добавить вариативность в размерах частиц. Тем не менее вы можете задать рандомный размер капель при спавне.
Generate Collision Event
Брызги дождя появляются при столкновении — для этого в Niagara есть модуль Collision Event. Отлючите его, если вам не нужны брызги.
Sprite Renderer
Нужно использовать заранее созданный материал. В Alignment поставьте «Velocity Aligned». Благодаря этому начальная скорость будет работать как надо.
Брызги дождя
Теперь перейдём к брызгам.
Первый эмиттер — SM_Splash
Вам понадобится примерно такая модель, чтобы сделать брызги. Далее нужно будет просто масштабировать её по осям X и Y.
В качестве материала можно поставить простой unlit материал с полупрозрачностью.
Теперь нужно создать новый эмиттер.
В Emitter Properties поставьте Fixed Bounds, в Emitter State используйте System, а в Particle State примените настройки по умолчанию.
Initialize Particle
- Lifetime Mode — Random.
- Цвет настраивается через системные параметры.
- Mesh Scale Mode — Random.
Scale Mesh Size
Меш масштабируется во время своего существования на сцене. При этом меняется только размер по X и Y с течением времени — от 0 до 2.
Scale Color
Брызги должны постепенно исчезать. Для этого нужно обработать альфа-частицу.
Event Handler и Receive Collision Event
Важно сделать так, чтобы брызги появлялись при столкновении с землёй. Для этого эмиттер должен реагировать на первое столкновение капель — в поле Source поставьте «Emitter: *RainDrops* Event: *CollisionEvent*». Добавьте вариативность — не каждое столкновение должно приводить к всплеску. Выставьте показатели как на изображении ниже.
Mesh Renderer
Здесь достаточно установить меш и материал.
Эта часть эффекта закончена.
Второй эмиттер — SM_SplashMesh_02
Для создания второго эмиттера потребуется чуть больше усилий. Сперва потребуется меш, который похож на брызги.
Теперь создайте ещё один пустой эмиттер.
Обратите внимание на следующие настройки:
- Emitter Properties — убедитесь, что границы зафиксированы;
- Emitter State — используйте System;
- Spawn Burst здесь не нужен;
- Particle State — по умолчанию;
- Solve Forces and Velocity здесь не нужны.
Initialize Particle
Lifetime — рандомное, цвет выбирается из системных параметров, а масштаб меша может быть случайным.
Initial Mesh Orientation
Важно, чтобы всплеск расходился по оси Z, а также рандомно вращался по оси X — так мы добьёмся разнообразия.
Scale Color
Как и в предыдущем случае, этот меш должен постепенно исчезнуть.
Mesh Size Scale
Этот параметр отвечает за всю анимацию всплеска. Здесь можно легко масштабировать кривую, но при этом не испортить всю остальную анимацию.
Event Handler and Receive Collision Event
Это точно так же, как и в предыдущем всплеске — спавн происходит при столкновении. Появление всплеска рандомно — от 0 до 1.
Mesh Renderer
Здесь нужно выбрать меш и материал.
Второй эффект всплеска готов.
Water Dips
Когда капля сталкивается с поверхностью, вода расходится по сторонам и появляется пустое пространство. Чтобы визуально изобразить его, нам потребуется простой полупрозрачный материал.
Создайте ещё один эмиттер со следующими свойствами:
- Emitter Properties — убедитесь, что границы зафиксированы;
- Emitter State — используйте System;
- Spawn Burst здесь не нужен;
- Particle State — по умолчанию;
- Пункт Solve Forces and Velocity здесь не нужен.
Initialize Particle
Lifetime и масса — рандомно между указанными ниже значениями, цвет — выборочно.
Calculate Size and Rotational Interia by Mass
Мы используем массу, чтобы решить, каким будет размер и вращение. Все параметры поставьте так, как на изображении ниже.
Add Velocity in Cone
Velocity strength — рандомно, направление — вверх (ось Z).
Gravity Force
Чтобы эффект выглядел правдоподобно, здесь используются расчёты, основанные на физике. Все настройки должны быть выставлены по умолчанию.
Drag
Значение параметра — 1.
Scale Color
Эффект должен постепенно исчезать. У материала есть нода Particle Color, которую Niagara использует, чтобы управлять материалом эмиттера.
Sprite Size Scale by Velocity
Нужно сделать так, чтобы размер образующегося пространства зависел от скорости.
Event Handler и Receive Collision Event
Эти пустоты будут возникать при столкновении капли с поверхностью. Увеличим количество появлений этого эффекта при помощи Spawn number.
Sprite Renderer
Выберите материал, а в поле Alignment поставьте «Velocity Aligned».
Настройка и звук
Разработчики советуют создать специальный скрипт для быстрой настройки эффекта дождя. С помощью такого менеджера художники могут легко добиться нужного результата.
Сам дождь — это актор с системой Niagara, к которому подключен соответствующий звук. Менеджер должен запускать звук, когда дождь идёт, и отключать, когда он заканчивается.
В результате мы получаем готовый эффект дождя.
Призрак цусимы никогда не выглядел так хорошо, как на УИ.
А зачем спавнить меш на всплеск? Тысячи капель - тысячи мешей, десятки тысяч вертексов. Не лучше ли сделать обычный билборд с изображением всплеска в несколько кадров?
Для начала - капель тысячи, а всплесков десятки - на каждую каплю обычно никто всплеск не спавнит.
Далее - там что бублик что всплеск - лоуполи в несколько треугольников с текстурой по маске, анлит, без коллизии, инстанс. Ну чууть дороже голого билборда (отражения на мокрых поверхностях сцены нивелируют разницу в фпс)
А зачем - затем, что билборд хорош если камера всегда под одним углом. Если же наклон меняется и частые повороты - то билборды сейчас уже смотрятся "слишком 2015".
Может движок автоматически батчит все меши как-то по хитрому? Вообще тот же вопрос, на одном из своих стримов эпики говорили, что спавн- дорогая операция, мол не злоупотребляйте.
Driveclub ?