VRChat(Unity)でフォトグラメトリモデルの見た目が悪くなる原因と解決方法
概要
VRChat(Unity)にフォトグラメトリモデルを持って行ったときに、見た目が汚くなってしまった場合にチェックするべきポイントを比較画像付きでまとめました。
環境
- Unity 2019.4.31f1
- Unity 2022.3.22f1
原因と解決方法
シェーダーがStandardのままになっている
UnityのデフォルトシェーダーであるStandardのままだと、ライティングや影の処理の影響で、モデルに変な陰影がついてしまい、見た目が悪くなることがあります。
フォトグラメトリは、現実の光源(太陽光や照明)の影響が既にテクスチャにベイクされている状態ですので、基本的にはライティングや影の処理がなにも入っていないUnlit/Textureシェーダーなどに変更することで、綺麗に表示 & 描画負荷も最小限に抑えることができます。
-
fbxのシェーダー変更手順例
-
StandardとUnlit/Textureの比較
テクスチャ解像度が低い
Unityではデフォルトでテクスチャの解像度が2048x2048pxまでに圧縮されていると思います。このままだと、モデルのテクスチャが全体的にボケて、ポリゴンの継ぎ目が目立つような見た目になることがあります。
基本的にはフォトグラメトリソフトから出力されたテクスチャの解像度と、Unity上でのテクスチャの解像度を合わせることで見た目を綺麗にすることができます。また、ビルドサイズやVRAMに余裕がある場合は、CompressionのQualityを上げることも有効です。
-
テクスチャの解像度とCompressionの設定箇所
-
テクスチャ解像度による見た目の比較
メッシュのUVが圧縮される設定のままになっている
Unityの初期設定だと、ビルド時(VRChatでいうアップロード時)にメッシュのUVデータが32bitから16bitに圧縮され、精度が落とされます。
Unity上だと見た目が問題なく綺麗なのに、いざビルドされたVRChat内で見てみると、見た目がモザイク化したり、歪んだり、ポリゴンの継ぎ目でテクスチャがずれてしまう場合は、この項目を疑ってみてください。
私の場合はRealityCaptureで生成したモデルを簡素化(ポリゴン削減)せずにVRChatに持って行った際にこの問題が起きました。
テクスチャ1枚あたり数十万ポリゴンを超えるようなハイポリモデルで、このような問題が目立ちやすくなると思います。(ポリゴン1個あたりのUV面積が小さくなるとUV圧縮によるUV座標値のずれが大きく表示されるため)
解決方法としては、フォトグラメトリソフト上でポリゴン数を減らしたり、メッシュを分けたモデルを作り直すのが正攻法ですが、ビルドサイズに余裕があるのであれば、Unityの設定でUV(TexCoord0)がビルド時に圧縮されないようにするのが一番簡単です。
-
メッシュのUV(TexCoord0)をビルド時に圧縮されないようにする設定
-
メッシュのUV(TexCoord0)の圧縮の有無による見た目の比較 (VRChat内で撮影)
-
参考URL
Mipmapが効きすぎている
これはQuest単機で発生しやすい問題で、モデルを少し離れた位置から見ると、見た目が歪んだり、ポリゴンの継ぎ目が目立つことがあります。
Unityには、離れたモデルの描画に自動で圧縮されたテクスチャを使用するMipmapという機能があり、デフォルトで有効になっているのですが、Quest単機だとこのMipmapの効きが異様に強く、テクスチャ解像度を下げたような汚い見た目になってしまうことがあります。
こういった場合はMipmapを無効化してしまうのが手っ取り早く、ビルドサイズの削減にもなります。(Mipmapが有効だとテクスチャ容量が33%増加するため、この増加分を無くせます)
しかし、Mipmapを無効にすると、遠く離れた場所の画面のちらつきが発生しやすくなるため、広域のフォトグラメトリモデルなどでは有効のままのほうが良いかもしれません。
-
テクスチャのMipmap無効化手順
-
Mipmapの有無による見た目の比較 (Quest単機のVRChat内でズーム撮影)
-
参考URL
Discussion