【Unity】 Shadow Caster 2D について
- 動作検証環境
- Shadow Caster 2D について
- Use Renderer Silhouette
- Castes Shadows
- Self Shadows
- Target Sorting Layers
- Target Sorting Layers の活用例
- 表現例
動作検証環境
- Unity 2021.3.12f1
- Universal RP 12.1.7
Shadow Caster 2D について
Shadow Caster 2D は URP で2D向けのライトを使った時に影を付けたい時に使うコンポーネントです。
Shadow Caster 2D の Inspector の項目について解説します。
前提として影を出す為には以下の準備が必要です。
特に 2. は忘れがちなので注意して下さい。
Use Renderer Silhouette
有効な時、スプライトのシルエットを元に影が表現されます。
この説明だけだと分かりづらいと思うので、チェックした時にどの様に違いが出るかを説明します。
Casts Shadows にチェックをした時に使える Edit Shape を使って、
Shape の設定をこの様にした時の挙動を説明します。なお、編集作業をした後に Casts Shadows のチェックは外しています(外した後も Shape の形状情報は継続して保持されています)。
■ Self Shadows がチェックされている時
Use Renderer Silhouette にチェックがされていないので Shape で指定した範囲のみ影が描画され、一部の Shape からはみ出ている部分が影の対象外となっている為に明るくなっているのが確認できます。 Shape の中に含まれているキャラクターの頭部も影の対象となっている事が確認できます。
■ Self Shadows と Use Renderer Silhouette がチェックされている時
Use Renderer Silhouette にもチェックをすると Shape は使われず、スプライトのレンダリング部分に影が落ちる形となります。全体に綺麗に影が付いているのが確認できます。また、頭部はスプライトの透過部分である為、影の処理の対象外となっています。
まとめると Use Renderer Silhouette は Self Shadows にチェックがされている時のみに効果が有るパラメータです。その為、頭の中ではこの様な UI になっていると思っていると分かりやすいです。
Castes Shadows
有効な時、 Shape の形状による光の遮蔽により作られる影が描画されます。
Use Renderer Silhouette にチェックが付いていた場合でも Shape の形状により影が描画されます。
Self Shadows
有効な時、スプライトへの影を描画します。有効な時のレンダリング結果は Use Renderer Silhouette で紹介済みなのでそちらを参照下さい。
Target Sorting Layers
スプライトが存在するレイヤーを指定します。ここで選択したレイヤーが Light 2D の Target Sorting Layers で指定選択されているレイヤーに含まれている場合にはスプライトは影響を与える対象として扱われます。
Target Sorting Layers の活用例
ここで例としてプレイヤーのキャラクターの影だけを背景に落としたいというシーンを作る方法を解説します。
まず、準備としてこの様にレイヤーを準備します。
スプライトを準備し、以下の様にレイヤーを設定します。
- 背景のスプライト → Background レイヤー
- プレイヤーのスプライト → Player レイヤー
- 敵のスプライト → Enemy レイヤー
シーンにライト( Light 2D )を追加し、 Light Type で Global 以外(※)を選択します。 Target Sorting Layers で Background と Player をチェックします。
※ Light Type が Global の場合にはここの設定は考慮されず、常にすべてのレイヤーに対して影響を与えます。
プレイヤーのスプライトには Shadow Caster 2D を追加し、 Target Sorting Layers で Background と Player をチェックします。
するとこの様に背景に影が落ちる描画となります。
ここで「Shadow Caster 2D の Target Sorting Layers の設定は Player にだけチェックをするので良いのでは?」とも思いますがその場合にはこの様なレンダリング結果になります。影が上手く出ない場合には背景のレイヤーにちゃんとチェックが入っているか確認して下さい。
表現例
画面の手前から奥にライトが照らされている表現
スプライトに手前からライトが当たっているのでスプライト自身には影を出させたくないので Self Shadows にはチェックをしていません。
画面の奥から手前にライトが照らされている表現
自分自身も影の中に入っている状態になるので Self Shadows にチェックを付けます。
なお、 Use Renderer Silhouette のチェックを外した場合にはこの様なレンダリング結果となります。一見、問題無いようにも見えますが今回のスプライトでは頭部が透過しています。その為、チェックをしている状態の方が正しいレンダリング結果となります。