Static設定

バーチャルマーケット等の出展ルールにあるStatic設定。
処理負荷を減らし、快適なワールドを作成するのに役立ちますが、その使用方法を改めて調べてみました。
公式のドキュメントはこちら。
Unity公式ドキュメント 静的ゲームオブジェクト
https://docs.unity3d.com/ja/2018.4/Manual/StaticObjects.html
Static設定って何
処理負荷を減らすため、【動かないオブジェクト】に対して特定の計算処理を無効にする設定です。
状況が変わらないんだから、何回も計算しないで情報を使いまわせば良いよね?ってことです。
うまく使用するとワールドがより快適になります。
VRChatではQuest向け、clusterではスマホ向けなどの低スペック環境に対応するために特に重要なテクニックです。
設定方法
オブジェクトを選択した時にInspectorの右上に出る項目で設定します。

チェックボックスを押すと全項目のStatic設定が有効/無効になります。
▼を押すと各項目を個別に有効/無効に設定できます。

設定項目
Nothing
選択すると全てのStatic設定を無効にします。
Everything
選択すると全てのStatic設定を有効にします。
Lightmap Static
直接光、間接光など(グローバルイルミネーション)の計算を行わないようになります。この項目が有効になっていると事前にLightmapと呼ばれる光/影の情報を作成するため、リアルタイムでのライト変化の影響を受けないようになります。
Occluder Static
オクルージョンカリング(隠れたオブジェクトの描画処理を省略する)機能を使用するために、他のオブジェクトの遮蔽物として機能するオブジェクトに指定します。下のOccludee Staticが指定されたオブジェクトとセットで利用されます。
Occludee Static
オクルージョンカリング機能を使用するために、他のオブジェクトに遮られて見えなくなるオブジェクトに指定します。Occluder Staticが指定されたオブジェクトにOccludee Staticが指定されたオブジェクトが遮られたときに描画処理が省略され、負荷が下がります。

Batching Static
この項目が有効になっているオブジェクト同士の描画処理(ドローコール)をできるだけ纏めて行うようになります。描画処理の負荷は下がりますがメモリ消費量が増えるため、無効にした方が良い場合もあります。
Navigation Static
有効にすることで、CPUキャラクターの移動ルート計算時に動かないオブジェクトとして扱い計算量を減らします。作成するものによりますが、大抵はCPUキャラクターの移動ルート計算は発生しないので気にしないで良い項目です。
Off Mesh Link Generation
隙間を飛び越えるような、更に高度なCPUキャラクターの移動ルート計算時に動かないオブジェクトとして扱います。上記と同じ理由で、あまり気にする必要はない項目です。
Reflection Probe Static
リフレクションプローブ(物体に反射した物を映りこませる機能)でキューブマップ(映り込み画像)を生成するときに動かないオブジェクトとして扱うようになります。通常、動かないオブジェクトであれば有効で問題ありません。
実践的な設定
比較的小規模なワールドであれば以下のような設定が良いかと思います。
状況や使用する機能により最適解は変化しますので、参考程度にご覧ください。
有効化
- Lightmap Static
- Batching Static
- Reflection Probe Static
オブジェクトによっては有効
- Occluder Static(遮蔽物になりうる場合)
- Occludee Static(遮蔽物に隠れる場合)
最後に
Static設定はそれぞれの項目について、どのような処理やセッティングが必要になるかが変わります。
例えば、Lightmap Staticを効果的に利用する場合はライトベイク等のライティングについての知識が必要です。
また、最初に記したようにStatic設定は動かないオブジェクトに対して設定してください(回転しない、大きさが変わらない。も含む)。
影の状態等が変わらなくなるため、動くオブジェクトに設定してしまうと違和感が生じます。
今回もご覧頂きありがとうございました。
芋づる式に必要な知識がどんどん増えてきましたが、今後も少しずつ解説していければと思います。