シャドウカスケードは、透視エイリアシングと呼ばれる問題を解決するのに役立ちます。透視エイリアシングとは、ディレクショナルライト からのリアルタイムの影がカメラの近くにあるとき、ピクセル化されて表示される現象です。
シャドウカスケードはディレクショナルライトでのみ機能します。
ディレクショナルライトは一般に太陽光を模倣しており、1 つのライトはシーン全体を照らすことができます。つまり、そのシャドウマップはシーンの大部分を対象にします。このことが、透視エイリアシングという問題の原因となります。透視エイリアシングとは、カメラに近いシャドウマップのピクセルが、遠くにあるものよりも拡大されて粗く見える現象です。
透視エイリアシングが起こるのは、シャドウマップの各領域が、カメラの透視によって想定以上に拡大されてしまうためです。ライトによるシャドウマップは、カメラに映っている範囲だけを対象にすれば良く、その範囲はカメラの 視錐台 によって決まります。ディレクショナルライトが真上から当たるシンプルな状態を想像すると、錐台とシャドウマップの関係が分かりやすいでしょう。
この簡単な例では、錐台の遠い方の端が 20 ピクセルのシャドウマップで対応しています。一方、近い方の端は 4 ピクセルだけで対応しています。ただし、 画面上では両端が同じサイズで表示されます。その結果、カメラに近い影のエリアでは、マップの解像度が実質的にかなり低くなります。
ソフトシャドウを使用する場合や、シャドウマップに高い解像度を使用する場合は、透視エイリアシングは目立ちません。ただし、これらのソリューションでは、レンダリング中により多くのメモリと帯域幅を使用します。
シャドウカスケードを使用する場合、Unity はカメラからの距離に基づいて錐台領域を 2 つのゾーンに分割します。近端のゾーンは、サイズを小さくした別のシャドウマップを使用します (解像度は同じ)。シャドウマップサイズのこれらの段階的な削減は、カスケードシャドウマップ (別名 Parallel Split Shadow Map) と呼ばれます。
When you configure Shadow Cascades in your Project, you can choose to use 0, 2 or 4 cascades. Unity calculates the positioning of the cascades within the Camera’s frustum.
カスケードを多く使えは使う程、透視エイリアシングが影に与える影響は小さくなりますが、カスケード数を多くするとレンダリングのオーバーヘッドが発生します。ただし、このオーバーヘッドは、すべての影に高解像度のマップを使用する場合よりは少なくなります。
ビルトインレンダリングパイプラインで、プロジェクトの Quality Settings でQuality Level (品質レベル) プロパティごとの Shadow Cascades を設定してください。
ユニバーサルレンダーパイプライン (URP) では、ユニバーサルレンダーパイプラインアセット でシャドウカスケードを設定します。
HD レンダーパイプライン (HDRP) では、各 ボリューム のシャドウカスケードを設定します。