Blender 4.x(>=4.02)で出力したFBXファイルをUnityで読み込むとエラーがでる

概要

  • 使用環境
    • 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の法線の参照モードはDirectIndexToDirectの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側が対応できていないのが問題の根本的な原因であり、このアップデート自体は悪ではないと思う。

ただDirectIndexToDirectを選択的に選べるようにして欲しいとは思う。
(せっかくDirect参照モードで出力するコードがあったんだからさ..)

コメント

タイトルとURLをコピーしました