Unity : カメラが近づくと角度によりモデル(の一部)が突然消える

現象

Unityでカメラが近づきすぎるとモデルが消えるパターンとしてはまずカメラに設定してあるNearClipが大きすぎるというのがある。特にVRなどでは顔を近づけてもギリギリまで描画して欲しいので、NearClipは小さめにする。

しかし、NearClipを小さめにしていても、モデル(の一部)が突然消える現象がある。カメラが遠い場合は発生しないが、ある程度近づくとカメラの角度により突然消える。しかも再登場するときはDynamicBoneなどがボヨンボヨンするので、表示が消えていただけでなく動作自体が止まっていることがわかる。

応急処置
「skinnedMeshRenderer」の「update whenoffscreen」をONにする。この方法は楽で良いのだが、名前の通り「見えないときも処理を行う」ことになってしまうので、キャラが増えると処理が重くなり、回らなくなる。

より適切な方法

「skinnedMeshRenderer」->「Bounds」の「Extent」を大きくすれば良いとのこと。

原因

オブジェクトのビジビリティはメッシュの Bounds によって決定されます 。ただし、アニメーションしているメッシュの実際のバウンディングボリュームは、アニメーションの再生によって変化します (例えば、キャラクターが手を頭上に伸ばすと、ボリュームの高さが増えます)。Unity は、すべてのアタッチされたアニメーションが最大のバウンディングボリュームになるときを考慮しますが、すべての使用可能な状況を予想してバウンディングボリュームを計算することは、不可能な場合があります。
以下のような状況では、ボーンや頂点が事前計算されたバウンディングボリュームの外に押し出されてしまい、問題が生じます。

* ランタイム時にアニメーションを追加する場合
・・・つまり、動きのあるモデルの場合は最初に想定したモデルのサイズよりも大きい形になってしまう。だからカメラの中にいるのに外にいると判断されることがある。

参考URL

* Unityでカメラが近づくと角度によりモデル(の一部)が突然消える
カメラが近づくと消えるメッシュの原因と対処法【Unity】【トラブルシューティング】

もしよろしければ、サポートをお願いします! 頂いたサポートは、Creatorとしての活動費に充てさせて頂きます。