Unity2021.1からURPでポイントライトの影が落とせるようになったのでその方法と処理負荷の話です。
Unity2021.2.3f1
はじめに
UnityのURPでは、unity2020以前ではポイントライトから影を落とすことができませんでした。
Inspectorの項目には存在するものの、有効にすると以下のような警告が表示されます。
unity2021.1からはURPでポイントライトの影が落とせるようになりました。
本記事ではこの使い方についてまとめます。
なおURPの基礎知識については以下の記事にまとめていますので必要に応じて参照してください。
基本的な使い方
ポイントライトシャドウは以下の手順で使えます。
Universal Render Pipeline Asset
のLighting > Additional Lights
をPer Pixel
にチェックLighting > Additional Lights > Cast Shadows
にチェックを入れる- シーンにポイントライトを配置する
- ポイントライトのInspectorの
Shadows > Shadow Type
をHard ShadowsやSoft Shadowsに切り替える
シャドウマップのサイズ設定とメモリ
さてUniversal Render Pipeline Asset
を見ると、シャドウマップのサイズを設定できる項目があることがわかります。
URPではAdditional Lightによるシャドウを一つのシャドウマップに描き込みます。
1個目のShadow Atlas Resolution
はこのシャドウマップの大きさを表しています。
また、ポイントライトのシャドウは6枚分のテクスチャを使ったキューブマップを使用します。
この一枚あたりのサイズを指定するのが2個目のShadow Resolution Tiersのようです(マニュアルにちゃんと書いてなさげ)。
このうちどのTierを使うかはポイントライトのInspectorから選択できます。
上記ではLowを選択しているので128x128のテクスチャが6枚分使用されます。
なお使うべきテクスチャのサイズがShadow Atlas Resolutionを超えてしまった場合、
実際に使われるサイズがShadow Atlas Resolutionに収まるように調整されて以下のログが出力されます。
パフォーマンス
ポイントライトのシャドウはメモリに加えて処理負荷もそれなりに大きいので注意が必要です。
マニュアルを見ると、URPのテンプレートプロジェクトにハードシャドウのポイントライトを一つ追加した時の処理時間の比較が載っています。
Here are some example of frame times (observed with SRP package revision 78d514f756c and Unity 2020.2.0b):
- Galaxy S20+ : 1.9ms増加
- PC - Geforce RTX 2080 Ti (Full HD) : 0.1ms増加