シャドウマップの解像度を計算するために、Unity は以下を行います。
ライトが照射するスクリーンビューの範囲を決定します。ディレクショナルライトは、スクリーン全体を照らすことができますが、スポットライトとポイントライトが照射できる領域は、ライトの広がりの形状 (ポイントライトは球形、スポットライトは円錐形) をスクリーン上に投影したものになります。投影された形状は、スクリーン上でピクセル単位の幅と高ささが決められます。この 2 つの値のうち大きい方が、ライトのピクセルサイズと呼ばれます。
以下の計算を実行し、結果を最大サイズに固定します。
| ライトタイプ | 計算式 | 最大解像度 (ピクセル) |
|---|---|---|
| Directional | NextPowerOfTwo (ピクセルサイズ * 影の品質乗数 * 3.8) | Shadow Resolution が Very High の場合、または GPU に 512MB 以上の RAM がある場合は4096 x 4096、それ以外の場合は 2048 x 2048。 |
| Spot Lights | NextPowerOfTwo (ピクセルサイズ * 影の品質乗数 * 2.0) | GPU に 512MB 以上の RAM がある場合は 2048 x 2048、それ以外の場合は 1024 x 1024。 |
| Point Lights | NextPowerOfTwo (ピクセルサイズ * 影の品質乗数 * 1.0) | GPU に 512MB 以上の RAM がある場合は 1024 x 1024、それ以外の場合は 512 x 512。 |
ビルトインレンダーパイプラインでは、Light.shadowCustomResolution プロパティを 0 より大きい値に設定することで、ライトのシャドウマップの解像度を設定できます。この値が 0 より大きい場合、Unity はすべてのライトタイプに対して以下の計算を行います。
NextPowerOfTwo (shadowCustomResolution)
次に、上の表が示すライトのタイプとハードウェアに基づいて、最大の解像度を固定します。