ボリュメトリック ライトマップ

動的オブジェクトとビルドされていないシーン プレビューのグローバル イルミネーションに使用されるボリュメトリック ライティング サンプルです。

Choose your operating system:

Windows

macOS

Linux

ボリュメトリック ライトマップ (Volumetric Lightmap) は将来的に 間接ライティング キャッシュ とボリュメトリック ライティング サンプルに置き換わります。

[World Settings (ワールド設定)] > [Lightmass Settings] [Volume Lighting Method (ボリューム ライティングの方法)] [VLM Sparse Volume Lighting Samples] に設定することで、間接ライティング キャッシュを再び有効にすることができます。

Lightmass は静的オブジェクト上の間接ライティングに サーフェス ライトマップ を生成します。しかしながら、(キャラクターなどの) 動的オブジェクトは間接ライティングの情報が必要です。そこで、すべてのポイントで事前計算されたライティングを ボリュメトリック ライトマップ と呼ばれる空間に格納することで、実行時に動的オブジェクトの間接ライティングを計算することができます。

Sparse Volume Lighting Samples | (古いメソッド)

Volumetric Lightmaps | (新しいメソッド)

Sparse Volume Lighting Samples は漏れる光の量とライティング精度を定義しました。ボリュメトリック ライトマップはこれに改善を行いました。

機能の説明

ボリュメトリック ライトマップ システムは以下のように機能します。

  • Lightmass はレベルのあらゆる場所にライティング サンプルを配置し、ライティングのビルド中にそれらの間接ライティングを計算します。

  • 動的オブジェクトをレンダリングすると、各ピクセルのシェーディング中に事前計算された間接ライティングが与えられてボリュメトリック ライトマップが補間されます。

  • ライティングが利用できない場合 (新規または移動が多すぎるオブジェクト) は、ライティングがリビルドされるまで 静的 オブジェクトのボリュメトリック ライトマップが各ピクセルに対してライティングを補間します。

Lightmass Importance Volume を置くと、ボリュメトリック ライトマップは 4x4x4 の塊 (ライティング サンプル) をビルドします。Lightmass を実行すると、これらのセルは Lightmass Importance Volume 全体の上に置かれます。間接ライティングをきれいにキャプチャしょうとするほど、シーンの静的ジオメトリの周りにあるセルを多く使います。

CubeVLM1.png

これらのポイント (または球) の 1 つ 1 つが ボリュメトリック ライトマップ ライティング サンプルで、全方向の入射光を格納するために 3次球面調和を使用します。

VolumeLightmap.png

オブジェクトの近くでは、ある 1 つの塊の中のすべての静的なジオメトリは、間接ライティングの変化が最も大きくなる場所でより多くのセルを使用します。こうしたデータ構造により、GPU 上の空間のすべてのポイントで間接ライティングの補間が可能になります。

VLMDensity.png

(画像の左) 単一のスタティックメッシュをもつ Lightmass Importance Volume をボリューム内に置きます。(中央) 静的ジオメトリの周りのセルは密度が高くなります。(右) サンプルの塊の片側に 4x4x4 のセルで表現されてます。静的ジオメトリがライティング ビルド中に存在する場合は、高密度のセルで表現したこのサンプルと同じになります。

ボリュメトリック ライトマップの可視化を有効にする

Volumetric Lightmap のビュー モードを使って、 [Show] > [Visualize] > [Volumetric Lightmap] をクリックしてレベル ビューポート内でライティング サンプルを使用します。

Volumetric Lightmap ビューモード

ボリュメトリック ライトマップ ライティング サンプルを視覚化

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

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

ライティングのビルド後にボリュメトリック ライトマップを視覚化すると、 影響を受けている Lightmass Importance Volume 内のセルに基づいて静的ジオメトリの周囲に集まっているライティング サンプルの密度を確認することができます。静的ジオメトリから離れているライティング サンプルは近くにジオメトリがないため、密度は低くなります。

Sparse Volume Lighting Samples | (古いメソッド)

Volumetric Lightmanps | (新しいメソッド)

Indirect Lighting Cache は静的ジオメトリのサーフェス上にライティング サンプルのみを配置します。ボリュメトリック ライトマップは 間接ライティングの変化が一番大きくなるには、その詳細のために静的ジオメトリの周囲に高密度にサンプルを配置します。

ビルドされていないライティングのプレビュー方法

ボリュメトリック ライトマップは、ビルドされていないライティングを使用したオブジェクトのプレビューを可能にします。ライティングがビルドされているスタティックメッシュを移動すると、 それは次のライティング ビルドまで自動的にボリュメトリック ライトマップに切り替わります。

Indirect Lighting Cache | (古いメソッド)

Volumetric Lightmap | (新しいメソッド)

中央の柱はコピーです。ライティング ビルドが再ビルドされるまで、ボリュメトリック ライトマップで照らされている状態です。

ムーバブル オブジェクトの事前計算ライティング

ライティング サンプル間の補間をコンポーネント全体で 1 度だけしか行わない 間接ライティング キャッシュ とは異なり、ボリュメトリック ライトマップはピクセルごとに補間を行うため、より詳細になります。信頼性のあるディティールを提供するため、ライト漏れが少なくなります。

Indirect Lighting Cache  | (古いメソッド)

Volumetric Lightmap  | (古いメソッド)

ボリュメトリック ライトマップの詳細が追加されたことにより、キャラクターは背景に自然に馴染みます。

Indirect Lighting Cache | (古いメソッド)

Volumetric Lightmap | (新しいメソッド)

静的ジオメトリに埋め込まれているムーバブル オブジェクトは、間接ライティング キャッシュよりも静的オブジェクト ライティングの方が適しています。

ボリュメトリック フォグの事前計算ライティング

ボリュメトリック ライトマップは、空間位置でフォグ ボクセルごとに事前計算ライティングを補間することで、ボリュメトリック フォグのフォグの Static light (静的ライト) への適用をサポートしています。

Spot Light with | No Indirect Light Bounce

Spot Light with | Indirect Light Bounce

Stationary Light (固定ライト) は間接ライティングをライトマップに格納してフォグを照らします。

Sky Light with Emissive Color

Sky Light Volumetric Lightmap

スカイライトは適切になシャドウ処理により、室内領域でのフォグのかかりすぎを防止します。

Indirect Lighting Cache: | Static and Emissive for Static Lighting | (古いメソッド)

Volumetric Lightmap: | Static and Emissive for Static Lighting | (古いメソッド)

Static light (静的ライト) のスタティックおよびエミッシブは、ボリュメトリック ライトマップにすべてベイクされているため、負荷をかけずにフォグを照らすことができます。

設定

ボリュメトリック ライトマップの設定は、 [Lightmass Settings] の中の [World Settings] にあります。

VLMSettings.png

設定

説明

Volumetric Lighting Method

事前計算ライティングを Lightmass Importance Volume の全方向に使用する技法です。

VLM Volumetric Lightmap

ライティング サンプルは Lightmass Importance Volume 全体を囲む詳細グリッドで計算されます。ジオメトリ周辺では高密度なグリッドが使用されます。ボリュメトリック ライトマップは GPU 上でピクセルごとに効率的に補間されるため、動的オブジェクトおよび体積ベースのフォグへの正確な間接ライティングが可能になります。Importance Volume の外側では、ボリュメトリック ライトマップの境界テクセルを再利用します (アドレス処理をクランプ) 。モバイルの場合、CPU 上で各オブジェクトの範囲の真ん中で行われます。

VLM Sparse Volume Lighting Samples

ボリューム ライティング サンプルは静的なサーフェス上に中程度の密度で置かれ、Lightmass Importance Volume 内のその他の場所では低密度で置かれます。Importance Volume 外の位置では間接ライティングはありません。このメソッドは CPU 補間が必要なので、間接ライティング キャッシュを使い、レンダリング スレッド オーバーヘッドを加えて、動的オブジェクトごとに結果を補間します。ボリュメトリック フォグのフォグはこのメソッドによる事前計算されたライティングで照らすことはできません。

Volumetric Lightmap Detail Cell Size

最高密度 (ジオメトリ周辺で使用) でのボリュメトリック ライトマップのボクセル サイズ (ワールド単位) です。この設定は、ビルド回数とメモリに大きく影響するので、慎重に使用してください。

Volumetric Lightmap Maximum Brick Memory Mb

Volumetric Lightmap Brick データに使用する最大メモリ量です。高濃度の塊は、上記の制限値が満たされるようになるまで破棄されます。その際、ジオメトリから最も遠くにある塊が先に破棄されます。メモリを極端に減らしてしまうと解像度の一貫性が失われます。 Volumetric Lightmap Detail Cell Size を増やす手段をお勧めします。

パフォーマンス

ボリュメトリック ライトマップによるパフォーマンスおよびメモリ使用に関して、次の点に留意してください。

  • サードパーソン キャラクター上でボリュメトリック ライトマップを使用すると、PlayStation 4 では GPU 処理が 0.2ms かかります。すべての間接ライティング キャッシュ レンダリング スレッド負荷は除去されました。

  • Epic の Paragon マップの Monolith において、メモリ使用量は、間接ライティング キャッシュの使用による 5Mb からデフォルトの [Detail Cell Size] 設定のボリュメトリック ライトマップの使用による 30 Mb に増えました。メモリ使用量は エディタの Stat MapBuildData コマンドの Volumetric Lightmap Memory に表示されます。

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

ボリュメトリック ライトマップと間接ライティング キャッシュ

ボリュメトリック ライトマップと間接ライティング キャッシュを比較すると次のようになります。

事前計算されたライト ボリューム/間接ライティング キャッシュ

ボリュメトリック ライトマップ

GPU での負荷の高い補間

CPU での効率的な補間

インスタンス化されたコンポーネント上でのオブジェクト毎の補間

ピクセル毎の補間

ボリュメトリック フォグに影響を及ぼすことができない

ボリュメトリック フォグに適用

静的なサーフェス上に高密度のサンプルのみを配置すると、低密度のサンプルから漏れが発生してしまう

静的なサーフェスの周囲にびっちりと高密度のサンプルを置く

Lightmass Importance Volume 外の黒いサンプル

境界ボクセルを伸縮して Lightmass Importance Volume 外の領域を覆う

Supports Level Streaming

レベル ストリーミングはサポートされますが、すべてのレベル (ストリーミングしているものも含め) 同時にビルドされる必要があります。詳細は次セクション「追記」を参照してください。

レベル ストリーミングはサポートされますが、すべてのレベル (ストリーミングしているものも含め) 同時にビルドされる必要があります。詳細は次セクション「追記」を参照してください。

追記

  • 精度をあげるために大きなレベル内で Volumetric Lightmap Detail Cell Size を小さくする場合は Volumetric Lightmap Maximum Brick Memory Mb も高くする必要があります。そうしないと、詳細のセルがカリングされ、動的オブジェクト間接ライティングの精度が落ちます。

  • レベル ストリーミングはすべてのレベル (Persistent とサブレベル) は同時にビルドされなければなりません。そうでないとレベルが正しく登録されません。ストリーミング レベルは主にメモリ最適化です。ほとんどの細かい塊のボリュームはボックス (ディメンション サイズが異なる) ではなくキューブ (ディメンション サイズが均等) である大きなボリュームへ統合されます。最も細かい塊は、最も近いサブレベルでストリーミングされ、大まかなレベルの塊は常に永続性です。実際のジオメトリを含むレベルでは、データの大部分は最も詳細なレベルの塊へ統合されます。レベルがジオメトリで埋められる場合、空 (または無駄な) 領域として現れるボリュームに対してはほとんど心配はありません。現在のシステムは単一のボリューム テクスチャを使用します。つまり、オーバーラップとブレンディングのある複数のボリューム テクスチャをサポートしていないので、空の領域にはほとんど何もできないということです。

  • シーンの領域内でサンプルの密度にローカル制御を与えるために Volumetric Lightmap Density Volumes を使用します。これらのボリュームは凸型形状のみをサポートします。レベル エディタの [Place Actors] パネルからシーンに 1 つ追加します。

トラブルシューティング

  • サンプル数が増えると [Detail Cell Size] は小さくまりますが、サンプル密度は静的ジオメトリの近くでは要求よりも低くなります。

    • [Maximum Brick Memory] が低すぎたり、その領域のすべてのライティングがほぼ等しい場合、詳細の brick はカリングされることがあります。

  • 近くにスタティックメッシュはありませんが、キャラクター上に壁からのライト漏れがあります。

    • ライト漏れに対する唯一のソリューションは現段階では [Detail Cell Size] を低くする (さらに多くのメモリの使用が可能にする)、または壁の厚みを増やすことです。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
閉じる