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

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

Choose your operating system:

Windows

macOS

Linux

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

シーンの設定

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

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

DirectionalLightDFSettings1.png

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

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

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

通常のシャドウ マップ

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

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

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

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

LightSourceVis.jpg

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

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

Source Radius: | 0

Source Radius: | 50

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

シャドウを投影する各メッシュからエリア シャドウを投影するシーンを移動するポイントライトの様子。

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

指向性ライトの光源のアングル

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

Light Source Angle: | 1

Light 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 (キロメートル) 先までシャドウ オブジェクトの投影が可能になります。これにより、負荷が大きすぎる場合に、カスケード シャドウ マップを使って木の影を遠方へ投影できるようになります。

指向性ライトのディスタンス フィールド シャドウイングによって表現した 1 日の変化

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

シーンの表現

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

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

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

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

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

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

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

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

Distance Field Resolution: | 1

Distance Field Resolution: | 5

Distance Field Resolution: | 1

Distance Field Resolution: | 5

ディスタンス フィールド シャドウイングのシーン ビュー

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

メッシュ ディスタンス フィールド用のシャドウは、深度に配慮したアップサンプリングによって 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 で有効にする) を使用しているメッシュからの投影すると負荷が高くなります。投影したシャドウが完全な不透明にはならないからです。

4.16 では、以下の最適化機能が有効になりました。

  • [Project Settings] > [Rendering] で有効にします。

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

    • [Compress Mesh Distance Fields (メッシュ ディスタンス フィールドの圧縮)] を有効にすると、圧縮されたディスタンス フィールド ボリューム テクスチャをメモリに格納できます。これによりメモリ使用量を削減することができますが、レベル ストリーミングを使用している場合は、これらのレベルがストリーミングされる際にゲームプレイで処理落ちが発生します。

    • [Eight Bit Mesh Distance Fields (8 ビットメッシュ ディスタンス フィールド)] を有効にすると、ディスタンス フィールド ボリューム テクスチャをデフォルトの 16 ビット浮動小数点ではなく 8 ビット固定小数点形式で格納することができます。この設定ではメモリを半分しか使用しませんが、大きなメッシュ、または薄いメッシュがあるとアーティファクトが発生します。

  • グローバル ディスタンス フィールドフィールドでは、[Mobility (可動性)] が [Static (静的)] または [Stationary (固定)] に設定されている場合に静的プリミティブをキャッシュします。グローバル ディスタンス フィールド全体は主に静的キャッシュから派生しているため、移動可能なプリミティブが修正されると、付近の他の移動可能なプリミティブのみがグローバル ディスタンス フィールドへの再合成を必要とします。

制限事項

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

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