0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ビッグワールドツリーシャドウスキームコレクション

Last updated at Posted at 2022-03-04

一、要求

UnityエンジンによるTerrainの木の影の処理はちょっと粗末なので、プロジェクトの要件を満たさないことがよくあります。動的オブジェクトがLight Probeをサンプリングする場合、デフォルトでは、木に対してLightmapをベイクしません。しかし、このような大きな動的オブジェクトのlight probe proxy volume(サポートしない、サポートに変更するとスタックする)でさえ、間接光と大規模なオクルージョンが豊富にしただけ、セルフシャドウ効果を効果的に表現できません。リアルタイムの影の距離になると、画像ははるかに悪くなります。そして、手元にある「生と死の狙撃兵2」は、4億の研究開発を投資した大規模なプロジェクトです。グラフィックスレンダリング技術の担当者として、私は当然、多くの技術的解決策を試して比較する必要があります。

具体的には、50メートル以内でShadowmapを使用することです。50〜1500メートル以内に平行光の影が必要であり、平行光は静的です。

このニーズを満たす7つのスキーマを次に示します。

1、インスタンスで再利用可能な無方向間接光の影をベイクする
2、ベーキングインスタンスの再利用+回転可能な指向性ライトシャドウ
3、低精度の事前計算された静的シャドウマップシャドウ
4、スパースオクトツリーボクセル化静的シャドウ
5、画面スペースの接触リアルタイムシャドウ
6、低精度の高さマップに基づくリアルタイムのシャドウ
7、距離フィールド加速光線マーチングシャドウ

スキーマ1:インスタンスで再利用可能な無方向間接光の影をベイクする

これは一番簡単な方法で、3DsMaxで空の光を使用してAOに似た影をベイクます。これにより、木は任意の角度の回転や任意の角度の太陽光に交換性があり、アセットの再利用率も高くなります。しかし、平行光の影は、少しアンリアルで適合性にも乏しい。このようなベイク図を取得してから、木の2セットのUVに作用します。コードも非常に簡単で、SpeedTreeCommon.cginc内にUV1パスを追加し、最後に*をAlbedoに追加するだけです。これは、AOが間接光に十分な効果がないためです。
1.png
2.png

Max-bakedによってベイクされたAO図を木のPrefabにバインディングして再利用する。Unityベイクは再利用できず、方向性もある。
3.png

リアルタイムシャド内
4.png

リアルタイムシャドウの外

5.png

このスキーマの効果
利点:シンプルで使いやすく、4行のコードで実現され、高性能で、低解像度の画像が1回サンプリングされます。

欠点:方向光は考慮されず、シャドウはそれ自体でのみ改善でき、木の下の動的オブジェクトを遮ることができません(静的ならShadowmaskをベイク処理できます)。

スキーマ2:インスタンスで再利用可能な+回転可能な平行光の影をベイクする

前のスキームより、方向も考慮に入れたのです。このような8つの並列ライトベイキングマップをベイク処理します。

6.png

木インスタンスのさまざまな方向に応じてさまざまなAOマップが設定されますが、木は地形に設定するのが不便であるため、配列またはアトラスに作成できます。Shaderでは、方向に応じてIndexまたはOffsetを取得します。効果が前の効果と似ていますが、方向性が優れています。各方向は比較的正規分布です。8方向では不十分だと思われる場合は、2方向の補間や16方向のマップを作成できます。
7.png

このスキームの効果
利点:シンプルで使いやすく、高性能で、低解像度のアトラスが1〜2回サンプリングされ、回転をサポートし、方向性シャドウがあります。

欠点:太陽の角度が異なるマップでは、別のテクスチャセットが必要になる場合があります。シャドウを改善できるのは自分だけで、木の下の動的オブジェクトを遮ることはできません(静的ならShadowmaskをベイク処理できます)。

スキーム3:精度の低い事前計算された静的Shadowmapシャドウ

まず、リアルタイムシャドウ内の効果を比較します。葉のセルフシャドウは悪くありませんが、2番目、リアルタイムシャドウ外になるとダメです。
8.png
9.png

4M静的Shadowmaskの効果:
10.png

原理:シーンに対し、深度マップを記録するShadowmap、ライトカメラを記録するmatrix_vpをオフラインで撮影します。ただ、このような大規模な撮影では深度精度が足りないので、16ビットではなく、RGBA32で深度を圧縮します。だから、縞模様に見えました。

利点:影があるだけでなく、遠くにいるキャラクターなどの動的なオブジェクトを遮るすることもできます。実装が簡単で、実行時にDraw Callsを節約でき、遠くのシーンを繰り返し撮影する必要がありません。

欠点:ビデオメモリが大きい。

アップグレードし続けるスキーム:仮想テクスチャに基づく静的ShadowmapまたはTexture streamingのShadowmap。

前のプロジェクト:https://github.com/jackie2009/ScrollingStaticShadowmap

スキーマ4:スパースオクトリーでボクセル化された静的シャドウを実現する

0.9Mで影をボクセル化する効果:

11.png

原理:0.5メートルごとに1つの立方体、0または1を記録して影にあるかどうかを示します、オクトリーのノードとします。次に、ツリー圧縮によってメモリを節約します。

利点:影があるだけでなく、遠くのキャラクターなどの動的オブジェクトを遮ることもできます。実行時にDraw Callを節約でき、遠くのシーンを繰り返し撮影する必要がありません。Shadowmapよりビデオメモリが節約られます。

欠点:実装はより複雑であり、事前計算の書き込みは、同時実行性が高い場合にのみ高速になります。Shaderは、結果を照会するために複数のサンプリングを必要とします。

プロジェクトファイル:https://github.com/jackie2009/ocTreeVoxelizedShadows/

スキーム5、6、および7:各デモ開発はより複雑であり、後で更新されるか、別の記事になります。


UWA Technologyは、モバイル/VRなど様々なゲーム開発者向け、パフォーマンス分析最適化ソリューション及びコンサルティングサービスを提供している会社でございます。

今なら、UWA GOTローカルツールが15日間に無償試用できます!!
よければ、ぜひ!

UWA公式サイト:https://jp.uwa4d.com
UWA GOT OnlineレポートDemo:https://jp.uwa4d.com/u/got/demo.html
UWA公式ブログ:https://blog.jp.uwa4d.com

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?