カリングシステム

 

概要

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

次の画像はカメラカリングを可視化したものです。
フィールドには多くのキャラクタがいますが、実際にクロスシミュレーションが実行されるのはカメラに描画されている明るい対象のみとなります。

 

カリングモードの設定

MagicaClothではクロスコンポーネントごとにカリングの有無を設定できます。
そしてカリング処理には幾つか種類があります。
このモードはクロスインスペクタの<Culling>項目から設定可能です。

各カリングモードの詳細は次の通りです。

カリングモード 説明
OFF カリングを行いません。
シミュレーションは描画状態に関わらず常に実行されます。
Reset 画面外ではシミュレーションを停止させます。
再び表示された場合はシミュレーションをリセットします。
(初期設定)
Pause 画面外ではシミュレーションを停止させます。
再び表示された場合はシミュレーションを停止状態から再開させます。

 

キャラクタアニメーションとの連動

キャラクタは通常AnimatorもしくはAnimationコンポーネントによりアニメーション制御されます。
Animator/Animationには同じようにカリングシステムが実装されており次のような内容となっています。

Animator

Always Animate カリングを行いません。
アニメーションは常に実行されます。
Cull Update Transforms 画面外でもアニメーションは実行されますがTransformには反映されません。
つまり内部のアニメーションは動作しているが姿勢は一時停止している特殊な状態となります。
Cull Completely 画面外ではアニメーションが一時停止します。
停止中はアニメーションが更新されません。
再び表示されると一時停止した状態から再開します。

Animation

Always Animate カリングを行いません。
アニメーションは常に実行されます。
Based On Renderers Animator.Cull Update Transformsと同じです。
画面外でもアニメーションは実行されますがTransformには反映されません。
つまり内部のアニメーションは動作しているが姿勢は一時停止している特殊な状態となります。

このため、これらアニメーションカリングとMagicaClothのカリングモードを一致させることが推奨されます。
一致させることでシミュレーションの停止/再開がアニメーションと綺麗に連動するようになります。
各アニメーションカリングと推奨されるMagicaClothのカリングモードは次のようになります。

Animator

アニメーションカリング 推奨されるMagicaClothカリングモード 説明
Always Animate OFF 常に実行させる
Cull Update Transforms Reset 再開時は任意の姿勢にTransformがリセットされるため、同じくシミュレーションもリセットする
Cull Completely Pause 再開時は停止状態から継続するため、同じくシミュレーションも一時停止から再開させる

Animation

アニメーションカリング 推奨されるMagicaClothカリングモード 説明
Always Animate OFF 常に実行させる
Based On Renderers Reset 再開時は任意の姿勢にTransformがリセットされるため、同じくシミュレーションもリセットする

基本的にはAnimator/Animationのカリング設定に対して上記のモード設定を行えば大丈夫です。

 

カリング判定のためのレンダラー

クロスコンポーネントがカメラに描画されているかどうかはRenderer(Mesh)の描画状態から判定されます。
そのためクロスコンポーネントにはカリング判定を行うためのRendererを予め登録する必要があります。
登録しない場合はカリング機能が有効になりませんので注意してください。
この作業はBoneCloth/BoneSpringのみで必要です。
MeshCloth/MeshSpringでは接続するRenderDeformerから自動判定されるため設定の必要はありません。

まずレンダラーとは次のようにメッシュを描画するために必須となるUnityコンポーネントです。
画面に何かを表示する場合には必ずレンダラーコンポーネントが存在します。

BoneCloth/BoneSpringでは対応するレンダラーを次のように”Cull Renderer List”に登録する必要があります。

これらの登録を簡単にするため”Auto Select”による自動登録が利用できます。
“Auto Select”ではRootListに登録されたボーンに接続されているレンダラーをすべて選択してくれます。
そのため、このボタンを使う場合は”Root List”に必要なボーンを登録してから実行するようにしてください。

以上でカリングモードのセットアップは完了です。

 

カリング状態の確認

クロスコンポーネントの表示状態と実行状態はインスペクタから確認できます。
Visibleが表示状態で、Calculationが実行状態となります。
シミュレーションが除外されている場合はCalculationがFalseになります。

また全体の実行状態はクロスモニターからも確認が可能です。
クロスモニターでは実行状態となっているコンポーネントの総数を知ることができます。

 

留意事項

エディタ実行時の注意

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

影の影響

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

Animatorのカリング問題について

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