シャドウカスケードは、透視エイリアシングと呼ばれる問題を解決するのに役立ちます。透視エイリアシングとは、ディレクショナルライト からのリアルタイムの影がカメラの近くにあるとき、ピクセル化されて表示される現象です。
シャドウカスケードはディレクショナルライトでのみ機能します。
ディレクショナルライトは一般に太陽光を模倣しており、1 つのライトはシーン全体を照らすことができます。つまり、そのシャドウマップはシーンの大部分を対象にします。このことが、透視エイリアシングという問題の原因となります。透視エイリアシングとは、カメラに近いシャドウマップのピクセルが、遠くにあるものよりも拡大されて粗く見える現象です。
透視エイリアシングが起こるのは、シャドウマップの各領域が、カメラの透視によって想定以上に拡大されてしまうためです。ライトによるシャドウマップは、カメラに映っている範囲だけを対象にすれば良く、その範囲はカメラの 視錐台 によって決まります。ディレクショナルライトが真上から当たるシンプルな状態を想像すると、錐台とシャドウマップの関係が分かりやすいでしょう。
この簡単な例では、錐台の遠い方の端が 20 ピクセルのシャドウマップで対応しています。一方、近い方の端は 4 ピクセルだけで対応しています。ただし、 画面上では両端が同じサイズで表示されます。その結果、カメラに近い影のエリアでは、マップの解像度が実質的にかなり低くなります。
ソフトシャドウを使用する場合や、シャドウマップに高い解像度を使用する場合は、透視エイリアシングは目立ちません。ただし、これらのソリューションでは、レンダリング中により多くのメモリと帯域幅を使用します。
シャドウカスケードを使用する場合、Unity はカメラからの距離に基づいて錐台領域を 2 つのゾーンに分割します。近端のゾーンは、サイズを小さくした別のシャドウマップを使用します (解像度は同じ)。シャドウマップサイズのこれらの段階的な削減は、カスケードシャドウマップ (別名 Parallel Split Shadow Map) と呼ばれます。
プロジェクトで Shadow Cascade を設定するとき、カスケードの数を 0、2、5 から選択できます。Unity は、カメラの錐台内のカスケードの位置を計算します。
カスケードを多く使えは使う程、透視エイリアシングが影に与える影響は小さくなりますが、カスケード数を多くするとレンダリングのオーバーヘッドが発生します。ただし、このオーバーヘッドは、すべての影に高解像度のマップを使用する場合よりは少なくなります。
ビルトインレンダリングパイプラインで、プロジェクトの Quality Settings でQuality Level (品質レベル) プロパティごとの Shadow Cascades を設定してください。
ユニバーサルレンダーパイプライン (URP) では、ユニバーサルレンダーパイプラインアセット でシャドウカスケードを設定します。
HD レンダーパイプライン (HDRP) では、各 ボリューム のシャドウカスケードを設定します。
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.