共通の設定

  • 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 

InspectorInfinitePlane

  • Target
    無限平面で代用される環境オブジェクトをここに指定します。もし何も指定しなければ無限平面には座標変換は適用されず、ワールド座標系に配置されることになります。
  • Normal
    無限平面の法線ベクトルをここに指定します。法線ベクトルはTargetのローカル座標系で記述されている必要があります。
  • Height
    Targetから無限平面までの距離(法線方向が正の負号付きの距離)を指定してください。

RaycastPlaneShadowReceiver 

InspectorRaycastPlane

  • Raycast Mask
    ここで指定するレイヤーマスクはPhysics.Raycast関数の引数として使われ、レイキャストで影を投影させる場所を探すのに使われます。影を落としたい環境オブジェクトはここで指定するレイヤーを持ち、コライダーコンポーネントを含んでいる必要があります。

MeshShadowReceiver 

InspectorMeshShadowReceiver

  • 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を使っているときだけ有効です。
    ScreenshotNoScissor  ScreenshotScssorMargin  ScreenshotScissorMarginEg
  • 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’にチェックを入れた時のみ適用されるパラメータです。メッシュを生成する際の余白の大きさを指定します。

Links

コメントを残す

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

Anti Spam Code *