Lumen の技術的詳細

Lumen のグローバル イルミネーションおよび反射に関する技術的機能とスペックの概要です。

Windows
MacOS
Linux

Lumen は、複数のレイ トレーシング手法を用いてグローバル イルミネーションと反射に対処します。最初にスクリーン トレースを行ない、その後さらに確実な方法が続きます。

Lumen はデフォルトで符号付距離フィールドを通して ソフトウェア レイ トレーシング を使用しますが、ハードウェア レイ トレーシング が有効な場合、対向するビデオ カードでの高品質を実現します。

Lumen のグローバル イルミネーションと反射の主なシッピング ターゲットは、次世代のコンソールで 60 フレーム/秒 (fps) で動作する大規模なオープン ワールドに対応することです。エンジンの High スケーラビリティ レベルには、60fps をターゲットとする Lumen の設定が含まれています。

Lumen の第二の焦点は次世代コンソールにおける 30 fps のきれいな室内照明です。エンジンの Epic スケーラビリティ レベルは、1080p の内部解像度でグローバルイルミネーションと反射を実現する次世代コンソールで約 8 ミリ秒 (ms) を生成し、ネイティブ 4k に近い品質で出力するために時間的超解像に依存しています。

サーフェス キャッシュ

Lumen は サーフェス キャッシュ と呼ばれる、近くのシーンのサーフェスの自動パラメータ化を生成します。これはシーン内の光線の当たるポイントのライティングを素早く調べるために使用します。Lumen は複数の角度から各メッシュのマテリアル プロパティをキャプチャします。このキャプチャ位置 (カード と呼ばれる) はオフラインで各メッシュに生成されます。 r.Lumen.Visualize.CardPlacement 1 を用いて表示することができます。

Nanite は三角ポリゴン シーンとサーフェス キャッシュを同期させておくのに使用するメッシュのキャプチャを迅速化します。特に高ポリゴン メッシュでは、効率的にキャプチャするには Nanite を使用する必要があります。

サーフェス キャッシュにマテリアル プロパティが入力された後、Lumen はこれらのサーフェス位置に対する直接ライティングと間接ライティングを計算します。このアップデートは複数のフレームにわたって償却され、多くの動的ライトや多方向にバウンスするグローバル イルミネーションに効率的に対応します。

Unreal Engine はサーフェス キャッシュとカード表現の表示モードを備えています。詳細については、このページの「Lumen 表示オプション」セクションを参照してください。

シンプルな内部のメッシュのみに対応しています。 壁、床、天井は別々のメッシュにする必要があります。大規模な単一メッシュのインポートは Lumen では動作しないと想定されます。

画面トレース

Lumen の特徴は、光線が当たらない場合やサーフェスの後ろを通る場合にさらに確実な方法を使う前に、まずスクリーンに対してレイをトレース (画面トレース またはスクリーン空間トレーシングと呼ばれる) することです。画面トレースはあらゆるジオメトリ タイプに対応しており、Lumen シーンと三角ポリゴン シーン間の不一致をカバーするのに役立ちます。

画面トレースを使用する上でのデメリットは、間接ライティング スケーリングやエミッシブ ブーストのライティング プロパティのような、間接ライティングにのみ適用する美術演出の制御が幅に制限されることです。

下のシーンでは、ソフトウェア レイ トレーシングは他のもっとコストの高いトレース オプションに切り替える前に、まず画面トレースを使用します。グローバル イルミネーションと反射で画面トレースが無効の場合、Lumen シーンのみが表示されます。画面トレースは三角ポリゴン シーンと Lumen シーン間で起こり得る不一致に対処します。

コンソールを使用して r.Lumen.ScreenProbeGather.ScreenTraces 0`r.Lumen.Reflections.ScreenTraces 0 に設定すると比較のために画面トレースを無効にできます。

画面トレース有効| (Default)

画面トレース無効

Lumen レイ トレーシング

Unreal Engine 5 では、Lumen には 2 つのレイ トレーシングの方法があります。さまざまなハードウェアとプラットフォームで動作する ソフトウェア レイ トレーシング と、動作するには対応するビデオ カードとシステムが必要な ハードウェア レイ トレーシング です。

ソフトウェア レイ トレーシング

Lumen はデフォルトで符号付距離フィールドに対してソフトウェア レイ トレーシングを使用します。このトレーシング表現は Shader Model 5 (SM5) に対応したすべてのハードウェアで対応しており、プロジェクト設定で メッシュ距離フィールドの生成 を有効にすることだけが必要です。

レンダラはメッシュ距離フィールドをグローバル距離フィールドに統合し、トレーシングを高速化します。デフォルトで Lumen は精度のために各メッシュの距離フィールドの最初の 2 メートルに対してトレースし、各レイの残りの部分には統合したグローバル距離フィールドに対してトレースします。インスタンスが極端に重なり合うプロジェクトは、プロジェクト設定の ソフトウェア レイ トレーシング モード で Lumen が使用する方法で制御できます。

Lumen のソフトウェア レイ トレーシングには 2 つのトレーシング オプションがあります。

  • 詳細トレーシング はデフォルトのトレーシング方法です。高品質を得るために個々のメッシュの距離フィールドに対してトレースします。最初の 2 メートルは精度のために、各レイの残りの部分はグローバル距離フィールドのために使用します。

  • グローバル トレーシング は、最速でトレースするためにグローバル距離に対してトレースします。

メッシュ距離フィールドは、カメラがワールド内を移動する際に距離に応じてストリーミングを入出力します。レイ トレーシングできるように単一のアトラスにパックされており、 r.DistanceFields.LogAtlasStats 1 を使ってログに出力できる統計があります。

Lumen のソフトウェア レイ トレーシングの品質はメッシュの距離フィールド表現の品質による場合があります。メッシュ距離フィールドグローバル距離フィールド の 2 つのビジュアリゼーション オプションは、ビューポートの [Show (表示)] > [Visualize (視覚化)] メニューにあります。

メッシュ距離フィールドの | ビジュアリゼーション

グローバル距離フィールドの | ビジュアリゼーション

あるメッシュでは、薄いサーフェスは距離フィールド表現ができず、光の漏れの問題が起こるかもしれません。メッシュ距離フィールド のビジュアリゼーションは、このような問題を見つけるのに役立ちます。

mdfresolution-chandelier.png

(左から右) 三角ポリゴン メッシュ、距離フィールド解像度スケールが 1.0、1.5、2.0。

距離フィールド表現を改善するには 2 つの方法があります。プロジェクト全体に影響する、プロジェクト設定の ディスタンス フィールド ボクセル密度 を使用して、プロジェクトでの距離フィールド表現を改善できます。できれば、スタティック メッシュ エディタで、ソフトウェア レイ トレーシングで問題を引き起こしているメッシュのみの 距離フィールド解像度スケール を調節してください。距離フィールド解像度や密度を高めるとプロジェクトのディスク サイズも大きくなります。

プロジェクト設定:ディスタンス フィールド ボクセル密度

スタティック メッシュ エディタ:距離フィールド解像度スケール

画像をクリックしてフルサイズ表示

画像をクリックしてフルサイズ表示

ソフトウェア レイ トレーシングの制限事項

ソフトウェア レイ トレーシングにはプロジェクトでの使用方法と現在対応しているジオメトリとマテリアルのタイプに関連したいくつかの制限事項があります。

これは、既知の問題や制限事項を網羅したりすとではありませんが、Unreal Engine 5 の早期アクセスの Lumen ソフトウェア レイ トレーシングで作業する際に予期すべき事の大部分を表しています。

ジオメトリの制限
  • インスタンス スタティック、インスタンス スタティック メッシュ、階層インスタンス スタティック メッシュのみが Lumen シーンに表示されます。

  • 現時点では、ランドスケープ ジオメトリは Lumen シーンに表示されないので、ライティングをバウンスしません。この制限事項は、Unreal Engine の今後のリリースで対応する予定です。

マテリアルの制限
  • ワールド位置オフセット (WPO) に対応していません。

  • 距離フィールドは透明なマテリアルを無視し、マスキングされたマテリアルは不透明として扱われます。これによって、葉の広い範囲がマスキングされたフォリッジに顕著なオーバー シャドウイングが発生します。

  • 距離フィールドはオーバーライド コンポーネントではなく、スタティック メッシュ アセットに割り当てられたマテリアルのプロパティで構築されます。異なるブレンド モードまたは両面プロパティのマテリアルでオーバーライドすると、三角ポリゴン表現と距離フィールドの間で不一致が起こります。

ワークフローの制限
  • ソフトウェア レイ トレーシングにはモジュール式の部品から作成されたレベルが必要です。壁、床、天井は別々のメッシュにする必要があります。山のような大きなメッシュは表現が低下し、自己オクルージョン アーティファクトを起こすかもしれません。

  • 光の漏れを避けるため、壁は 10 センチよりも薄くならないようにする必要があります。

  • メッシュ距離フィールドの解像度はスタティック メッシュのインポートした時のスケールに応じて割り当てられます。メッシュを小さくインポートしてコンポーネントでスケールアップすると、十分な距離フィールドの解像度がありません。レベルに配置されたインスタンスに大幅なスケーリングを使用する場合、補正するために距離フィールド解像度スケールを使用してください。

  • 距離フィールドは非常に薄い特徴や後ろから見た片面のメッシュを表すことはできません。片面のメッシュの三角ポリゴンの裏面をビューアに見えないようにして、アーティファクトを避けます。

ハードウェア レイ トレーシング

ハードウェア レイ トレーシングは、ソフトウェアレイ トレーシングよりも広範囲のジオメトリ タイプに対応しています。具体的には、スキン メッシュに対するトレーシングに対応しています。またハードウェア レイ トレーシングは、より高い品質へのスケール アップできます。実際の三角ポリゴンと交差し、低品質のサーフェス キャッシュの代わりに当たった光線のライティングを評価するオプションがあります。しかし、ハードウェア レイ トレーシングのシーン設定コストは非常に高く、現時点では 100,000 インスタンス以上のシーンにスケーリングすることはできません。スキン メッシュのような動的に変形するメッシュも、スキン 三角ポリゴン メッシュの数に比例して、フレームごとにレイ トレーシングの加速度構造アップデートするために大きなコストがかかります。

Nanite を使用するスタティック メッシュでは、ハードウェア レイ トレーシングは Nanite のスタティック メッシュ エディタ設定の プロキシ三角比率 から生成したプロキシ メッシュ上でのみ動作できます。これらのプロキシ メッシュは、コンソール コマンド r.Nanite 0 またはホットキー CTRL + N を使って視覚化できます。

画面トレースは Nanite でレンダリングされたフル 三角ポリゴン メッシュと Lumen でレイ トレースされたプロキシ メッシュ間の不一致をカバーするために使用します。しかし、いくつかのケースでは、不一致が大きすぎて隠しきれません。その様な場合、プロキシ三角比率を上げると誤った自己交差アーティファクトを減らすことができます。

フル ディテール 三角ポリゴン メッシュ

Nanite の生成したプロキシ メッシュ

Lumen は以下の場合、ハードウェア レイ トレーシングを使用します。

  • プロジェクトの サポート ハードウェア レイ トレーシング が有効で、Lumen のプロジェクト設定の 利用可能な場合はハードウェア レイ トレーシングを使用 が有効な場合。[Rendering (レンダリング)] カテゴリの [Project Settings (プロジェクト設定)] で設定します。これらの設定を変更するには Unreal Engine を再起動する必要があります。

  • プロジェクトをサポート対象のオペレーティング システム、RHI、ビデオ カードで実行している。現時点では、以下のプラットフォームのみハードウェア レイ トレーシングのパフォーマンスに対応しています。

  • DirectX 12 を搭載した Windows 10

    • PlayStation 5

    • Xbox シリーズ X/Y

    • ビデオ カードは、NVIDIA の RTX-2000 シリーズかそれ以上、または AMD RX 6000 シリーズかそれ以上でなければいけません。

大規模ワールド

Lumen シーンはシーン全体ではなくカメラ近くのワールドで動作し、大規模ワールドとストリーミングを可能にします。Lumen は、サーフェス キャッシュを維持するために高速なシーン キャプチャを行なうため Nanite の詳細レベル (LOD) とマルチビュー ラスタライズを利用し、ヒッチの発生を防ぐためすべての動作を制限しています。Lumen の動作には Nanite は必要ありませんが、Nanite を有効にしていない高ポリゴンメッシュの多いシーンでは Lumen のシーン キャプチャが非常に遅くなります。アセットに適切な LOD が設定されていないシーンでは特にそうなります。

高速でカメラを動かすと、Lumen シーンの更新がカメラの向いている所よりも遅れてしまい、追いついた時に間接ライティングが突然表示されます。

Lumen サーフェス キャッシュはカメラの位置から 200 メートルをカバーします。これを越すと、グローバル イルミネーションでは画面トレースのみが有効になります。

Lumen にはサーフェス キャッシュを超えたトレースを行なう実験段階の 距離シーン 表現があります。これは、Unreal Engine 5 技術デモ『Lumen in the Land of Nanite』で渓谷の間接ライティングを実現するために使用されています。カメラから 200 メートルから 1 キロの範囲をカバーします (下の画像を参照)。Nanite を使用して太陽からの低解像度の反射シャドウ マップをレンダリングすると動作し、太陽の間接ライティングの 1 回のバウンスを取得するために、Final Gather の間、この Heightfield に対してトレースします。この距離シーン表現は有望ですが、プロジェクトに出荷できるようになるにはかなりの開発が必要です。

ue5techdemolargeworldscene.png

Unreal Engine 5 技術デモ「Lumen in the Land of Nanite」は、大規模ワールドのグローバル イルミネーションと反射を実演します。

Lumen のその他の制限

  • Lumen のグローバル イルミネーションは、ライトマップで静的ライトと共に使用することはできません。Lumen の反射は、将来的にライトマップでグローバル イルミネーションと共に動作するよう拡張する必要があり、これによりレンダリング品質をさらに向上できます。

  • フォリッジは、ダウンサンプル レンダリングと一時的フィルタに大きく依存しているため、この早期アクセス ビルドでは対応していません。

  • Lumen の Final Gather は、動いているオブジェクトの周りでかなりのノイズが付加されることがあり、依然として開発中です。

  • 透明なマテリアルは Lumen の反射では対応していません。

  • 透明なマテリアルは、高品質なダイナミック動的グローバル イルミネーションにはなりません。

パフォーマンス

Epic スケーラビリティ レベルの Lumen のデフォルトは、次世代コンソールで 1080p の 30 fps バジェット (8ms グローバルイルミネーションと反射) に設定されています。Lumen は、4k 出力用の新しい UE5 の Temporal Super Resolution アルゴリズムを備えた Unreal Engine 4 の Temporal Upsampling に大きく依存しています。High エンジン スケーラビリティ レベルでは、Lumen は 60fps をターゲットとするデフォルトを使用します。Lumen は Low および Medium スケーラビリティ レベルで無効になります。

ルーメン反射を提供するには余分な光線をトレースする必要があるため、粗さが 0.4 未満のマテリアルは、ルーメンが照明を解決するために最もコストがかかります。

Lumen が対応しているプラットフォーム

  • Lumen は PlayStation 4 や Xbox One などの現世代のコンソールに対応していません。

  • ソフトウェア レイ トレーシング:

    • Shader Model 5 に対応した DirectX 11 を搭載したビデオ カード。

    現時点では、早期アクセスのパフォーマンスには、NVIDIA GeForce GTX-1070 かそれ以上のカードが必要です。Lumen にはスケール ダウンのオプションが多くありますが、使用するにはさらなる開発が必要です。

  • ハードウェア レイ トレーシング:

    • DirectX 12 対応を搭載した Windows 10

    • ビデオ カードは、NVIDIA の RTX-2000 シリーズかそれ以上、または AMD RX-6000 シリーズかそれ以上でなければいけません。

  • Lumen はモバイル プラットフォームに対応しておらず、モバイル レンダラ向けの動的グローバル イルミネーションを開発する予定はありません。動的ライティングを使用したゲームは、モバイルでは影の無いスカイ ライトを使用する必要があります。

Lumen ビジュアリゼーション オプション

Lumen には、Unreal Editor でデータを視覚化する方法がいくつかあり、Lumen がどのようにシーンをライティングしているかを検査し、トラブルシューティングするのに役立ちます。

第 1 のビジュアリゼーション オプションは、[Show (表示)] > [Visualize (視覚化)] メニューにある、レベル ビューポートにあります。

画像をクリックしてフルサイズ表示。

プロパティ

説明

ビューポート ビジュアリゼーション モード

Lumen シーン

Lumen のサーフェス キャッシュでシーンを視覚化します。

Lumen のグローバル イルミネーション

Lumen のグローバル イルミネーションと反射のみでシーンを視覚化します。

ソフトウェア/ハードウェア レイ トレーシング

メッシュ距離フィールド

シーンを作る個々のメッシュの符号付距離フィールド表現を視覚化します。

グローバル距離フィールド

レンダリングされたシーン ビューに基づいて統合された個々のメッシュ距離フィールドをより大きく、詳細度の低い距離フィールド表現として視覚化します。

Lumen で使用されるその他のデータを視覚化するためのコンソール コマンドもいくつかあります。

  • Lumen の**カード配置**はキャプチャ位置 (カードと呼ばれる) がシーンの中でどのように使用されているかを調べます。カードは各メッシュにオフラインで生成され、複数の角度から各メッシュのマテリアル プロパティをキャプチャするために使用します。有効にするには、 r.Lumen.Visualize.CardPlacement 1 を使用します。

  • ハードウェア レイ トレーシングは、スタティック メッシュ アセットのプロキシ三角比率プロパティから生成される Nanite プロキシ メッシュ を使用します。プロキシ メッシュは、画面トレースと Lumen の反射の Nanite のレイ トレースされたシーンの間の不一致をカバーするために使用します。Nanite レンダリングを無効にし、Lumen が使用するプロキシ メッシュを確認するには`r.Nanite 0` tを使用してください。

トラブルシューティング トピックス

シーンの Lumen に関連した問題を解決するには、ビューポートの [Show (表示)] > [Visualize (視覚化)] メニューにある Lumen シーン ビジュアリゼーションから始めることをお勧めします。

この表示は、間接ライティングへ大きな影響を与える方法でメイン シーン ビューと一致する必要があります。例えば、 Lumen シーンでは、建物の金属のドアやバスの色がシーンにはっきりと反射する可能性が高くなります。

TestScene_LumenEnabled.png

TestScene_LumenSceneCardsRepresentation.png

問題の原因となるメッシュ

間接ライティングに寄与している問題の原因となるメッシュがある場合、レベル インスタンスの 詳細 パネルを用いて削除できます。

ソフトウェア レイ トレーシングでは、[Affect Distance Field Lighting (距離フィールドライティングに影響する)] のチェックボックスをオフにすると削除できます。

ハードウェア レイ トレーシングでは、[Affect Dynamic Indirect Lighting (動的な間接ライティングに影響する)] のチェックボックスをオフにすると削除できます。

シャドウ マップとレイトレースによるシャドウ間の不一致

Lumen は Lumen シーンをシャドウイングするためのレンダラのシャドウマップを再利用します。ただし、これは画面上の位置でのみ利用可能です。Lumen は、オフスクリーンのサーフェスにはシャドウイングのレイ トレーシングを使用します。この 2 つの手法に顕著な不一致がある場合、 スクリーン スペース グローバル イルミネーションなどのスクリーン スペース技術と同様に、Lumen のグローバル イルミネーションは表示への依存が高くなります。

多くの場合、この問題は不一致が生じる原因を特定すると解決できます。Lumen シーン のビジュアリゼーション モードを見ながら、コンソールで r.Lumen.DirectLighting.ForceOffscreenShadowing 1 を入力しレイ トレースによるシャドウを確認します。