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

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

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

シーンの設定

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

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

Enable Distance Field Shadowing

ステップごとの操作については「ディスタンス フィールド シャドウイングを使う」を参照してください。

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

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

通常のシャドウ マップ

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

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

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

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

Source Radius representation of the Point and Spot Light in the Viewport

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

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

Source Radius: | 0

Source Radius: | 50

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

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

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

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

Source Angle: | 1

Source Angle: | 3

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

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

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

カスケードシャドウマップのみ

カスケードシャドウマップとディスタンス フィールド シャドウ

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

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

シーンの表現

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

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

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

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

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

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

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

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

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

ディスタンス フィールド解像度: | 1

ディスタンス フィールド解像度: | 5

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

ディスタンス フィールド解像度: | 1

ディスタンス フィールド解像度: | 5

メッシュ ディスタンス フィールドのシャドウは深度を意識したアップサンプルを使って、半分の解像度で計算されます。TAA (テンポラル・アンチエイリアシング) は、半分の解像度で発生するちらつきを抑えるのに有効ですが、 ギザギザしたエッジが現れることがあります。

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

パフォーマンス

以下の 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 のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル