BlenderからUnityを意識したFBXを出力する


概要

BlenderとUnityは座標系が異なるため向きが合わないため、どこかでその差異を解消しなければなりません。今回はそれをBlenderで吸収する方法をご紹介します。

例えば、下図はBlenderでシーンファイルを新規に作成して Monkeyを設置したものです。ワールド空間の原点にMonkeyの中心点が位置しています。Location 0,0,0でRotation 0,0,0です。

これをFBXに出力します。

  • Scale 1.00
  • Apply Scalings: FBX Units Scale
  • Forward: -Z Forward
  • Up: Y Up

出力したFBXをUnityに読み込み、当該モデルを確認すると、RotationのXに-89.98と値が入っています。

この-89.98をゼロにするというのがこの記事の焦点です。

単純なケース

Object Modeで対象のオブジェクトをX軸の正に90度回転します。

次にEdit Modeで対象のすべての頂点をX軸の負に90度回転します。

その状態でFBX形式で出力してUnityに読み込みます。

下図が読み込んだ結果です。冒頭で紹介した例とは違いRotationの値がゼロになっていることがわかります。

オプション – Z軸

UnityのZ軸の負の方向に正面を向けたい場合はBlenderの対象オブジェクトの頂点をEdit ModeでZ軸に180度回転します。

下図はその状態で出力したFBXファイルを読み込んだ結果です。

もっと複雑なケース

前述のケースは1つのオブジェクトでしたが、今度は複数のオブジェクトがある場合の対処法です。下図はMonkeyと台形のオブジェクトがあるシーンです。

各々のオブジェクトでX軸の正に90度回転すると下図のようになります。これは求める結果ではありません。

複数を選択してから回転します。

位置が原点から離れているため修正します。Emptyオブジェクトを作り、それの子どもとして猿と土台部分を関連づけ、親だけを操作して位置合わせをします。

土台部分の底面をEdit Modeで選択します。

Cursor to Selectedを選択します。

Plain Axesを選択してEmptyオブジェクトを作成します。

Emptyオブジェクトと猿と土台で親子関係を定義します。

次にCursorをワールド空間の原点に移動します。ビューポートでShift + Sを押してメニューを開きCursor to World Originを選択します。

Emptyオブジェクトをワールド空間の原点に移動させるために、ビューポートでShift + Sを押してメニューを表示してSelection to Cursorを選択します。

下図は作業が終了した時の様子です。猿はLocation X,Y,Zが0,0,0、Rotation X, Y, Zが90, 0, 0で、原点位置はワールド空間の原点に位置しています。土台も同様です。

FBXで出力してUnityに表示した結果が下図です。土台、猿の両方ともPosition, Rotationの各値がゼロになっていることがわかります。