【UnityShader】Cascade Shadow Maps【1】 #112
Cascade Shadow Mapsとは
カメラに近い位置の影はジャギーが目立って表示されています。
これを解決する手法の1つがCascade Shadow Maps(CSMs)になります。
ジャギーが目立ってしまっている例
奥の立方体は影のジャギーが特に目立たないのに対して、
手前の球は影のジャギーが目立っています。
発生してしまう原因
このジャギーが発生してしまう原因は、シャドウマップの各領域がカメラの透視によって想定よりも拡大されているからになります。
以下の画像を見て頂けるとわかりやすいです。
視錐の遠い方の端は20ピクセルのシャドウマップに対し、
視錐の近い方の端は4ピクセルのシャドウマップになっています。
画面上では、どちらの端も同じサイズで表示されるので、近い方はシャドウマップの解像度が低くなってしまうのでジャギーが発生します。
考え方
CSMsの考え方は、以下の手順になります。
この手順を踏むことにより手前の影は詳細なものを、奥の影は広域にシャドウマッピングすることができます。
この時、シャドウマップの解像度はすべて同じで手前のものほどサイズが小さくなっています。
CSMsでのシャドウマップイメージ
ソースコード無しでの実装
オブジェクトの配置
Scene上に以下のオブジェクトを配置します。
- カメラ
- ライト
- カメラから近いオブジェクト(Sphere)
- カメラから遠いオブジェクト(Cube)
- Plane
ライトの設定
ジャギーを目立たせやすくするために、ShadowTypeをHardShadows
にします。
影をレンダリングするカメラの距離を伸ばす
Project Settingsを開き、Quality
を選びます。
Shadow Distanceの数値を250にします。
下のShadow CascadesをNo Cascades
にします。
設定後
GameViewに戻ると、手前のオブジェクトの影が荒くなっています。
Cascadeの追加
Project Settingsに戻り、Shadow CascadesをFour Cascades
にします。
Cascade後
GameViewに戻ると、手前のオブジェクトの影のジャギーが減っています。
解説
Shadow CascadesをFour Cascadesにしたことにより、
Cascadeを4つにしているので影がジャギーなく描画できています。
各設定の詳細
Shadow Distance
カメラからどのくらい離れたところまで影を計算するかの値になります。
Shadow Cascades
Cascadeを用意する数を決めます。
問題点
Unityの公式に以下のように記載されています。
モバイルプラットホームでは、シャドウカスケードをサポートしていない
ですので、モバイルの場合は自作する必要があります。
今回は以上となります。
ご視聴ありがとうございました。