未来を創る、テックコミュニティー

代表技術通信~Unreal Engineで点群表示③ まずはUE4のチュートリアル(10)

草場代表
2020/10/27

こんばんは。代表の草場です。

最近はほぼ、UE4のチュートリアルの紹介となっています。オンラインコースのライティングの基礎概念とエフェクトの続きです。

動的ライティング – 屋外

ダイナミックライティングのパート2。今回は屋外のライティング。
CSM カスケードシャドウマップ
ディスタンスフィールド
DFAO ディスタンスフィールドアンビエントオクルージョン

について説明します。

StartAssetsのDynamicLighting_Outdoorレベルを開きます(FundamentalClassesにはなかった)。Lighting_Rendering>EffectsAndReflections>Reflectionsで代用しました。

DynamicLighting_Outdoorレベルは、屋外なので、数本の木と遠方の環境があるようなものらしいです。屋外のダイナミックライティングは少し特殊です。遠方のシャドウを表示できる必要があるからです。
要件が特殊なので、屋外のライティングは、ライティングのパフォーマンスに影響します。ダイナミックシャドウは大きな負荷がかかる要素のためです。大規模な景色の場合、さらに極めて遠方のダイナミックシャドウも確認できることを意味します。これはとてもパフォーマンスに影響します。

この点を考慮すると、異なるアプローチでライティングに取り組む必要があります。

まずはシーンにディレクショナルを屋外に追加します。これで環境全体が照らされます。太陽をシミュレートしているためです。次にこの光をムーバブルに設定します。この場合、室内に注目すると光が全くバウンスしていないので、とても不自然に見えます。

屋外にのみ、まずは注目します。このシャドウはアニメーション化されています。あまりシャープではないです。
上から眺めてみる(どんどん視点を上に持ってくる)と、最終的にはシャドウがフェードアウトしていきます。今使われているマップは、CSM、カスケードシャドウマップです。これがデフォルト。ムーバブルに設定すると、デフォルトで、ディレクショナルライトの場合はこれが有効となります。シャドウをレンダリングする際のパフォーマンスを節約するために、Engineはカメラからの距離に基づいてシャドウを付けます。

最適化を可能にするために、非常に遠いジオメトリに、シャドウがキャストされることはありません。この距離を変更できます。実際、範囲が広いほど、シャドウの精度は低下し、狭いほど精度が向上します。ダイナミックシャドウの距離の値が低いとシャドウは迅速にフェードアウトしますが、よりシャープになります。
1000の場合と、20000の場合

CSMをつかって、どれくらい陣族にフェードアウトさせるかの間でバランスを見出す必要があります。
CSMは名前の通り、多数のシャドウを次から次へとかスケーティングします。そのため、シャドウから離れるとシャドウがぼやけます。高解像度、中程度解像度、低解像度の3種類があります。シャドウから離れている距離に応じて、低解像度のバージョンに切り替わります。これはパフォーマンスを節約するためです。異なるシャドウマップが次土にかスケーティングされます。今、カスケードの数は3です。

これを減らすと、シャドウは高品質から低品質に1回しか変更されません。
Dynamic Shadow Distance MovableLight
Num Dynamic Shadow Cascades
ダイナミックシャドウの距離20000で、カスケード数が10の場合と、カスケード数が2の場合

設定はいろいろいじれるが、初心者はいじらないことをお勧めします。
覚えておく必要がある一番重要な部分は、範囲、Dynamic Shadow Distance MovableLightです。この値が大きすぎると正確さが一切失われ、おそらくパフォーマンスの低下につながります。

遠くからでもシャドウが見えるようにしたい場合、ディスタンスフィールドおよびディスタンスシャドウを検討してください。これはデフォルトでは有効になっていないので、プロジェクトの設定で有効にする必要があります。
プロジェクト設定にいって、Distance Fieldと検索。

ライティングの「メッシュ距離の生成」にチェックを入れます。有効にすると すべてのモデルのメッシュディスタンスフィールドの表現が生成されます。表示>視覚化を選択すると、メッシュディスタンスフィールドが出てくるので、それをクリックすると、作成された実際のディスタンスフィールドが表示されます。

ディスタンスフィールドとはモデルの近似で、ボリュームメトリックテクスチャに格納されています。このフィールドにより、すべてのモデルのテクスチャが生成されテクスチャはボリュームメトリックテクスチャとして機能するため、その情報を使用してモデルを近似します。そのため、木を見てわかりますが、とても不正確です。特に木のようなメッシュではうまく機能しません。

ただし、シャドウでの使用はこれで十分です。シャドウは現在ディスタンスフィールド情報を使用しています。モデル、つまり通常のジオメトリ自体は使用しません。そのため、パフォーマンスが大幅に迅速化します。これは環境を最適化する方法です。これを確認します。ディレクショナルライトに戻り、Cascated Shadow MapのDynamic Shadow Distanceの値を下げると、これを示すことができます。2000くらいに。そしてディスタンスフィールドシャドウを有効にします。すでに表示されていた遠くの木々の景色に再びシャドウが表示されるようになりました。カスケードシャドウマップがフェードアウトすると、シャドウはディスタンスフィールドシャドウに切り替わります。距離が遠くなると、ディスタンスシャドウに切り替わり、シャドウがアニメーションではなくなる。なるほど。これがディスタンスシャドウフィールドです。近くでCSMを使用し、遠くでディスタンスフィールドシャドウを使用します。遠くの景色はよく見ると不正確ですが、近くで見ることはないのでこれでOKです。

最後に、DFAOつまり、ディスタンスフィールドアンビエントオクルージョンの説明をします。これはスカイライトによって作成されます。スカイライトをシーンにドラッグ。ディレクショナルライトは一時的に削除します。スカイライトをムーバブルに設定すると、DFAOを実際に確認できます。これはうまく機能しなかった。

ダイナミックライトがたくさんある大規模な屋外環境の場合はDFAOを試してからうまくいった設定を保持することをお勧めします。DFAOではディスタンスフィールドメッシュを使用してライトのバウンス、つまりライトのアンビエントオクルージョンを生成しようと試みます。ディスタンスフィールド自体は非常に不正確であるため、必ずしも最良の結果が絵らえるとは限りません。DFAOの設定を見てみると、Occulusion Maximum Distanceがあります。

このレベルを下げると、もう少しよく見えることがあります。これはプロジェクトによります。

ライティングの基礎コンセプト – まとめ

 

この記事を書いた人
草場代表
エディター