夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Unityでノーマルマップを適応した特定のメッシュにノイズが入る問題の解消

今回はUnityトラブルシューティング枠です。

〇発生した問題

 MixedRealityGraphicsToolsを使用してMetaQuest向けの3Dモデルを作成しました。

この際に画像のようなマテリアルパラメータでノーマルマップを適応しました。

 

※MRGTでは22年8月時点での最新版は0.4.0ですが、NormalMapのScale機能やEmissonMapの機能は入ってません。  筆者は最新版のDevelopブランチから機能を使用しています。

 Unity上ではとても満足のいくグラフィックが完成していました。

 

 しかしMetaQuestで実行したところ次の画像のように白いノイズが走っていることがわかります。

 原因を調査したところNormalMapを外すと解消されることがわかりました。

 また、マテリアルに問題はなく、特定のメッシュ(今回だと床)のみで発生することがわかりました。

〇原因

 今回の原因は対象のメッシュがカスタム法線データを持っていたことでした。

 カスタム法線データはメッシュの形状自体は変更せずに、法線(面の向き)のみを編集する機能です。

 カスタム法線データが付いているオブジェクトorメッシュにはBlenderでメッシュプロパティから形状データを見た際にカスタム分割法線データをクリアなどのよう表示されています。

 

 逆にカスタム法線が設定されていないメッシュはカスタム分割法線データを追加というような表示がされます。

 

Unityでノーマルマップが変になったメッシュをBlenderで読み込みカスタム法線を削除することで正しくノーマルマップがQuestで見れるようになりました。

 おそらくNormalMapとカスタム法線が干渉しておかしな描画になっていたと思われますが、ビルドしないとわからなかったのが沼でした。