【Unity】カメラが近づくとモデルが消えるときの解決方法

URLをコピーする
URLをコピーしました!

CGBoxの一部の記事にはアフィリエイト広告が含まれております。

こんにちは!Unityで3Dモデルを扱っている時、カメラが近づくとモデルが突然消えた!という経験をしたことがありませんか?

モデルの髪の毛や服のような一部のパーツが消えることもあり、特にVRchatのアバターを扱う時によく起きる問題です。

本記事では、このようにカメラが近づくとモデルが消える時の解決方法を解説していきます!

目次

VRCで近づくとモデルが消えるとき

この近づくとモデルが消える問題は、特にVRC(VRchat)のアバターにおいてよく起きるようです。

今回例として扱う3Dモデルには、以下のユニティちゃんのモデルを利用します。

あわせて読みたい
Unity-Chan! Model | 3D Characters | Unity Asset Store Elevate your workflow with the Unity-Chan! Model asset from unity-chan!. Find this & other Characters options on the Unity Asset Store.

デフォルトの状態ではユニティちゃんのモデルは問題なく表示されるのですが、今回はあえて一部の設定を変更してカメラを近づけてみます。

すると下のようにヘアバンドと、服の袖の部分が消えてしまうようになりました。

自身で用意したモデルがこのような状態になってしまったときの解決方法を、一つずつ紹介していきます。

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モードにすると下のようにモデルが綺麗に表示されるようになりました。

両モードの違いについて、詳しくは下の記事で解説されています。

Qiita
【Unity】シーン表示上のシーンの向きに戸惑わない方法 - Qiita はじめにUnityで最初に戸惑うのはシーン表示上のシーンの向きですね。最初の例題としてCubeを置くといったことをやりますよね。下図のシーンキズモを、うっかりクリックし...

おすすめアセット

Clothing Culler

あわせて読みたい
Clothing Culler | Utilities Tools | Unity Asset Store Use the Clothing Culler from Salvage Studios on your next project. Find this utility tool & more on the Unity Asset Store.

Clothing Cullerは、3Dモデルの衣服を重ねた時に、上の画像のように貫通してしまうのを防止するアセットです。

Unityエディタ内で利用することができ非常に便利です。

思うようにモデルの衣服の着せ替えができないときにぜひ使ってみたいアセットです。

Dynamic Bone

あわせて読みたい
Dynamic Bone | Animation Tools | Unity Asset Store Use the Dynamic Bone tool from Will Hong on your next project. Find this & more animation tools on the Unity Asset Store.

Dynamic Boneモデルの一部(髪の毛や耳など)を、ゆらゆらと動かすことができる便利アセットです。

特にVRCのアバターを作る場合にはぜひ導入しておきたいアセットです。

ボーンの動き方について細かく設定することができるので、簡単に好みの揺れ加減を実現することができます。

まとめ

以上、カメラが近づくとモデルが消える問題の解決方法について解説してきました!

カメラやメッシュの設定については慣れるまで分かりにくいですよね。

3Dモデルが上手く表示されないときは、本記事で紹介した解決方法をぜひ試してみてください!

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
URLをコピーする
URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Unityメインの個人開発者。UnityでAIを学習させてみたり、野球ゲームを作ってみたりと色々してました。現在はライターとして、Unityで開発する人の力になる記事が書けるよう奮闘中。

目次
閉じる