Projector Managerはシングルトンのコンポーネントで、シーンの中のProjectorオブジェクトを管理します。Projector Managerの管理によって、メインカメラに近いProjectorだけがアクティブとなり、カメラから遠かったりカメラの視野内に影を投影しないProjectorは非アクティブになります。この管理のために“Projector Controls”の項目を設定する必要があります。
非アクティブになったProjectorに対してはProjector Managerが代わりとなって矩形ポリゴンを生成して影を描画します。そのため、非アクティブなProjectorでもひとつの平面上に影を落とすことができます。この目的のために“Plane Shadows”と“Plane Shadow Textures”の項目を設定します。
アクティブなProjectorに対しては、Shadow Receiverを使うことができます。しかし、Projector Manager自体が矩形ポリゴンを生成して影を描画することができるので、InfinitePlaneShadowReceiverやRaycastShadowReceiverを使うことにあまり意味はありません。もし背景オブジェクトが平面では代用できず、MeshShadowReceiverを使う必要があるのであれば、“Shadow Receivers”の項目を設定してください。
Shadow Receivers
- Receiver Layer Mask
Projector ManagerはアクティブなProjectorひとつひとつに対して、下の’Receivers’プロパティに登録されたShadow Receiverのインスタンスを複製して割り当てます。この際、複製されたインスタンスのレイヤーに、ここで指定する’Receiver Layer Mask’の中のひとつのレイヤーが割り当てられます。これによって、複数のProjectorが同じShadow Receiverに影を投影してしまうのを防ぐことができます。もし’Receiver Layer Mask’が十分な数のレイヤーを持っていなければ、複数のProjectorがひとつのShadow Receiverに影を投影しようとする可能性が高くなります。通常これはあまり問題になりませんが、複数のProjectorの影を投影する領域が重なっていた場合、影の一部が複数回描画されることになって、いつもよりも濃い影ができる可能性があります。この問題を防ぐために、’Receiver Layer Mask’にはできるだけ多いレイヤーを設定しておくのが望ましいです。 - Receivers
アクティブなProjectorそれぞれに対して複製されるShadow Receiverのセットをここに設定します。通常、ここにはMeshShadowReceiverがひとつだけ指定されます。たとえシーンの背景オブジェクトが複数のオブジェクトから構成される場合でも、それらのオブジェクトをひとつのMesh Treeにまとめて、MeshShadowReceiverをひとつにした方がパフォーマンス上有利です。しかし、シーンがオープンフィールドを持つような場合、背景オブジェクトを動的にロードしたくなるでしょう。そのような場合は、MeshShadowReceiverオブジェクトを次のようなコードで動的に登録することができます:ProjectorManager.Instance.AddReceiver(shadowReceiver);
また、Shadow Receiverを取り除きたい場合は次のようにします:
ProjectorManager.Instance.RemoveReceiver(shadowReceiver);
もし‘Receivers’に登録されているShadow Receiverが何もなければ、‘Plane Shadows’の設定に従って作られる矩形ポリゴンによる影が非アクティブなProjectorと同様に描画されます。
Projector Controls
- Main Camera
シーンに含まれるメインカメラを指定します。もし何も指定されていなければ、Camera.mainが使われます。このカメラはProjectorをアクティブ/非アクティブにするのに使われ、このカメラに近く、カメラの視野に含まれているProjectorのみがアクティブになります。 - Environment Layers (from Version 1.4.0)
背景オブジェクトのレイヤーマスクを設定します。このレイヤーマスクはProjectorに背景オブジェクトを無視させるようにするために使われます。もしこのプロパティを適切に設定したならば、いちいちProjectorのIgnore Layersに環境オブジェクトのレイヤーを追加しておく必要がなくなり、エディタ上でもProjectorの影を確認できるようになります。 - Projector Fadeout Distance
Projectorがアクティブになれる範囲をメインカメラからの距離で指定します。 - Fade Duration
Projectorのアクティブ/非アクティブが切り替わるときに、影の描画が急に切り替わらないようにクロスフェードさせる期間をここに指定します。この設定を有効にするには、影を描画するマテリアルが“_Alpha”プロパティを持ち、このプロパティで影の濃さをコントロールできなければなりません。
Plane Shadows
- Raycast Plane Mask
レイキャストの対象となるレイヤーマスクを指定します。このレイヤーマスクはPhysics.Raycast関数を呼ぶために使われます。レイキャストはProjectorオブジェクトそれぞれに対して影を描画するための矩形ポリゴンを生成するのに使われます。もしこのレイヤーマスクに‘Nothing’を指定すれば、レイキャストは実行されません。 - Use Infinite Plane
無限平面を使うかどうかを指定します。無限平面よりもレイキャストの方が優先され、もしレイキャストが何かにヒットした場合は、その場所に矩形ポリゴンが生成され、無限平面上には何も生成されません。このオプションにチェックを入れると次の3つのパラメータを設定できるようになります。 - Infinite Plane Transform
無限平面を座標変換するためのTransformを指定します。何も指定しなければ、無限平面はワールド座標系で定義されることになります。 - Infinite Plane Normal
無限平面の法線ベクトルをローカル座標系で指定します。 - Infinite Plane Height
ローカル座標系の原点から無限平面までの距離を指定します(法線ベクトルの方向が正の負号付き距離)。
Plane Shadow Textures
- Blob Shadow Textures
シーンで使われる全てのBlob Shadowテクスチャをここに登録します。 - Packed Blob Shadow Texture
‘Blob Shadow Textures’に登録された全てのテクスチャをパックしたテクスチャをここに指定します。このテクスチャは“Pack Blob Shadow Textures”ボタンを押すことで生成することができます。 - Packed Shadow Texture Rects
パックされたBlob ShadowテクスチャのUVを持つRectの配列をここにセットします。このRectの配列は“Pack Blob Shadow Textures”ボタンでパックされたテクスチャと一緒に生成されます。 - Packed Texture Padding
テクスチャをパックする際のパディングをピクセル単位で指定します。 - Packed Texture Max Size
“Pack Blob Shadow Textures”ボタンを押して生成されるテクスチャの最大サイズを指定します。 - Shadow Tex Name
ProjectorやProjector Managerのマテリアルで使われるBlob Shadow用テクスチャの名前を指定します。デフォルトは“_ShadowTex”です。
Manual Update
‘Manual Update’を有効にするとProjector Managerは自動的に更新されなくなります。もし更新のタイミングを自分でコントロールしたい場合は、ここにチェックを入れ、適切なタイミングで
ProjectorManager.Instance.UpdateScene();
を実行してください。
もし’Manual Update’にチェックが入っていなければ、Projector ManagerはLateUpdateで更新されます。