Blender 2.80 から Unity の Humanoid 互換で fbx をエクスポートする
バージョンは Blender 2.80 と Unity 2017.4.28f1。.blend ファイルダウンロードはこちら。
このファイルのライセンスは クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。
エクスポートに関する注意事項全般はBlender のリグ/アニメーション Tipsを参照。
ウェイトの設定
ウェイトのついていないボーンが存在すると Humanod の自動マッピングに失敗する。Unity の configure ウインドウで表示されないボーンがある場合は、ボーンのウェイトがついているかどうか確かめる。
T スタンスにする
humanoid で使う場合スケルトンは T スタンスを強制される。A スタンスでメッシュをモデリングしている場合は、T スタンスにするアクションを作成してエクスポートすれば T スタンス状態でエクスポートできる。エクスポートするアクションは T スタンスアクションだけにする。そうしないと別のアクションが適用された状態でエクスポートされることがある。
Unity の Avatar Configuration 中に調整してもいい。
エクスポート設定
FBX のエクスポート設定を変更しても、座標系の違いは吸収できない。以下の手順でメッシュもしくはアーマチュアを編集することで、Unity 側で設定せずにインポートできる。アーマチュアとメッシュとを親子付けしている場合は、アーマチュアにのみ以下の手順を実行する。
1. トランスフォームの適用
この記事で紹介する方法は回転を標準化しない状態でエクスポートする。なのでまずはトランスフォームを適用してトランスフォームを標準化する。オブジェクト > 適用 > 全トランスフォーム(Ctrl + A)を実行する。
2. 回転の設定
回転のXに 90 を、Zに -180 入力して回転を適用する。そして回転のXに 90 を、Zに 180 を入力して、見た目を正しい状態に戻す。Xは両方とも 90 を入力することに注意する。
3. FBX でエクスポート
重要なのは、「スケールを適用:すべてFBX」「前方:ーZが前方」「上:Yが上」「アーマチュアタブのデフォームボーンのみ」。
Unity のインポート設定
インポートして Hierarchy に配置すると、Rotation のデフォルト値が設定されているので0にすると正しく表示される。アーマチュアの場合は、アーマチュアのルートのトランスフォームを初期化する。
スクリプト
以下のスクリプトはこの記事で説明した回転を設定する。
import bpy import math bpy.ops.object.transform_apply(location=True, rotation=True, scale=True) o = bpy.context.active_object o.rotation_euler = (math.radians(90), 0, math.radians(-180)) bpy.ops.object.transform_apply(location=False, rotation=True, scale=False) o.rotation_euler = (math.radians(90), 0, math.radians(180))
FBX SDK を使ってエクスポート
Better Fbx Importer & Exporter($25) はライブラリに公式の FBX SDK を使っており、デフォルトのエクスポーターより FBX ファイルの互換性が高い。
外部リンク
【Unity】【Blender】【解説編】BlenderでFBXをエクスポートしてUnityに取り込む(スケールと回転の問題を解消)
バージョン 2.92 では Use Space Transform(スペーストランスフォームを使用)が使える。これは座標変換時に回転行列の適用をスキップするオプションだ。