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

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

Windows
MacOS
Linux

ボリュメトリック ライトマップは 間接ライティング キャッシュ に変わるシステムです。やがてボリュメトリック ライティング サンプルに変わります。

[World Settings (ワールド設定)] > [Lightmass Settings][Volume Lighting Method][VLM Spare Volume Lighting Samples] に設定すれば、再度間接ライティング キャッシュを有効にすることができます。

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

Indirect Lighting Cache | (Old Method)

Volumetric Lightmap | (New Method)

ボリュメトリック ライトマップは、間接ライティング キャッシュよりも正確な動的オブジェクトのレンダリングが可能。

機能の説明

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

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

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

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

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

CubeVLM1.png

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

VolumeLightmap.png

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

VLMDensity.png

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

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

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

Volumetric Lightmap ビューモード

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

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

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

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

Volume Lighting Samples | (Old Method)

Volumetric Lightmap | (New Method)

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

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

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

Indirect Lighting Cache | (Old Method)

Volumetric Lightmap | (New Method)

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

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

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

Indirect Lighting Cache  | (Old Method)

Volumetric Lightmap  | (New Method)

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

Indirect Lighting Cache | (Old Method)

Volumetric Lightmap | (New Method)

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

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

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

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 | (Old Method)

Volumetric Lightmap: | Static and Emissive for Static Lighting | (New Method)

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

設定

ボリュメトリック ライトマップの設定は、[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 Memory コマンドの 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] を低くする (さらに多くのメモリの使用が可能にする)、または壁の厚みを増やすことです。

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback