Unity の Standard Assets の投影シャドウ(Shadow Blob Projector)の仕様
この記事について
- 今更感もありますが, Unity の Standard Assets 内の投影シャドウ (Shadow Blob Projector), 別名:丸影 に関する記事です.
- やや技術的な内容になりますので, 対象はプログラマか 技術に興味があるデザイナーさんになります.
説明
- Unity の Standard Assets に投影シャドウ (Shadow Blob Projector)というのがあります.
- これについてリアルタイムのデプスシャドウよりも軽そうという理由で使おうとしている場合には, この投影シャドウの仕様について知っておいた方が良いです.
- 投影シャドウについては「投影シャドウの投射範囲内において, 投影シャドウを受ける側のメッシュ(Unity 用語でのレンダラー)が半透明パスで再び描画される」というのが仕様です.
- そうすることで, 画面中のピクセルで投影シャドウを受けるメッシュの部分を後から黒く塗っている感じになります.
- また投影シャドウではデプスシャドウと違ってライトから見たデプスを作っているわけではなく, プロジェクタとそれを受けるメッシュの 1 対 1 の関係しか見ないので下図のように貫通します.
- あと一応補足しておくと, Unity の投影シャドウについては別に Unity 側の実装が悪いとかそういうことではなくて, 投影シャドウの技術の仕様上そうなっています.
実験
- では,「投影シャドウの投射範囲内において, 投影シャドウを受ける側のメッシュ(Unity 用語でのレンダラー)が半透明パスで再び描画される」件について以下で実験していきます.
シーン構成
- ※ 今回のテストシーンは実験用にシンプルにしているので, 非常に見た目がみすぼらしいですがご了承下さいw
- まず下図はテストシーンで, 以下のように構成になっています.
- 地形 :「緑色の平面」と「それに埋まっている灰色の直方体」
- キャラ0 : 赤のカプセル, それの投影シャドウは「緑色の平面」と「それに埋まっている灰色の直方体」に落ちています.
- キャラ1 : 黄色のカプセル, それの投影シャドウは「緑色の平面」にだけ落ちています.
まとめ
- 上の実験を通じて, 投影シャドウについては「投影シャドウの投射範囲内にある, 投影シャドウを受けるメッシュ(Unity 用語でのレンダラー)が半透明パスで再び描画される」というのが確認できました.
- (こういうことはあんまりないかもしれませんが) 処理が軽そうという理由でシーン中で投影シャドウを多用するのはちょっと気をつけた方がいいかもしれません.
参考情報
- 3Dグラフィックス・マニアックス 「投射テクスチャマッピング」
- Unity ドキュメント : プロジェクター
- 投影シャドウのソースコードの場所
- Assets\Standard Assets\Effects\Projectors\Shaders\ProjectorMultiply.shader