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

InspectorProjectorManager1

  • 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

InspectorProjectorManager2

  • 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

InspectorProjectorManager3

  • Raycast Plane Mask
    レイキャストの対象となるレイヤーマスクを指定します。このレイヤーマスクはPhysics.Raycast関数を呼ぶために使われます。レイキャストはProjectorオブジェクトそれぞれに対して影を描画するための矩形ポリゴンを生成するのに使われます。もしこのレイヤーマスクに‘Nothing’を指定すれば、レイキャストは実行されません。
  • Use Infinite Plane
    無限平面を使うかどうかを指定します。無限平面よりもレイキャストの方が優先され、もしレイキャストが何かにヒットした場合は、その場所に矩形ポリゴンが生成され、無限平面上には何も生成されません。このオプションにチェックを入れると次の3つのパラメータを設定できるようになります。
  • Infinite Plane Transform
    無限平面を座標変換するためのTransformを指定します。何も指定しなければ、無限平面はワールド座標系で定義されることになります。
  • Infinite Plane Normal
    無限平面の法線ベクトルをローカル座標系で指定します。
  • Infinite Plane Height
    ローカル座標系の原点から無限平面までの距離を指定します(法線ベクトルの方向が正の負号付き距離)。

Plane Shadow Textures

InspectorProjectorManager4

  • 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で更新されます。

Links

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Anti Spam Code *