MegaLights は Unreal Engine 5 のまったく新しい直接ライティング パスであり、これによりアーティストは、以前より桁違いに多いダイナミックおよびシャドウ付きエリア ライトを配置できます。
MegaLights は最新世代のコンソールをサポートするように設計され、レイトレーシングを活用して、多様なタイプのエリア ライトからリアルなソフト シャドウを実現します。
MegaLights はダイナミックシャドウのコストを削減するとともに、シャドウなしライトの評価コストも削減します。これにより、コンソールで、テクスチャ付きエリアライトなど、負荷の高い光源を使用できるようになります。
MegaLights は ボリュメトリックフォグ もサポートします。
MegaLights を使用する
プロジェクトで MegaLights を有効にするには、プロジェクト設定の [Rendering] > [Direct Lighting (直接ライティング)] カテゴリを設定します。ここで [Support Hardware Ray Tracing (ハードウェア レイトレーシングをサポートする)] も有効にすることが求められます。これは MegaLights の推奨設定です。
有効にすると、ローカル ライトはすべて MegaLights システムで処理されます。MegaLights はライト コンポーネントの Allow MegaLights プロパティを使用してライトごとに無効にできます。[MegaLights Shadow Method] を設定して、[Ray Tracing] (デフォルト) または [Virtual Shadow Maps] (VSM) をシャドウイングのソースとして選択することもできます。
仮想シャドウ マップが、簡素化されていない Nanite ジオメトリから直接シャドウをキャストする間に、エリアシャドウを近似するだけです。事前にシャドウ マップ深度を準備するために、ライトごとに VSM に対して CPU、メモリ、GPU 時間のオーバーヘッドがあります。
単一プロジェクト内で、詳細レベルでコントロールするために、MegaLights をポストプロセス ボリューム設定を使用して有効/無効にできます。
MegaLights は r.MegaLights.Allow 0 により、スケーラビリティ レベルまたは仕掛けのプロファイルごとに無効にできます。
技術の概要
MegaLights は確率的直接ライティング テクニックであり、直接ライティングを解決しますが、ライトのサンプリングが重要になります。重要な光源に対して、ピクセルごとに固定数のレイでトレースします。光源にレイがヒットすると、そのライトの寄与が該当するピクセルに追加されます。
このアプローチには、複数の重要な意味があります。
- 直接ライティングは統合方式で単一パスにより処理されます。既存の複数のディファードレンダラ シャドウイングとシェーディング手法を置き換えます。
- MegaLights はシャドウイングのコストを削減するとともに、シェーディング自体のコストも削減します。
- MegaLights には一定のパフォーマンス オーバーヘッドがありますが、対象ピクセルで、ライティングの複雑度が高くなると、品質が低下することがあります。
ディファード シェーディングでは一定のライティング品質が確保されるため、GPU コストがライト数とともに増加します。一方 MegaLights は一定のパフォーマンスであるため、その品質は対象ピクセルのライティングの複雑度で決まります。
MegaLights は次の機能を置き換えます。
- シャドウマップ距離フィールド シャドウ
- レイ トレーシングによるシャドウ
- ディファード シェーディング (BRDF およびライトの評価)
- ボリュメトリック フォグ シャドウイングとライトの評価
- 仮想シャドウ マップの投影
- 個別のライト アクタの設定でシャドウ メソッドが選択されている場合は、引き続き仮想シャドウ マップを MegaLights とともに使用できます。
デフォルトでは、MegaLights はまず、小さい細部をピックアップするために、短い控えめなスクリーン空間レイをトレースします。簡素化されたレイトレーシング シーンで利用できないことがあります。そのようなレイが画面から外れる、オブジェクトの背後になる、または最大長に達すると、MegaLights はハードウェアまたはソフトウェア レイトレーシングを使用して、最後の有効な位置からトレースを続けます。MegaLights を仮想シャドウ マップをレイトレースするようにも設定できますが、そのシャドウでは、事前の追加コストがかかります。これはシャドウ マップはライトごとに生成する必要があるからです。一方 BVH (レイトレーシング シーン) はシーンのすべてのライトに対して 1 回生成されます。
MegaLights でのレイガイディングは、重要な光源を選択するのに役に立ち、対象ピクセルに影響を及ぼす可能性があるライトにさらに多くのサンプルを送るためには重要です。その代わり、レイガイディングは、オクルードされそうな影響が小さいライトにはサンプルをあまり送りません。これがこの手法の重要な部分で、ピクセルあたり一定のライトサンプル バジェットから、可能な限り最高のライティング品質を引き出すことができます。レイガイディングはオクルードされる光源に送られるレイ数を削減しますが、それでも現在のフレームで見えるかどうかをチェックするために、それらを定期的にサンプリングする必要があります。この点に留意して、シーン全体に影響を及ぼす範囲が大きい光源の配置を避ける必要があります。
最後に、蓄積されたライティングすべてがノイズ低減機能に渡され、確率的でノイズが多い可能性がある入力から、高品質の直接ライティングの再構築を試みます。シーンでライティングの複雑度が増えると、ノイズ低減機能で、さらに多くの処理を実行する必要があります。ライティングの複雑度が増えると、ライティングのブラーにつながり、ゴーストを生み出すことがあります。これを回避して、最終ライティング品質を改善するには、小さい光源をマージして大きいエリアライトにして、光源の範囲を慎重に狭めます。
ライティングの複雑度
ノイズ低減機能に大きく依存する前に、単一ピクセルに影響を及ぼすことができる重要なライトの数に制限があります。ピクセルごとのサンプルの固定数と固定バジェットがあるからで、ノイズ低減機能でブラーのあるライティングを生み出し、結果としてシーンにノイズやゴーストを生み出す可能性があります。ライトの減衰範囲を狭め、光源のクラスタを単一のエリアライトで置き換えることで、ライトの配置を最適化することが引き続き重要です。
シーン内で MegaLights をうまく機能させるために、最適なのはシーン ジオメトリ内でライトを配置することを避け、ライトの範囲を最適化することです。コンソール コマンド r.MegaLights.Debug 1 を使用して、選択ピクセルからレイが送られる場所をビジュアル化できます。コンソール コマンド r.ShaderPrint.Lock 1 を使用して、選択レイをフリーズできます。これにより、トレースされたレイをシーンのさまざまな場所から調べることができます。
MegaLights は Unreal Engine の正式版の機能として開発されているため、追加のビジュアライゼーション ツールが利用可能です。
以下の例では、テクスチャ付き矩形ライトの一部は壁の内側にあり、常に見えるとは限らない場合でも、MegaLights によるサンプリングが必要です。これはビジュアライゼーションで確認できます。壁の中でトレースされるレイの一部が表示されます。理想的には、テクスチャ付き矩形ライトの [Source Width (ソースの幅)] と [Source Height (ソースの高さ)] を、光源がこのアーチを満たすがそれを超えて広がらない程度に狭めるようにします。
ノイズを最小限に抑えるには、ジオメトリ内部にライトを配置することを避け、ライトの減衰範囲、スポットライトのコーン角、および矩形ライトのバーンドアを最適化し、ライトの影響を絞り込みます。
レイトレーシング シーン
デフォルトでは、MegaLights はレイトレーシングを使用し、シャドウ品質は、レイトレーシング シーンの表現の品質で決まります。パフォーマンスについては、レイトレーシング シーンは自動で簡素化された Nanite メッシュを使用して構築され、メイン ビューよりも大胆なカリング設定を使用します。これによりシャドウのアーティファクト、リーキング、シャドウの欠損が生じることがあります。
レイトレーシング シーンのビジュアライゼーションは、シャドウイング問題を調査するための優れた開始ポイントです。MegaLights でレイトレースした、実際のシーンの表現が表示されます。次のとおりレイトレーシング シーンをビジュアル化できます。
- [Ray Tracing Debug (レイトレーシングデバッグ)] 表示モードの 1 つ、レベル ビューポートの表示モード メニューにあります。[Ray Tracing Debug] 表示モードは、コンソール コマンド
show RayTracingDebug 1とr.RayTracing.DebugVisualizationMode = "World Normal"でも利用できます。 - [Lumen Overview (Lumen 概要)] 表示モード。レイトレーシング シーンとメイン ビューを同時に表示できるピクチャーインピクチャー ビジュアライゼーションを有効にします。[Lumen Overview] 表示モードはコンソール コマンド
r.Lumen.Visualize 1でも利用できます。
![]() |
![]() |
| シーン ビュー | レイトレーシング ワールド法線ビジュアライゼーション表示モード |
一部のシャドウが欠損または距離で消失する場合は、レイトレーシング シーンのカリングが原因である可能性があります。r.RayTracing.Culling.* の下にあるコンソール コマンド群を使用して、カリングの調整を開始できます。このときカリング モード、半径、立体角変数を確認します。
カリング目的で、小さいオブジェクトを Ray Tracing Group Id を使用して、マージできます。マージされた範囲でまとめてカリングできるようにします。
レイトレーシング シーンのカリング コントロールの詳細については、「レイトレーシング パフォーマンス ガイド」を参照してください。
レイトレーシング シーンは自動的に簡素化された Nanite フォールバック メッシュに基づいています。デフォルト設定では、シャドウイング目的としては品質が低すぎるフォールバック メッシュになることがあり、手動での調整が必要になることがあります。このためには、次の手順を実行します。
- 対象メッシュをスタティックメッシュ エディタで開きます。
- [Details (詳細)] パネルの [Nanite Settings (Nanite 設定)] で [Fallback Target (フォールバックターゲット)] を [Relative Error (相対誤差)] に設定します。
- [Fallback Relative Error (フォールバックの相対誤差)] という新しい設定が表示され、その値を設定できます。値を減らすと、三角形数が増え、Nanite フォールバック メッシュの忠実度が高くなります。
- 設定したら、[Apply Changes (変更を適用)] をクリックして、Nanite フォールバック メッシュを再構築します。
Nanite フォールバック メッシュのセットアップの詳細については、「Nanite 仮想化ジオメトリ」を参照してください。
レイトレーシング シーンに含まれる、Nanite フォールバック メッシュの三角形数とインスタンス数は、レイトレーシング BVH ビルド時間、使用メモリ、レイトレーシング パフォーマンスに影響を及ぼします。プロジェクトで利用可能なパフォーマンスとメモリ バジェットにしたがって、それらを慎重に増やすことを推奨します。
非リアルタイム レンダリングでは、r.RayTracing.Nanite.Mode 1 を使用することもできます。これは Nanite メッシュの細部をすべて使用してレイトレーシング シーンを構築します。これには、高いパフォーマンス コストおよびメモリ コストがかかり、シーンやカメラ アニメーションの中で、Nanite LOD カットが変わり、その BVH で再構築が必要であるときに、ヒッチが発生することがあります。
スクリーン空間トレース
MegaLights は、大規模ジオメトリの細部にシャドウをキャストするときにレイトレーシング シーンを使用しますが、簡素化したレイトレーシング シーンで失われることがある、小規模のジオメトリにスクリーン空間トレースを活用します。スクリーン空間トレースはシーン深度を使用し、画面上で可視であるどの対象にもヒットします。これによりアートディレクションの何らかの調整が必要な問題が発生することがあります。シーン深度に影響がなく、レイトレーシング シーンにのみ存在する不可視のシャドウ キャスターなどがあります。
スクリーン空間レイ長をコンソール コマンド r.MegaLights.ScreenTraces.MaxDistance を使用して、短縮することができます。代わりとして、レイトレーシング シーンにすでに十分な精度がある場合に、スクリーン トレースを完全に無効にできます。これにより、スクリーン空間とビューに依存する多様なアーティファクトを最小化できます。
シャドウイング メソッド
MegaLights は 2 つのシャドウイング メソッドを公開します。これはライト コンポーネントのプロパティを使用してライトごとに選択できます。
- レイトレーシング はデフォルトであり推奨メソッドです。ライトごとに追加のコストがかからず、正確なエリアシャドウを実現できます。マイナス面は、シャドウ品質が簡素化したレイトレーシング シーンに依存することです。
- 仮想シャドウ マップ は 仮想シャドウ マップ に対するレイをトレースします。仮想シャドウ マップは、ラスタライズを使用してライトごとに生成され、Nanite メッシュの細部を完全にキャプチャできます。マイナス面はエリアシャドウを近似できるだけであるのと、シャドウ深度を生成するために使用されるメモリ、CPU、GPU のオーバーヘッドがライトごとにあるために大幅な追加コストがかかります。これは慎重に使用する必要があります。
デフォルトでは、すべてのライト、特にソフトなシャドウがある大規模なエリア光源や重要ではないライトは、レイトレーシングを使用します。ソフトなライトでは正確なシャドウ キャスターが必要ないからです。他に重要なのは、レイトレーシング シーンに少し多くのバジェットを割り当てることです。これは高品質のレイトレーシングの表現ではコストの低いレイトレーシング パスで多くのライトを処理できるからです。
ライト関数
ライト関数がサポートされるのは、ライト関数アトラス と互換性があり、ライト関数アトラスがプロジェクト設定で有効になっている場合に限ります。
アルファ マスキング
デフォルトでは、スクリーン空間トレースのみが、アルファ マスク サーフェスを正確に処理できます。レイトレーシングのアルファ マスキング サポートは、コンソール コマンド r.MegaLights.HardwareRayTracing.EvaluateMaterialMode 1 を使用して、有効にできます。このオプションを有効にすると、自明ではないパフォーマンス オーバーヘッドがあり、したがって最適なのはコンテンツでアルファ マスキングを避けることです。
品質のスケーリングアップ
ライティング品質をハイエンド PC やオフライン レンダリングにスケーリングする機能は、引き続き開発中です。現時点で、ピクセルごとのサンプル数のみを次のコンソール コマンドを使用してコントロールできます。
r.MegaLights.NumSamplesPerPixel 16:これにより、不透明型サーフェスで高いライティング品質を実現します。r.MegaLights.Volume.NumSamplesPerVoxel 4:これにより、ボリュメトリック フォグなどのボリュームで高いライティング品質を実現します。
MegaLights は ムービー レンダー キュー 向けにカスタマイズしたサポートはまだありませんが、アンチエイリアシング メソッドとしてテンポラル スーパー解像度 (TSR) を使用する、またはテンポラル サンプル数を 8 程度に設定することで、ライティングを正確に解決でき、優れた結果を達成できます。
パフォーマンス
パフォーマンスを比較するときに重要なのは、MegaLights はすべての直接ライティングを解決し、次の多様なディファードレンダラ パスを置き換えるという点を理解することです。
- シャドウ深度: シャドウ マップや仮想シャドウ マップを使用する場合
- RenderDeferredLighting::Lights
- VolumetricFog::Shadowed Lights
- ライトの評価を VolumetricFog::LightScattering から削除します。
パフォーマンスに影響を及ぼす要素:
- パフォーマンスは内部レンダリング解像度に大きく依存します。
- レイトレーシングは MegaLights のコストで 2 番目に高い部分になっています。このコストが依存するのは、複数の要素に依存します。具体的には、レイトレーシング シーンのインスタンス数、その複雑度、各フレームで更新が必要なオーバーラップするインスタンスの量とダイナミック三角形の量です。レイトレーシング シーンの最適化の詳細については、「レイトレーシング パフォーマンス ガイド」を参照してください。
- ライトごとに、シャドウ マップ深度を生成するときに、メモリ、CPU、GPU に追加のオーバーヘッドがあります。これはシャドウイングに、レイトレーシングではなく、仮想シャドウ マップを使用します。
- 複雑な BRDF である画面上のピクセルに対して小さいコストがかかり、負荷の大きいライト タイプ (テクスチャ付き矩形ライト) で影響があります。
MegaLights のコストは多くの場合は一定で、シャドウなしとシャドウありでライトに大きな差はありません。つまりシーンのライトすべてで、シャドウを有効にできます。
理想的には、MegaLights は Lumen HWRT とともに使用します。これにより、レイトレーシング シーンのオーバーヘッドとシステム間の最適化を共有できます。
Stat GPU では、MegaLights パスを含め、GPU タイミングの概要を示します。詳細のタイミングは、組み込み ProfileGPU またはサードパーティ プロファイラを使用して取得できます。
Unreal Engine では多様な機能からの複数ディスパッチをオーバーラップするために非同期コンピュートを使用します。Stat GPU と ProfileGPU のタイミングは、r.RDG.AsyncCompute 0 コンソール コマンドを使用して非同期コンピュートを無効にするまで、ひずんでいます。
MegaLights は完全に GPU 主導ですが、ライトごとに、レガシー CPU コストがそれでも多少あります。すべてのライトがレイトレーシングを使用する MegaLights である場合、ライトごとの CPU コストの多くは、コンソール コマンド r.Visibility.LocalLightPrimitiveInteraction 0 を使用して取り除くことができます。
制限事項
一般制限事項:
- MegaLights はフォワード レンダラと互換性がありません。
現在の制限事項 (改善予定):
- プリミティブのインタラクションを追跡するときに、ライトごとのレガシー CPU オーバーヘッドがあります。この追跡は MegaLights で必要ありません。
- ディレクショナル ライトはサポートされません。
- 現時点で、MegaLights は、プロジェクト設定に応じて、仮想シャドウ マップまたはレイ トレーシングによるシャドウにフォールバックします。
- サブサーフェス スキャッタリングの厚さ評価はサポートされていません。
- 束ベースの髪はサポートされていません。
- 透過処理はサポートされていません。
- MegaLights ではシャドウなしの遅いディファードレンダラ ライティングの透過処理にフォールバックします。
- 水、雲、異種ボリューム、ローカル ボリュメトリックはサポートされていません。
- Lumen は適度なパフォーマンスの多数のライトを処理しますが、MegaLights が Lumen と完全に統合されると、大幅に改善されます。
- ソフトウェア レイトレーシングパスは開発中であり、シャドウ品質に制限があります。
プラットフォーム サポート
- MegaLights が設計されている対象は現行世代のコンソール (PlayStation 5、Xbox Series X、 | S) およびレイトレーシング機能を備えた PC です。
- MegaLights はモバイル、Switch または前世代のコンソール (PlayStation 4 や Xbox One など) をサポートしません。

