Unreal Engine (UE) でゲームやシミュレーションを開発していると、誰もが一度は 「フレームレートの低下」 という壁にぶつかります。特に、広大なオープンワールドや、ディテールにこだわった複雑なシーンを作成する際、PCのスペックに関わらず描画負荷は増大し、スムーズな体験が損なわれがちです。
あなたは今、次のような課題に直面していませんか?
- シーン内のオブジェクトが増えるにつれて、ゲームが重くなってきた。
- 特定の場所で急激にフレームレートが落ち込む。
- 「描画負荷が高い」と言われるが、どこから手をつけていいか分からない。
これらの問題の多くは、「描画する必要のないものまで描画している」 ことが原因です。本記事では、Unreal Engineの描画パフォーマンスを劇的に改善するための三種の神器、LOD (Level of Detail)、カリング (Culling)、そしてオクルージョンカリング (Occlusion Culling) について、初心者から中級者の方に向けて、その基本原理から実践的な設定方法までを徹底的に解説します。
LOD(Level of Detail)
LODとは、カメラからの距離に応じてメッシュのポリゴン数やマテリアルの複雑さを自動的に切り替える技術です。遠くにあるオブジェクトは、たとえポリゴン数が少なくても、ユーザーにはほとんど違いが分かりません。この特性を利用し、描画負荷を大幅に軽減します。
LODの基本と設定方法
Unreal Engineでは、スタティックメッシュエディタ内で簡単にLODを設定できます。
- LODの自動生成: スタティックメッシュエディタを開き、「LOD Settings」セクションの「LOD Group」を選択するか、「Generate LODs」ボタンをクリックします。UEは自動的に元のメッシュからポリゴン数を削減したLODメッシュを生成してくれます。
- LODの確認: ビューポートの「ビューモード」から「LOD Coloration」を選択すると、現在どのLODが描画されているかを色で視覚的に確認できます。
| LODレベル | 距離(画面サイズ比) | ポリゴン数削減率(目安) |
|---|---|---|
| LOD 0 | 100% | 0% (オリジナル) |
| LOD 1 | 50% | 50% |
| LOD 2 | 25% | 75% |
| LOD 3 | 12.5% | 90% |
ベストプラクティス:LODの切り替え距離の調整
LODの切り替え距離(Screen Size)は、パフォーマンスとビジュアル品質のバランスを取る上で非常に重要です。
- 重要度の高いアセット: 主人公や重要なオブジェクトなど、近くで頻繁に見るものは、LODの切り替え距離を短く(LOD 0を長く維持)設定し、品質を優先します。
- 背景アセット: 岩や木など、大量に配置される背景オブジェクトは、LODの切り替え距離を長く(LOD 1以降に早く切り替え)設定し、パフォーマンスを優先します。
💡 UE5のNaniteについて
UE5で導入されたNanite(ナナイト) は、従来のLODシステムを根本から変革する技術です。Naniteを有効にしたスタティックメッシュでは、LODの自動生成や切り替え設定が不要 になり、エンジンが自動的にピクセル単位で最適なディテールを描画します。ただし、スケルタルメッシュ(キャラクター)や透過マテリアルを使用するメッシュにはNaniteを適用できない ため、これらのアセットには本記事で解説した従来のLOD設定が依然として必要です。
カリング(Culling)
カリングとは、描画する必要のないオブジェクトをレンダリングパイプラインから除外する処理の総称です。主に以下の2種類が重要です。
フラスタムカリング(Frustum Culling)
これは最も基本的なカリングで、カメラの視野(視錐台、Frustum)の外にあるオブジェクト を描画リストから除外します。UEでは自動的に行われるため、開発者が意識的に設定することは少ないですが、パフォーマンスの土台となる機能です。
ディスタンスカリング(Distance Culling)
これは、カメラから一定距離以上離れたオブジェクト を描画しないようにする機能です。特に広大なシーンで効果を発揮します。
- 設定方法:
- スタティックメッシュコンポーネントの 「Rendering」 セクション にある 「Desired Max Draw Distance」 を設定します。この距離を超えると、そのメッシュは描画されなくなります。
- より柔軟に制御したい場合は、Cull Distance Volume を使用します。このボリューム内に存在するオブジェクトに対して、距離に応じたカリング設定を一括で適用できます。
よくある間違い:カリング距離の過度な設定
カリング距離を短くしすぎると、オブジェクトが突然ポップアップ(出現)する現象が発生し、ゲームの没入感を損ないます。適切な距離は、ゲームのスケールやオブジェクトの重要度に応じて、テストを繰り返して決定しましょう。
オクルージョンカリング(Occlusion Culling)
オクルージョンカリングは、他のオブジェクト(オクルーダー)によって完全に隠されて、画面に映らないオブジェクト を描画しないようにする機能です。これにより、壁の裏側や建物の中に存在する大量のオブジェクトの描画負荷をゼロにできます。
オクルージョンカリングの仕組みと設定
UEには、プラットフォームやバージョンによって異なるオクルージョン手法が用意されています。
💡 ハードウェアとソフトウェアオクルージョン
PC/コンソール向けのUE5では、GPU を使用したハードウェアオクルージョン(HZB: Hierarchical Z-Buffer)がデフォルトで有効 になっており、特別な設定なしに自動でオクルージョンカリングが行われます。一方、ソフトウェアオクルージョンカリングは主にモバイル向けや低スペック環境向けの機能 であり、プラットフォームやプロジェクト設定によって使い分けられます。
- プロジェクト設定の確認: 「Project Settings」 の 「Rendering」 セクションにある 「Occlusion Culling」 が有効になっていることを確認します(デフォルトで有効)。
- オクルーダーの設定(モバイル向け): モバイル向けソフトウェアオクルージョンを使用する場合、オクルーダー(遮蔽物)となるスタティックメッシュの 「LOD for Occluder Mesh」 設定でオクルージョン計算に使用するLODを指定します。
実践的な活用:オクルーダーの最適化
オクルージョンカリングの計算自体にもコストがかかります。すべてのメッシュをオクルーダーに設定するのではなく、以下の点に注意して最適化します。
- 大きな遮蔽物のみをオクルーダーにする: 小さなオブジェクトをオクルーダーにしても、計算コストに見合う効果は得られません。建物全体、大きな壁、地面など、広範囲を遮蔽できるメッシュに限定します。
- オクルーダーのLOD: オクルーダーとして使用するメッシュは、ポリゴン数を削減したLODメッシュをオクルージョン計算に使用するように設定することで、計算負荷をさらに軽減できます。
デバッグコマンドによる確認
オクルージョンカリングが正しく機能しているかを確認するには、以下のデバッグコマンドが役立ちます。
# オクルージョンカリングの統計情報を表示
stat occlusion
# 描画されているオブジェクト数とカリングされたオブジェクト数を表示
stat initviews
描画最適化のポイント
Unreal Engineの描画パフォーマンス改善は、LOD、カリング、オクルージョンの3つの技術をバランス良く活用することから始まります。
| 技術 | 目的 | 実践的なアクション |
|---|---|---|
| LOD | 遠くのオブジェクトの描画負荷軽減 | スタティックメッシュエディタでLODを自動生成し、切り替え距離を調整する。(Nanite対応アセットは自動化) |
| カリング | 視野外・遠方のオブジェクトの描画停止 | Desired Max Draw Distanceを設定するか、Cull Distance Volumeを使用する。 |
| オクルージョンカリング | 隠れたオブジェクトの描画停止 | UE5ではHZBがデフォルトで有効。モバイル向けはオクルーダーメッシュを設定する。 |
これらの技術をマスターし、定期的にstatコマンドで描画負荷をチェックすることで、あなたのプロジェクトはよりスムーズで快適な体験をユーザーに提供できるようになるでしょう。まずは、シーン内の最もポリゴン数の 多いアセットからLOD設定を始めることをお勧めします。