強火で進め

このブログではプログラム関連の記事を中心に書いてます。

【Unity】 Shadow Caster 2D について

動作検証環境

  • Unity 2021.3.12f1
  • Universal RP 12.1.7

Shadow Caster 2D について

Shadow Caster 2D は URP で2D向けのライトを使った時に影を付けたい時に使うコンポーネントです。

Shadow Caster 2D の Inspector の項目について解説します。

前提として影を出す為には以下の準備が必要です。

  1. シーンにライト(Lighit 2D コンポーネントの付いた Game Object )を置く。
  2. Light 2D コンポーネントの Shadows の Strength にチェックを付ける。

特に 2. は忘れがちなので注意して下さい。

Use Renderer Silhouette

有効な時、スプライトのシルエットを元に影が表現されます。

この説明だけだと分かりづらいと思うので、チェックした時にどの様に違いが出るかを説明します。

Casts Shadows にチェックをした時に使える Edit Shape を使って、

Shape の設定をこの様にした時の挙動を説明します。なお、編集作業をした後に Casts Shadows のチェックは外しています(外した後も Shape の形状情報は継続して保持されています)。

Self Shadows がチェックされている時

Use Renderer Silhouette にチェックがされていないので Shape で指定した範囲のみ影が描画され、一部の Shape からはみ出ている部分が影の対象外となっている為に明るくなっているのが確認できます。 Shape の中に含まれているキャラクターの頭部も影の対象となっている事が確認できます。

Self ShadowsUse Renderer Silhouette がチェックされている時

Use Renderer Silhouette にもチェックをすると Shape は使われず、スプライトのレンダリング部分に影が落ちる形となります。全体に綺麗に影が付いているのが確認できます。また、頭部はスプライトの透過部分である為、影の処理の対象外となっています。

まとめると Use Renderer SilhouetteSelf Shadows にチェックがされている時のみに効果が有るパラメータです。その為、頭の中ではこの様な UI になっていると思っていると分かりやすいです。

Castes Shadows

有効な時、 Shape の形状による光の遮蔽により作られる影が描画されます。

Use Renderer Silhouette にチェックが付いていた場合でも Shape の形状により影が描画されます。

Self Shadows

有効な時、スプライトへの影を描画します。有効な時のレンダリング結果は Use Renderer Silhouette で紹介済みなのでそちらを参照下さい。

Target Sorting Layers

スプライトが存在するレイヤーを指定します。ここで選択したレイヤーが Light 2DTarget Sorting Layers で指定選択されているレイヤーに含まれている場合にはスプライトは影響を与える対象として扱われます。

Target Sorting Layers の活用例

ここで例としてプレイヤーのキャラクターの影だけを背景に落としたいというシーンを作る方法を解説します。

まず、準備としてこの様にレイヤーを準備します。

スプライトを準備し、以下の様にレイヤーを設定します。

  • 背景のスプライト → Background レイヤー
  • プレイヤーのスプライト → Player レイヤー
  • 敵のスプライト → Enemy レイヤー

シーンにライト( Light 2D )を追加し、 Light TypeGlobal 以外(※)を選択します。 Target Sorting LayersBackgroundPlayer をチェックします。

※ Light Type が Global の場合にはここの設定は考慮されず、常にすべてのレイヤーに対して影響を与えます。

プレイヤーのスプライトには Shadow Caster 2D を追加し、 Target Sorting LayersBackgroundPlayer をチェックします。

するとこの様に背景に影が落ちる描画となります。

ここで「Shadow Caster 2D の Target Sorting Layers の設定は Player にだけチェックをするので良いのでは?」とも思いますがその場合にはこの様なレンダリング結果になります。影が上手く出ない場合には背景のレイヤーにちゃんとチェックが入っているか確認して下さい。

表現例

画面の手前から奥にライトが照らされている表現

スプライトに手前からライトが当たっているのでスプライト自身には影を出させたくないので Self Shadows にはチェックをしていません。

画面の奥から手前にライトが照らされている表現

自分自身も影の中に入っている状態になるので Self Shadows にチェックを付けます。

なお、 Use Renderer Silhouette のチェックを外した場合にはこの様なレンダリング結果となります。一見、問題無いようにも見えますが今回のスプライトでは頭部が透過しています。その為、チェックをしている状態の方が正しいレンダリング結果となります。