ディスタンス フィールド ソフト シャドウ

メッシュ ディスタンス フィールドを使ってスカイライトにダイナミック ソフトエリア シャドウイングを作成する方法の概要

可動ライト ソースからのシャドウイングは、それぞれの剛体メッシュに対して ディスタンス フィールド オブジェクトを使用して、動的な光源からの効率的なエリア シャドウイングを計算することで表現されます。 Unreal Engine では Distance Field Shadows (ディスタンス フィールド シャドウ) (DFS) と言います。シャドウイングを計算するために、シーンの Signed Distance Fields (SDF) (符号付きディスタンス フィールド) を使用して、シェーディングされるポイントから各ライトに向かってレイ (光線) がトレースされます。 遮蔽オブジェクトへの最短距離を使用して、レイトレースとほぼ同じ負荷のコーン トレースを近似します。球体をした光源からの高い品質のエリア シャドウイングを提供します。

シーンを設定する

この機能を使用するには、[Rendering (レンダリング)] セクションの [Project Settings (プロジェクト設定)][Generate Mesh Distance Fields (メッシュディスタンス フィールドの生成)] を有効にする必要があります。 詳細は、「Android のリファレンス」を参照してください。

ディスタンス フィールド シャドウイング を有効にするには、ライト をシーンにドラッグし [Mobility (可動性)] を [Movable (ムーバブル)] に設定し、Distance Field Shadows を有効にします。

![Enable Distance Field Shadowing](01-dfss-light-df-settings.png)

設定手順についての詳細は、「ディスタンス フィールド アンビエントオクルージョン 操作ガイド」を参照してください。

エリア シャドウイングの設定

それぞれのライト タイプはディスタンス フィールド シャドウを使ってソフトエリア シャドウを投影します。シャドウは、基点に近づくほど鮮明に、また遠くに延びるにつれてソフトになることで、現実世界の影をシミュレートします。

![通常のシャドウ マップ](02-dfss-default-shadow-map.png)(w:500)

![ディスタンス フィールド シャドウ](03-dfss-df-shadow-map.png)(w:500)

スカイライト設定の詳細およびその他のサンプルは、「メッシュ ディスタンス フィールド リファレンス」 を参照してください。

ポイントライトとスポットライトのソース半径

ポイントライトとスポットライトの場合は、Source Radius (ソース半径) を使用して、ポイントライトのシャドウの半暗部の大きさを決定します。エリアシャドウは、シャープな接点で計算され、遠ざかるとソフトになります。 ポイントライトおよびスポットライト上では、黄色い球体で表されます。

![Source Radius representation of the Point and Spot Light in the Viewport](04-dfss-light-df-settings.png)

エディタは光源の形状を黄色の線で描画します。

ライトのソース半径は、シーンと交差しないようにしてください。アーティファクトを生じてしまいます。

![ソース半径|0](05-dfss-source-radius-0.png)(w:900)

![ソース半径|50](06-dfss-source-radius-50.png)(w:900)

ディスタンス フィールド シャドウは、玄関、ベンチ、ピアノからキャストされたシャドウをソフトにするためにソース半径を使ってポイントライトから投影されます。

ポイントライトとスポットライトの設定の詳細は、「メッシュ ディスタンス フィールド リファレンス」を参照してください。

ディレクショナル ライトの光源のアングル

ディレクショナル ライトの場合、Light Source Angle を使用して、ディレクショナル ライトのシャドウの半暗部の大きさを決定します。 ディスタンス フィールド シャドウには自己交差の問題はほとんどありませんしたがって、従来のシャドウマッピングに蔓延していた遠方での漏れと過剰バイアスを回避します。

![ソースアングル: | 1 ](07-dfss-shadow-source-angle-1.png)(w:900)

![ライトソースアングル: | 3 ](08-dfss-source-angle-3.png)(w:900)

Light Source Angle をソフトなシャドウ用に調節したディレクショナル ライトからディスタンス フィールド シャドウを投影した場合

多くの場合、ディレクショナル ライトでは、動的シャドウイングを表現するために Cascaded Shadow Maps (カスケード シャドウ マップ) (CSM) が使用されています。このため、カスケード シャドウ マップ (シャドウイング用の LOD) では、 シーン内のメッシュをいくつかのカスケード シャドウ マップにレンダリングする必要があります。シャドウイング負荷は、シャドウの距離が伸びると急増します。 これはシャドウ マップにレンダリングされるメッシュと三角ポリゴン数が増えるためです。

ディスタンス フィールド シャドウは、可視ピクセルに対してのみシャドウイング処理を行うため、遠方では非常にうまく機能します。RPDF シャドウが設定されている ディスタンス フィールド シャドウの距離 まで投影するのに対して、 カスケード シャドウ マップはカメラに近い領域に影を投影します。

![カスケードシャドウマップのみ](09-dfss-cascaded-shadow-maps.png)(w:900)

![カスケードシャドウマップとディスタンス フィールド シャドウ](10-dfss-cascaded-and-df-shadows.png)(w:900)

ディスタンス フィールド シャドウを有効にすると、 カスケード シャドウ マップ ディスタンス に対して設定した値を超えるシャドウがディスタンス フィールドによって投影されるようになります。CSM と RTDF シャドウイングの両方を使って比較しましょう。 CSM シャドウを 1,000 CM (センチメートル) に設定すると、ディテールが多数追加されてカメラ付近のシャドウにはさまざまなディテールが追加されて鮮明になります。1,000 CM を超えると、RTDF によるシャドウイングが使用され、 1.2 KM (キロメートル) 先までシャドウ オブジェクトの投影が可能になります。これにより、負荷が大きすぎる場合に、カスケード シャドウ マップを使って木の影を遠方へ投影できるようになります。

ディレクショナルライトの設定の詳細は、「メッシュ ディスタンス フィールド リファレンス」を参照してください。

シーンの表現

作成する各レベルは、設置したアクタに対してこれらすべてのメッシュ ディスタンス フィールドで構成されています。メッシュ ディスタンス フィールドは、結果をボリューム テクスチャに格納するトライアングルのレイトレーシングを使用して「オフライン」で生成されます。そのため、メッシュ ディスタンス フィールドの生成は実行時に行うことができません。このメソッドでは、符号付きディスタンス フィールドの光線をすべての方向で計算し、最も近いサーフェスを探してその情報を格納します。

ビューポートで [Show (表示)] > [Visualize (視覚化)] > [(メッシュ ディスタンス フィールド)] を選択すると、シーンを表現するメッシュ ディスタンス フィールドを視覚化することができます。

視覚化を有効にするメニュー

メッシュ ディスタンス フィールドの視覚化

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

グレイより白いエリアが多く表示される時は、メッシュ サーフェスの交点を探すために必要な手順が多数あることを意味します。サーフェスに対するグレージング角の光線は、シンプルなメッシュの場合に比べると交差させるための手順が多く必要になります。

メッシュ ディスタンス フィールドの品質

ディスタンス フィールドの忠実度は、ディスタンス フィールド アンビエント オクルージョン よりもシャドウの精度に大きな影響を及ぼします。 メッシュ ディスタンス フィールドの解像度を高くするとスタティックメッシュから投影されるシャドウの質が上がります。品質のチェックには [Mesh Distance Field Visualization (メッシュ ディスタンス フィールドの可視化)] を使います。

以下の例は、異なるディスタンス フィールド解像度のディスタンス フィールド シャドウイングのあるシーンです。

![ディスタンスフィールド解像度: | 1 ](11-dfss-resolution-1a.png)(w:700)

![ディスタンスフィールド解像度: | 5 ](12-dfss-resolution-1b.png)(w:700)

以下の例は、異なるディスタンス フィールド解像度のメッシュ ディスタンス フィールド ビジュアライゼーションのあるシーンです。

![ディスタンスフィールド解像度: | 1 ](13-dfss-resolution-2a.png)(w:700)

![ディスタンスフィールド解像度: | 5 ](14-dfss-resolution-2b.png)(w:700)

メッシュ ディスタンス フィールドのシャドウは、深度に配慮したアップサンプリングによって 1/2 解像度で計算されます。Temporal Anti-Aliasing (TAA) は、1/2 解像度によるフリッカーを減らすうえで非常に効果的ですが、 シャドウのジャギーは表示されることがあります。

メッシュ ディスタンス フィールドの品質の詳細は、「メッシュ ディスタンス フィールド」を参照してください。

パフォーマンス

以下の GPU のタイミングは、フルゲーム シーンにおいて解像度 1920x1080、Radeon 7870 で行われます。

テスト

カスケード/キューブマップ シャドウ マップによる負荷 (ms)

ディスタンス フィールド シャドウによる負荷 (ms)

速度比 (%)

ディレクショナルライトが 10k ユニット、6 x カスケード シャドウ マップの場合

3.1

2.3

25%

ディレクショナルライトが 30k ユニット、6 x カスケード シャドウ マップの場合

4.9

2.8

43%

半径の大きいポイントライト 1 つ

1.8

1.3

30%

半径の小さいポイントライト 5 つ

3.2

1.8

45%

最適化

以下は、ディスタンス フィールド シャドウイングの最適化と検討、あるいは必要な場合に行う操作です。

  • ディレクショナル ライトは、ソースアングル が大きくなるほど負荷が高くなります。それぞれの投影ポイントに対して考慮すべきオブジェクトが増えるからです。

  • ディスタンス フィールド シャドウの距離 の値が大きくなれば、カリングの効率が低下します。

  • Two-Sided Distance Field Generation (Build Settings で有効にする) を使用しているメッシュからの投影すると負荷が高くなります。投影したシャドウが完全な不透明にはならないからです。

制限事項

ディスタンス フィールド シャドウイングがメッシュ ディスタンス フィールドの技術の一般的な制限と同じになりました。これらの制限の詳細については、 詳細は、「メッシュ ディスタンス フィールド」を参照してください。

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