Culling

概要


カリングシステムを利用することでカメラに描画されていない場合やカメラから一定以上離れている場合にシミュレーションを停止させることが可能です。
これにより特に一人称視点のFPSやVRでのパフォーマンスが大きく向上します。

次の動画はカメラカリングの動作例です。
カリングシステムを有効にすることでパフォーマンスが向上していることに注目してください。

カメラカリング


カメラカリングはカメラに描画されないクロスシミュレーションを停止させる機能です。
これはカメラの視錐台から判定されます。

カメラカリングモード

“Camera Culling Mode”はカメラから非表示になった場合の振る舞いを設定します。

Off カメラカリングを無効にします。
Reset シミュレーションをリセットします。
Keep シミュレーションを一時停止します。
Animator Linkage

キャラクターのAnimatorの”CullingMode”と自動的に連動します。
AlwaysAnimate => [Off]
Cull Update Transforms => [Reset]
Cull Completely => [Keep]

カメラカリング判定方式

基本的にカリングはキャラクターのRendererコンポーネントの表示状態から判定されます。
そのためカリングを行うためにはレンダラーを1つ以上登録する必要があります。
“Camera Culling Method”はこのレンダラーの登録方法を指定します。

Automatic Renderer キャラクターのAnimatorから自動的に設定します。
これは通常Animator以下のすべてのRendererコンポーネントです。
Manual Renderer Rendererを手動で設定します。

距離カリング


距離カリングはカメラから一定以上離れている場合にシミュレーションを停止させます。
シミュレーションを停止させることでパフォーマンスが向上します。

次の動画は距離カリングとカメラの位置関係を視覚化したものです。
カメラが離れることでシミュレーションが停止している点に注目してください。

Distance Culling Length 距離カリングの有効状態、および判定距離を指定します。
Distance Culling Fade Ratio 距離カリングのフェード設定。
切り替えを滑らかに見せるためにシミュレーション状態と無効状態をブレンドして表示させます。
判定距離に対しての割合です。
Distance Culling Reference Object 距離を測定する対象のオブジェクトを指定します。
(None)の場合はメインカメラを参照します。
距離はここで設定した対象と、MagicaClothコンポーネントの座標から計算されます。

カリング状態の確認


現在クロスコンポーネントが表示状態なのか非表示状態なのかはインスペクターの情報から確認できます。
シミュレーションから除外されている場合はVisibleフラグがFalseとなります。

留意事項


エディター実行時の注意

Unityエディタで実行する場合には、エディタのSceneビューもカメラカリングの対象となることに注意してください。
例えばGameビューにはキャラクタが映っていなくともSceneビューに映っている場合には描画対象となりカメラカリングは行われません。

影の影響

キャラクタの影もカメラカリング判定の対象となります。
キャラクタ本体が映っていなくとも、その影が画面に映っている場合はカリングされませんので注意してください。

すべての機能が停止するわけではない

カリングによりシミュレーションが停止状態になっても必要最低限の処理は実行されています。
そのため負荷が0になる訳ではないので注意してください。

Animatorのカリング問題

Animatorのカリングモードが”Cull Update Transforms”の場合に、キャラクタが再び画面に映ったときに一瞬シミュレーションが無効化されたポーズが表示されることがあります。
これはAnimatorのカリングがレンダリングプロセス中に判定され、その場でポーズがtransformに書き込まれシミュレーションの結果が上書きされてしまうためです。
これはUnityの仕様であり、残念ながら回避できません。

カメラカリングと距離カリングの併用

カメラカリングと距離カリングを併用した場合は、両方がVisible状態の場合のみシミュレーションが実行されます。