CGBoxの一部の記事にはアフィリエイト広告が含まれております。
【Unity】カメラが近づくとモデルが消えるときの解決方法
こんにちは!Unityで3Dモデルを扱っている時、カメラが近づくとモデルが突然消えた!という経験をしたことがありませんか?
モデルの髪の毛や服のような一部のパーツが消えることもあり、特にVRchatのアバターを扱う時によく起きる問題です。
本記事では、このようにカメラが近づくとモデルが消える時の解決方法を解説していきます!
VRCで近づくとモデルが消えるとき
この近づくとモデルが消える問題は、特にVRC(VRchat)のアバターにおいてよく起きるようです。
今回例として扱う3Dモデルには、以下のユニティちゃんのモデルを利用します。
デフォルトの状態ではユニティちゃんのモデルは問題なく表示されるのですが、今回はあえて一部の設定を変更してカメラを近づけてみます。
すると下のようにヘアバンドと、服の袖の部分が消えてしまうようになりました。
自身で用意したモデルがこのような状態になってしまったときの解決方法を、一つずつ紹介していきます。
Skinned Mesh Rendererの設定で解決する
結論から言えば、各パーツのメッシュの座標と、実際に表示されている場所とがズレていることがこの問題の原因です。
言葉だけでは分かりにくいので、下の画像を見てみましょう。
ヘアバンドのメッシュは頭の上に表示されているのに対し、座標は足元の位置にあるのが分かります。
この状態でカメラがモデルに近づくと、メッシュがカメラの範囲外と判定され、描画されずに消えてしまうのです。
この問題は、モデルのSkinned Mesh Rendererの設定を変更することで解決できます。
3Dモデルの各パーツには下のようにSkinned Mesh Rendererコンポーネントがついているかと思います。
ここの設定項目を一つずつ確認していきましょう。
Root Boneを設定
まず一つ目の解決法は、パーツごとにRoot Boneを設定してあげることです。
RootBoneを設定すると、そのパーツの座標の位置がRootBoneの位置に従うようになり、ズレがなくなります。
下のように、hairbandにはRootBoneが設定されていません。
このRootBoneを、モデルの頭に対応するCharacter1_Headに設定します。
この状態でカメラを近づけてみると、ヘアバンドが消えなくなりました。
RootBoneを設定していないので、袖はまだ近づくと消えるままです。
次の項目項目で袖も表示されるようにしてみます。
Bounds Extentを設定
Skinned Mesh Rendererの設定で解決するもう一つの方法は、Bounds Extentを大きくすることです。
このBounds Extentの項目を大きくすると、メッシュの大きさが実際よりも大きいものと判定されるため、位置がずれていてもカメラから消えることがなくなります。
Extentを全て1にして表示を確認してみましょう。
このように、袖も消えることなく表示されるようになりました。
Update When Offscreenを設定
もう一つの解決法は、Update When Offscreenをオンにすることです。
この項目をオンにするだけで、下のように簡単にパーツが表示されるようになります。
この項目は何をしているかというと、カメラに映っていない状態でも常に描画されるという設定項目です。
つまりカメラが近づいても消えることは確実になくなりますが、負荷がかかってしまいます。
なのでこの方法は、他の手段で解決しない場合の最後の手段として使うことをおすすめします。
カメラのNearClip設定で解決する
ここまで紹介した方法でも解決しない場合には、カメラのNearClip設定を確認してみましょう。
この項目は、カメラの描画最短距離を決めるものです。
つまり、ここの数値が大きすぎるとカメラの近くのモデルが描画されません。
この数値をギリギリまで小さくしてみて、改善しないか確認してみましょう。
解決方法まとめ
ここまでいくつかカメラが近づくとモデルが消える問題について解決方法を紹介してきました。
まとめると、解決方法は以下の通りです。
消える各パーツのSkinned Mesh Rendererコンポーネントから、
- Root Boneを設定する
- Bounds Extentを大きめに設定する
- Update When Offscreenをオンにする(負荷がかかる)
これらの方法を試してみましょう。
全て試しても改善しない場合は
- カメラのNearClip設定を小さくする
ことも試してみてください。
Sceneビューで近づくと消えるとき
Sceneビューで3Dモデルの各パーツが上手く表示されないことがあります。
下の例では衣服の一部の色が変わっていたり、髪の毛の一部が消えています。
そんなときは、画像の右上のIsoと表示されているところをクリックしてみましょう。
このIso(Isometric)は並行投影モードであり、遠近法が考慮されない描画方法になります。
Isoになってしまっていたらクリックすることで、通常のPerspectiveモードに戻ります。
Perspectiveモードにすると下のようにモデルが綺麗に表示されるようになりました。
両モードの違いについて、詳しくは下の記事で解説されています。
おすすめアセット
Clothing Culler
Clothing Cullerは、3Dモデルの衣服を重ねた時に、上の画像のように貫通してしまうのを防止するアセットです。
Unityエディタ内で利用することができ非常に便利です。
思うようにモデルの衣服の着せ替えができないときにぜひ使ってみたいアセットです。
Dynamic Bone
Dynamic Boneはモデルの一部(髪の毛や耳など)を、ゆらゆらと動かすことができる便利アセットです。
特にVRCのアバターを作る場合にはぜひ導入しておきたいアセットです。
ボーンの動き方について細かく設定することができるので、簡単に好みの揺れ加減を実現することができます。
まとめ
以上、カメラが近づくとモデルが消える問題の解決方法について解説してきました!
カメラやメッシュの設定については慣れるまで分かりにくいですよね。
3Dモデルが上手く表示されないときは、本記事で紹介した解決方法をぜひ試してみてください!