概要
- 使用環境
- Blender 4.2
- Unity 2022.3.28f1
Blender 4.x系で3DモデルをFBXとしてアウトプットし、Unityで読み込むと以下のようなエラーがでることがある。また.blendファイルもUnityで読み込み際はFBXとしてインポートされるので同じエラーがでることがある。
ImportFBX Errors:
The mesh "mesh_name" has invalid normals. Try cleaning and triangulating "mesh_name" in your 3D modeller before importing it in unity.
This is a failure in the fbx exporter of the tool which exported the fbx file.
(Filename: C:\build\output\unity\unity\Modules\AssetPipelineEditor\Public\ModelImporting\FBXImporter.cpp Line: 378)
結論
Blender 3.x系でFBXをエクスポートすればOK.
これはBlender 4.x系で出力したFBXを3.x系で読み込んでFBXでエクスポートしても良い。
原因
検証したところBlender 4.x系でスムーズシェードを掛け、FBXとして出力した後Unityでインポートするとエラーが発生することを確認した。
調べてみたところFBXの法線の参照形式が原因である。
参考: https://projects.blender.org/blender/blender/issues/123088
FBXの法線の参照モードはDirect
とIndexToDirect
の2種類が良く使われている。Blenderは4.02より前はDirect
モードを用いた出力を行っていたが、4.02以降はIndexToDirect
モードを使用するように変更された
このIndexToDirect
という参照モードを使ったファイルをUnity側では正しく読めないのがエラーの原因である。
この変更は悪だったのか?
IndexToDirect
モードが単純に悪なのか?といわれると、そうではなくむしろFBX SDKではIndexToDirect
であるべきだと記載があるらしい。
参考: https://projects.blender.org/blender/blender-addons/commit/791b042c3a
またUnrealやAutodesk’s FBX Review, FBX Converter 2013では実際に動作している。
つまりBlenderの形式のアップデートが問題だったというよりはUnity側が対応できていないのが問題の根本的な原因であり、このアップデート自体は悪ではないと思う
ただDirect
とIndexToDirect
を選択的に選べるようにして欲しいと思った
コメント