共通の設定
- Manual Update
‘Manual Update’にチェックを入れると、Shadow Receiverは自動的にアップデートされなくなります。もし自分でアップデートのタイミングをコントロールしたい場合はここにチェックを入れてください。
このオプションはMeshShadowReceiverを使うときに便利です。というのも、MeshShadowReceiverはメッシュを更新するのにマルチスレッドを使います(マルチコアプロセッサの場合)。もし’Manual Update’にチェックが入っていなければ、マルチスレッドのタスクはLateUpdateの中で開始され、OnWillRenderObjectの中でその終了を待ちます。
しかし、Projectorの位置などが更新された直後にマルチスレッドのタスクを開始できるのであれば、OnWillRenderObjectの中での待ち時間を短縮できます。このような目的のために’Manual Update’にチェックを入れることは有効です。マルチスレッドのタスクを手動で開始するには、FastShadowReceiver.ReceiverBaseクラスのUpdateReceiver
関数を呼んでください。 - Projector
Projectorオブジェクト(UnityEngine.Projector)もしくはFastShadowReceiver.ProjectorBaseオブジェクトをここに指定します。このProjectorはShadow ReceiverとProjectorが投影する影の領域が交差する場所を計算するのに使われます。
もしShadow ReceiverがProjectorからの影を受け取るのであれば、そのProjectorオブジェクトをここに指定してください。もしシャドウマップを使うのであれば、LightProjectorをここに指定してください(シャドウマップと一緒に使う場合の手順 section)。
もし影を投影する領域を自分で計算したい場合は、FastShadowReceiver.CustomProjectorを使うこともできます。
InfinitePlaneShadowReceiver
- Target
無限平面で代用される環境オブジェクトをここに指定します。もし何も指定しなければ無限平面には座標変換は適用されず、ワールド座標系に配置されることになります。 - Normal
無限平面の法線ベクトルをここに指定します。法線ベクトルはTargetのローカル座標系で記述されている必要があります。 - Height
Targetから無限平面までの距離(法線方向が正の負号付きの距離)を指定してください。
RaycastPlaneShadowReceiver
- Raycast Mask
ここで指定するレイヤーマスクはPhysics.Raycast関数の引数として使われ、レイキャストで影を投影させる場所を探すのに使われます。影を落としたい環境オブジェクトはここで指定するレイヤーを持ち、コライダーコンポーネントを含んでいる必要があります。
MeshShadowReceiver
- Mesh Tree
Mesh Treeオブジェクト(Mesh Treeの作成セクション参照)をここに指定します。 - Mesh Transform
Mesh Treeに含まれるメッシュはこで指定するTransformで座標変換されます。ですので、ここにはMesh Treeを作成する際に指定した環境オブジェクトと同じものを指定します。もしMesh Treeがメッシュオブジェクトから作成された場合は、そのメッシュを描画しているMeshRendererを持つオブジェクトをここに指定します。 - Has Normals
Projector用のシェーダーが法線マップを必要としている場合にチェックを入れてください。 - Cull Back Face
このオプションにチェックを入れると、Projectorの方向を向いていないポリゴンを取り除くことができます。 - Scissor
MeshShadowReceiverはMesh Treeの中から影の落ちる領域と交差するポリゴンを拾い出します(下の左側の図)。しかし、これだと実際に交差している領域よりも大きな面積を持つことになり、影の描画でGPUに余計な負荷がかかります。’Scissor’にチェックを入れることで、このはみ出している領域をシザリングしてGPUの負荷を軽減することができます(下の真ん中の図)。ただしCPUの負荷が上がるので、必ずしも全体のパフォーマンスが向上するとは限りません。 - Scissor Margin
影と交差している領域からちょっとしかはみ出ていない小さなポリゴンまでシザリングするのはCPUの負荷を無駄に上げるだけです。下にある中央の図はどのように’Scissor Margin’が機能するかを図示しています。右側の図はこの’Scissor Margin’が有効に機能している例です。この例では、平面や円柱の大きなポリゴンはシザリングされ、球面の小さなポリゴンはシザリングされずギザギザのままです。これによって、球面の小さなポリゴンをシザリングするのにかかるCPUの負荷をなくしています。
‘Scissor Margin’はBinaryMeshTreeを使っているときだけ有効です。
- Enable Prediction
‘Enable Prediction’を有効にすると、MeshShadowReceiverは次のフレームで必要なメッシュを用意し、マルチコアプロセッサをより活用できるようになります。そのためには次の’Predictor’プロパティも同様にセットする必要があります。この機能はマルチコアプロセッサを持たないデバイスでは無効になります。 - Predictor
PredictorはITransformPredictorインターフェースを実装したコンポーネントで、ユーザーが好きに実装できます。このコンポーネントは次のフレームでのProjectorの位置や向きを予測します。詳細は“MultiProjector – Mesh”デモをご覧ください。 - Update Only When Projector Moved
もしもProjectorが常時動いているわけではないのであれば、このオプションにチェックを入れることで、CPUの負荷を軽減することができます。チェックを入れた場合、Projectorが動いて錐台が’Margin’で指定した余白から外にはみだすまで、メッシュの更新が行なわれなくなります。 - Margin
‘Update Only When Projector Moved’にチェックを入れた時のみ適用されるパラメータです。メッシュを生成する際の余白の大きさを指定します。 - Projector Material For Lightmapped Mesh
シャドウレシーバーのメッシュのうち、ライトマップが使われている場所に適用するマテリアルを指定します。指定がなければプロジェクターと同じマテリアルが使われます。しかし、通常はプロジェクターは動的なオブジェクトにも影を投影するので、プロジェクターにはライトマップを使わないマテリアルを指定し、ここにライトマップを使うマテリアルを指定する方がいいでしょう。詳細は Mixed Lighting Blob Shadow Projector を参照してください。 - Static Material Properties To Copy From Projector
上の Projector Material For Lightmapped Mesh で指定したマテリアルに元のプロジェクターのマテリアルからコピーするプロパティを指定します。コピーは初期化時に1度だけしか行われないので、動的に変化するプロパティーは次の Dynamic Material Properties To Copy From Projector に追加してください。 - Dynamic Material Properties To Copy From Projector
上の Projector Material For Lightmapped Mesh で指定したマテリアルに元のプロジェクターのマテリアルからコピーするプロパティを指定します。コピーは毎フレーム行われます。プロジェクターが ProjectorManager で管理されていて、ProjectorManager の Projector Fadeout Distance と Fade Duration が有効な値を持つ場合、プロジェクターによって投影される影の濃さが動的に変化する可能性があるので、Float タイプの _Alpha プロパティをここに追加してください。詳細については Projector Managerのセットアップ を参照してください。