基本用語
Niagara の基本要素
System
Niagara システムは、エフェクトを構築するために必要なものがすべて入ったコンテナです。システムの中には、全体的なエフェクトを生み出せるようにさまざまな構成要素が積み重なっています。
Niagara の概要

Emitter
エミッタは、Niagara システムでパーティクルが生成される場所です。エミッタは、パーティクルが生まれる方法、生まれたパーティクルが時間経過とともにどうなるのか、パーティクルの外観と動き方を制御します。
Niagara の概要

Module
モジュールは、Niagara のエフェクトの基本の構成要素です。モジュールをグループに追加してスタックを作ります。スタックのモジュールは、上から下へ順次処理されます。
Niagara の概要

Emitter のグループ
Emitter Spawn
CPU 上でエミッタを最初に作成したときに何が起こるかを定義します。このグループは、初期設定とデフォルトを定義するために使用します。
Niagara の概要

Emitter Update
CPU 上でフレームごとに発生するエミッタ レベルのモジュールを定義します。このグループは、パーティクルを毎フレームでスポーンし続けたい場合、パーティクルのスポーンを定義するために使用します。
Niagara の概要

Particle Spawn
パーティクルが初めて生まれたとき、パーティクルごとに 1 回呼び出されます。ここでは、パーティクルが生まれる場所、パーティクルの色やサイズなど、パーティクルの初期化の詳細を定義します。
Niagara の概要

Particle Update
各フレームでパーティクルごとに呼び出されます。パーティクルの時間的な変化に伴ってフレーム単位で変更する必要があるものをここで定義します。
Niagara の概要

Event Handler
Event Handler グループでは、特定のデータを定義する 1 つまたは複数のエミッターに Generate イベントを作成できます。そして、その生成したイベントに反応する動作をトリガーする他のエミッタに Listening イベントを作成できます。
Niagara の概要

Render
このグループでは、パーティクルの表示とパーティクル用の 1 つまたは複数のレンダラの設定を定義します。
Niagara の概要

Renderer の種類
Sprite Renderer
スプライトとは頻繁に使用されるビジュアル エフェクト (VFX) 技法の一つで、テクスチャおよびマテリアルを 2D カメラ方向平面にレンダリングします。
Niagara でスプライト パーティクル エフェクトを作成する方法

Mesh Renderer

Ribbon Renderer
自然現象のシミュレーションは簡単ではありません。特にスプライトまたはメッシュ ベースのパーティクルを使用して煙や飛行機雲などを再現するのは困難な作業です。Ribbon Emitters (リボン エミッタ) はこのようなオブジェクトのシミュレーションに最適なソリューションです。
リボン エフェクト

Sprite の種類
CPU Sprite
エフェクトによっては、数万にもおよぶパーティクルのスポーンが必要になるものがあります。しかし、多数のパーティクルを標準的な CPU で生成すると、パフォーマンスに問題が生じることがあります。
GPU スプライト エフェクト

GPU Sprite
GPU で演算処理をするため、何千もの多くのパーティクルを一度に処理できるのが利点です。高密度でより詳細なパーティクル システムを実現します。
1.1 – CPU と GPU のスプライトパーティクルの比較

マテリアルのブレンドモード
Translucent(透過)
透過ブレンド モードは、何らかの透過処理が必要なオブジェクトに使用します。
マテリアルのブレンド モード


Additive(加算)
加算ブレンド モードは、マテリアルのピクセルを受け取り、それらを背景のピクセルに加えます。つまり、明るさは落ちないということです。すべてのピクセル値が加算されるため、黒は単に透明としてレンダリングされます。このブレンド モードは、火、蒸気、ホログラムなど、さまざまな特殊エフェクトに役立ちます。
マテリアルのブレンド モード


良く使う Module
Emitter Update
Emitter State
ライフサイクル (ループ、存続期間、消滅) をエミッタで管理するか、エミッタを所有するシステムで管理するかを指定します。
Emitter Update グループ
Life Cycle Mode
System か Self かを選択でき、System の場合はその Emitter を所有している System の System State に設定されている値が適用され、

Emitter State 側では各項目に値を設定できなくなる。

Self の場合は Emitter State 側で各項目に値を設定できるようになるが、どうしても Emitter 側で個別に設定したい場合を除いて基本的には System にした方が処理が軽い。
(参考:Unreal Engine 5 Niagaraにおける実践的な最適化とスケーラビリティ【CEDEC 2023】)

Loop Behavior
ループに関する挙動を設定でき、Once の場合は1度のみ再生される。

Multiple の場合はループ回数を指定して再生でき、以下の GIF の例では Loop Count を2に設定している。

Infinite の場合は無限にループ再生される。

Loop Delay / Delay First Loop Only
ループ再生に入る前の遅延を設定できる。
以下の GIF の例では Loop Behavior を Infinite に、Loop Delay を1に設定している。

また、Delay First Loop Only を true にする事で最初の再生時のみ遅延させて2回目以降のループ再生では遅延を挟まないようにする事も出来る。
Spawn Burst Instantaneous
すべてのエミッタにパーティクルのバーストを自発的にスポーンするモジュールです。
System Spawn グループ
Spawn Count / Spawn Time
Emitter 生成時にスポーンさせるパーティクルの数や、Emitter 生成の何秒後にパーティクルをスポーンさせるかを設定できる。
以下の GIF の例では Spawn Count を10に、Spawn Time を1に設定しているが、同じサイズのパーティクルが同じ場所にスポーンしているため Spawn Count の違いは分かりにくい。

Loop Count Limit
Loop Behavior が Multiple か Infinite に設定されている時に何回目のループ再生までパーティクルをスポーンさせるかを設定する事が出来る。
以下の GIF の例では Loop Count Limit を2に設定しており、3回目以降のループ再生からはパーティクルがスポーンしないようになっている。

Spawn Probability
パーティクルのスポーン確率を0から1までの値で設定できる。
例えば、0.7 という値を設定すると 70% の確率でパーティクルがスポーンするが、30% の確率でパーティクルがスポーンしなくなる。
Spawn Rate
Spawn Rate
1秒間にスポーンさせるパーティクルの数を設定できる。


また、Spawn Burst Instantaneous と同様に Spawn Probability でパーティクルのスポーン確率を設定する事が出来る。

Beam Emitter Setup
Particle Spawn
Initialize Particle
Lifetime、Position、Mass、Color などの Point Attributes、Sprite Size、Sprite Rotation などの Sprite Attributes、Mesh Scale などの Mesh Attributes です。このモジュールは、Particle Spawn グループのスタックの一番上に配置されている必要があります。
Particle Spawn グループ
Lifetime Mode
パーティクルの寿命の設定方法を Direct Set にするか Random にするかを設定でき、Direct Set の場合はパーティクルの寿命を Lifetime に直接設定するが、

Random の場合は Lifetime Min(寿命の最小値)と Lifetime Max(寿命の最大値)の間のランダムな値がパーティクルの寿命になる。

Color Mode
パーティクルスポーン時の色の設定方法を Unset にするか Direct Set にするか、

Random Range にするか、

Random Hue/Saturation/Value にするかを設定できる。

Color Mode を Random Range に変更した際に出てくる Color Channel Mode を Link RGBA にすると1つの乱数のみを使用して RGB と透明度の両方の値を決定させるが、Link RGB / Link A にすると RGB で1つ、透明度で1つの乱数をそれぞれ使用して各値を決定させ、Random Individual Channels にすると RGB と透明度の全てのチャンネル(4つ)がそれぞれ別の乱数を使用して各値を決定させる。

また、Color Mode を Random Hue/Saturation/Value に変更すると Hue(色彩)、Saturation(彩度)、Value(明度)、Alpha(透明度)の最小値と最大値をそれぞれ個別に設定できるようになる。

Position Mode
パーティクルのスポーン位置の設定方法を Unset にするか Direct Set にするか、

Simulation Position にするかを設定できる。

Mass Mode
パーティクルの質量の設定方法を「Unset / (Mass of 1)」にするか、Direct Set にするか、

Random にするかを設定できる。

「Unset / (Mass of 1)」の場合は質量が1であり、この状態で Point Force 等でパーティクルを移動させると通常の速さで移動するが、

以下の GIF のように質量を Random か Direct Set で大きい値に変更すると移動速度が小さくなる。

Add Velocity
Shape Location
Spawn Beam
Beam Width
Particle Update
Particle State
パーティクルの存続期間が経過したときにシミュレーションからパーティクルをキル (消去) する処理を行います。
Particle Update グループ
Kill Particles When Lifetime Has Elapsed
パーティクルが寿命を迎えた際にそのパーティクルを削除するかどうかを設定できる。
以下の GIF の例では Loop Behavior が Infinite、Loop Duration が 0.5、パーティクルの Lifetime が 0.5 に設定してあり、Kill Particles When Lifetime Has Elapsed が true の場合はパーティクルが寿命を迎える 0.5 秒毎にそのパーティクルが削除されているため、特に何も変化は無いが、

Kill Particles When Lifetime Has Elapsed が false の場合はパーティクルが寿命を迎えても削除されずにその場に留まり続けているため、明るさが増している。

Scale Color
色をカーブ等で変化させたり、

透明度をカーブ等で変化させたり出来る。

Solve Forces and Velocity
Speed Limit でパーティクルの速さを、Acceleration Limit でパーティクルの加速度の大きさを制限できるが、基本的には Add Velocity 等のモジュールと一緒に使用する。
Scale Sprite Size
Curl Noise Force
Drag
Vortex Force
Point Attraction Force
Color
Sprite Rotation Rate
Wind Force
Aerodynamic Drag
Sub UVAnimation
Scale Mesh Size
Update Mesh Orientation
最後に
参考文献
公式ドキュメント
- Module
- CPU Sprite / GPU Sprite
- Renderer
- その他
書籍
その他
- Unreal Engine 5 Niagaraにおける実践的な最適化とスケーラビリティ【CEDEC 2023】
- 「入門」UE5/UEFNナイアガラの基本(Particle Spawn-Initialize Particle-)Part3-1