2018年8月6日

Unity CombineMeshesで合体したメッシュが汚くなる


CombineMeshesで結合したメッシュにライトマップを焼いたとき汚くなってしまう場合の対策をメモメモ…



※このページの内容の動作確認にはUnity2018.2を使用しています。
複数のメッシュをMesh.CombineMeshesメソッドを使って結合したあとにライトマップをベイクしたところ、かなり不自然で汚いノイズのような模様がついてしまいました。


これは十中八九ライトマップ用のUVが作成されていないために起こる現象で、メッシュを作成したあとに次の処理を追加すれば防げます。

Unwrapping.GenerateSecondaryUVSet(mesh);

UnwrappingクラスはUnityEditor下にあるため、このスクリプトがEditorフォルダに入れられていない場合はビルド時にエラーになってしまうので注意。コンパイル時に除外するように指定しておきましょう。

#if UNITY_EDITOR
 Unwrapping.GenerateSecondaryUVSet(mesh);
#endif

これで改善しました。


あ、もしもCombineMeshesとか関係なく「普通にインポートしたオブジェクトが汚くなる」という場合には、必ずインポート設定の"Generate Lightmap UVs"をオンにして、関連項目("Hard Angle"など)をいじるなどしてみてくださいね。


これでメッシュのUV2データがライトマップ用に最適化され、ちゃんと焼かれるようになるはずです。

0 件のコメント:

コメントを投稿