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

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

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 Fields] を選択すると、シーンを表現するメッシュ ディスタンス フィールドを視覚化することができます。

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

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

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

グレイよりも白が多いエリアが表示された場合、メッシュ サーフェスの交差判定に多くのステップが必要となります。サーフェスに対するグレージング角の光線を交差させるには、シンプルなメッシュの作成よりも作業手順が多くなります。

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

ディスタンス フィールドの忠実度は、ディスタンス フィールド アンビエント オクルージョン よりもシャドウの精度に大きな影響を及ぼします。 メッシュ ディスタンス フィールドの解像度を高くするとスタティックメッシュから投影されるシャドウの質が上がります。品質のチェックには [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 (メッシュ ディスタンス フィールドを圧縮する)] を有効にすると、Distance Fields ボリューム テクスチャを圧縮してメモリに格納することができます。レベル ストリーミングを使用している場合は、レベルのストリーミング時にゲームプレイで処理落ちが発生します。

    • Eight Bit Mesh Distance Fields は、Distance Fields ボリュームを 16-bit 浮動小数点ではなく 8-bit 固定小数点形式で保存するかどうかを設定します。メモリは半分しか使用しませんが、大きいメッシュ、または薄いメッシュがあるとアーティファクトが発生します。

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

制限事項

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

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