跳到正文
zenn · 游戏开发社区· 来源· miyabi·· 8 小时前AI 评分52

UE5/Niagara 烟雾与火花效果过重时的 5 个优化要点

【UE5/Niagara】煙や火花が重いときに見直す5つのポイント

正文 · 原文

はじめに

UE5でアクションゲームを作っていると、攻撃ヒット時の火花や爆発、煙を増やしたくなります。でもエフェクトを盛っているうちに、戦闘中だけフレームレートが落ちることがあります。

そんなとき、単に「Niagaraだから重い」「GPUシミュレーションなら速い」と決めつけるのは危険です。Niagaraのコストには、パーティクルのシミュレーションだけでなく、システム/エミッタの管理や、実際に画面へ描画する処理も含まれます。

この記事では、UE5.8の公式ドキュメントを参考に、Niagaraの負荷を調べてから改善する方法を5つに整理します。

まず、問題のエフェクトが出ている場面を再現し、コンソールで次を実行します。

stat unit
stat gpu

stat unit はゲームスレッド・描画スレッド・GPUの時間を見る入口、stat gpu はGPU処理の分類をリアルタイムで眺める入口です。詳しく調べるときは profilegpu を使います。

Niagaraの情報を調べるには、レベルエディタで:

Tools → Debug → Niagara Debugger

を開きます。Debug HUD を有効にすると、アクティブなシステム、エミッタ、パーティクル数などを確認できます。FX Outliner もシステムごとの状態を見るのに便利です。

あわせて、エフェクトのコンポーネントを一時的に非表示/停止した条件と比較します。ただし停止するとCPUのシミュレーションと描画の両方が変わるため、差が出ても何の処理が原因かはまだ未確定です。

① 半透明の重なり(オーバードロー)を減らす

煙・炎・オーラなどの半透明スプライトは、同じ画面上のピクセルに何枚も重なるとコストが増えることがあります。

ビューポートの View Mode で Shader Complexity または Quad Overdraw を確認します。

viewmode shadercomplexity

特に大きな煙をカメラの近くに表示したとき、画面の広い範囲で赤くなるなら改善候補です。

見直し方は次のとおりです。

  • スプライトのサイズを必要最小限にする。
  • 不要な粒子の発生数を減らす。
  • 同じ場所に大量の透明スプライトを重ねない。
  • 使用マテリアルの処理を軽くできないか調べる。

粒子を半分にすれば必ず描画時間も半分になる、というわけではありません。 占める画面面積や材質、レンダリング方式も関係します。

② 表示距離と品質設定で不要なシステムを止める

遠くにある小さな火花まで、近距離と同じ品質で処理する必要はないかもしれません。

Niagaraには Niagara Effect Type という仕組みがあり、複数のNiagara Systemへ共通のスケーラビリティ/バジェット設定を適用できます。

  1. Content Browserで右クリックし、FX → Niagara Effect Type を作成する。
  2. 対象のNiagara Systemのプロパティで、そのEffect Typeを割り当てる。
  3. 距離や品質レベルに応じたカリング/スケーリングを設定する。
  4. 近距離・遠距離で、見え方と動作の両方を確認する。

小さな被弾エフェクトや遠くの環境エフェクトは、優先度に応じて削減候補になります。

③ EmitterとSystemを増やしすぎない

一つの見た目を作るために、細かなEmitterを大量に追加すると管理コストが積み重なります。多数のSystemインスタンスを同時に生成している場合も同様です。

例えば、ヒット時に 煙用・火花用・発光用 の複数のEmitterを使っているなら、構成を見直す余地がないか確認します。

  • 同じ処理を繰り返していないか。
  • 視覚的に統合できるEmitterはないか。
  • 似たSystemを同じ場所で大量にSpawnしていないか。

ただし統合すると、個別のカリングが難しくなることもあります。Emitterが少なければ常に速いわけではないので、変更前後を測ることが重要です。

④ CPU/GPU Simulationを使い分ける

Emitterのシミュレーション対象はCPUとGPUの選択ができます。

  • GPU Simulation:多数の粒子を並列に処理しやすい。
  • CPU Simulation:粒子が少ない場合やCPU処理を要する場合に向くことがある。

ただし、GPUシミュレーションへ切り替えても、SystemとEmitterのスクリプト処理の一部はCPUに残ります。GPUがすでに限界のシーンでは、GPUへ移せば改善するとは限りません。

「パーティクル数が多いからGPUにする」ではなく、実際のCPU時間とGPU時間で決めるのが基本です。

⑤ 短時間に大量生成するエフェクトはプーリングを検討する

弾が当たるたびに新しいNiagara Systemを生成して破棄する場合、コンポーネントの確保やGCが負荷になることがあります。

Spawn System at Location や Spawn System Attached で用意されている Pooling Method を利用すると、再利用可能なNiagaraコンポーネントを使い回せます。

ただし、プーリングはシステムの生成・破棄に関する負荷への対策です。大量の半透明描画そのものを減らす方法ではありません。プールを大きくしすぎるとメモリ消費も増えるため、実測しながら決めます。

最後に:改善を判断するためのチェック表

調べる項目 調査方法 改善候補
半透明の重なり Shader Complexity / Quad Overdraw スプライト数・サイズ・マテリアル
System数・粒子数 Niagara Debugger の Debug HUD 不要なSystemを減らす
遠距離でも動作しているか Niagara Effect Type / Scalability 距離・品質に応じたカリング
CPU・GPUどちらが重いか stat unit / Unreal Insights Simulation Targetを検討
生成時だけカクつくか 再現テスト・Profiler プーリング、生成タイミング

同じシーン・同じカメラ・同じ解像度で変更前後を計測し、見た目とゲームプレイ上の影響も確認しましょう。

まとめ

Niagara最適化では、まず測る → 原因の種類を分ける → 一つずつ変える → 同じ条件で測り直すことが大切です。

特に個人制作のゲームでは、エフェクトを全部削るのではなく、目立つ場面の見た目を守りながら、目立たない場所のコストを減らすのが現実的だと思います。

参考資料

来源:zenn · 游戏开发社区 · zenn.dev