本記事は Unreal Engine (UE) Advent Calendar 2025 シリーズ1の3日目の記事です。
先日CEDEC九州の前日に Epic Games の池田さんによるハンズオンセミナーがあり、参加してきました。
Lightweight Emitter の使い方以外でも、Niagaraの最適化や細かいテクニックなど、とても勉強になったのでこの場で共有できればと思います。
※ UE5.7時点の情報として参考にしていただけたら幸いです。
Lightweight Emitterとは
名前の通り軽量なエミッターで、UE5.4から追加されました。
2024年のCEDECでもEpic Games池田さんの講演で触れられていたりしました。
通常のエミッターと比べて非常にシンプルな構造で、主にCPUとメモリの使用量を抑えられます。(GPUにも多少効果ありとのこと)
Niagaraは基本的にCascadeよりも重いですが、Lightweight EmitterはCascadeよりも軽いケースが多いとのことです。
実際に通常のエミッターと比べてみました。
シーンには煙のNiagaraエフェクトを10個配置してNiagara Debuggerでゲームスレッドを計測しています。

計測してみると半分近く軽くなっていることが分かりました。
また、大きな特徴として通常のエミッターでは、[Particle Spawn]や[Particle Update]などのステートごとに各パーティクルが内部的に状態を保持しているステートフルな作りに対して、Lightweight Emitterでは、各パーティクルの現在の状態のみに基づき計算されるステートレスな作りになっています。
エミッターの見た目も違いがあります。

Lightweight Emitterでは、他のパーティクルや過去の状態に依存しないステートレスな作りのため、機能は限定的ですがそのぶん負荷が軽くなっています。このあたりもCEDECの資料で解説されていますので詳しい情報はそちらを参照していただければ幸いです。
基本的な使い方
エミッターの作成
通常のエミッターと同じようにグラフ上で右クリックから[Add lightweight emitter]で作成できます。

通常のエミッターとのトレードオフではなく、1つのNiagaraシステム内で共存させることができるので軽量化したいエミッターのみを Lightweight Emitter に置き換えることもできます。
モジュールの追加
通常のエミッターと同じ手順で[+]アイコンからモジュールを追加できます。
大きく[Spawn]、[Simulate]、[Render]に分かれています。
モジュールを追加すると並び替えはできず、自動でソートされます。

使用できるモジュールは限られており、自作することはできません。
エンジンから提供されているモジュールは、基本的なモジュールは揃っており、レンダーモジュールを見てみると8種類 → 5種類に減っていますが特殊なモジュールのみ制限されているという印象で頻繁に使うモジュールは同じように使用できます。

また、通常のエミッターのモジュールと同名のモジュールは同じように使えますが、詳細ウィンドウでの調整方法に若干違いがあります。
通常のエミッターでは、右端の[▽]からパラメータを変換できますが、Lightweight Emitterでは、プルダウンメニューから限られた選択肢から選んで変換します。

Spawn Rate もバーストとモジュールが分かれておらず、1つのモジュールで切り替えられたりします。

ユーザーパラメーター
パラメータを[Binding]に変更して、ユーザーパラメータを指定するだけでLightweight Emitterでも紐づけて使うことができます。

最適化や細かいテクニック
Fast-SU
Niagaraシステム内のエミッターがLightweight Emitterのみであれば、[System State]のチェックを外すことによってさらに軽量化できます。

この状態になっていれば、プレビューの右下に「Fast-SU」と表示されます。(Niagara Debugger上でも表示されます。)

複数のエミッターをまとめる
Niagaraシステムをレベル上に複数配置する場合、1つのNiagaraシステム内でまとめるとさらに軽くすることができます。
[Initialize Paticle]の[Initial Position Distribution]で初期位置を調整できます。

さらに変態的な軽量化手段として、[Initial Position Distribution]を配列にして1つのエミッターで複数の箇所に生成してしまうという方法もあります。

どちらの方法も範囲を広げすぎると描画負荷が上がってしまう恐れがあるため注意が必要とのことです。
Emitter Stateの設定
通常のエミッターでいうところのEmitter Stateは、Lightweight Emitterでは[Properties]から設定できます。(若干ハマりポイントなので書いておきます。)

システムパラメーターの活用
Lightweight Emitterでは直接扱えない値もシステムパラメーターを介することで扱えてしまいます。
例えば、Lightweight Emitterでは、[Sample Skeletal Mesh]モジュールが無いため、ボーンの位置のサンプリングなどができないのですが、[System Update]でサンプリングしたものをシステムパラメータにセットし、さらにLightweight Emitter側でバインディングすることによって特定のボーンの位置からパーティクルを出すといったことができるようになります。
