【Unity】【Blender】BlenderからUnityにメッシュを取り込む際の設定と注意点

Blenderで作ったメッシュをUnityに取り込む方法です。
UnityのFBX Importerの挙動を確認したくてBlenderからメッシュをExportしたものの、ちょっとハマったのでメモ。

Unity 5.6.1p3
Blender 2.79

2019/1/6追記 : 代わりにこちらの記事をご覧ください!!!

取り込みの際に起こる問題のより根本的な原因の検証・解説と解決手順をまとめました。
これらの記事の方が適切な内容になっていますのでこちらをご覧ください。

手っ取り早く手順だけ知りたい方は下記をご覧ください。

light11.hatenadiary.com

取り込み時に起こる問題の原因の解説は下記をご覧ください。

light11.hatenadiary.com

以下古い内容となります

軸を合わせる

Blenderは前方がY軸の負方向、上方がZ軸の正方向とする右手座標系のようです。

f:id:halya_11:20180325222646p:plain:w500

Unityは前方がZ軸正方向、上方がY軸正方向の左手座標系なので、これに合わせる必要があります。

f:id:halya_11:20180325223337p:plain:w500

この設定は、File > Export > FBXで出力する際のウィンドウで行います。

f:id:halya_11:20180325225411p:plain:w300

Forwardを-Z Forwardに、UpをY Upに設定しています。
これでUnityの軸に合わされます。

スケールを合わせる

スケールは少々ややこしいです。

まず、Blenderはシーン設定で長さの単位を色々と設定できます。

f:id:halya_11:20180325231934p:plain:w300

長さの単位をNoneに設定すれば単位無しにもできます。
この場合の単位をBU(Blender Unit)というらしいです。

f:id:halya_11:20180325232140p:plain:w300

次にUnityのFBX Importerを見てみます。

f:id:halya_11:20180325234151p:plain:w300

まず、FBX ImporterのScale Factorはマニュアルで次のように説明されています。

Unity’s physics system expects 1 meter in the game world to be 1 unit in the imported file. If you prefer to model at a different scale then you can compensate for it here. Defaults for different 3D packages are as follows:
.fbx, .max, .jas, .c4d = 0.01
.mb, .ma, .lxo, .dxf, .blend, .dae = 1
.3ds = 0.1

ちょっとわかりづらい記述ですが、要するにScale Factorを0.01に設定すれば1BU = Unityの1メートル(1Unit)として扱えるようです。

またここでさらにわかりづらくしているのが、FBX ImporterのUse File Scaleという項目です。
マニュアルには次のようにあります。

Tick the checkbox to use the default model scaling, or untick to use a custom scaling value for your model. Unity’s physics system expects 1 meter in the game world to be 1 unit in the imported file. If you prefer to model at a different scale then you can compensate for it here.

これは要するに、これにチェックを入れると先ほどのScale Factorのデフォルト値、つまり0.01の値がScale Factorの値に乗算されますよ、ということです。
つまりScale Factorを1のままにしておいてUse File Scaleにチェックを入れておけば、最終的に適用されるのは1 * 0.01 = 0.01となります。

さらに、これに加えてBlenderでFBXをエクスポートする時に、Apply Transformにチェックを入れる必要があります。
Experimentalと書いてあるので不安になりますが、これをやらないとUnityに取り込んだ際にTransformのScaleの値がおかしくなります。

f:id:halya_11:20180326223652p:plain:w300

ここまでをまとめると、

  1. Blenderでは単位設定をNone(BU)にしてモデリングをする
  2. FBX ImporterでScale Factorを1にする
  3. FBX ImporterでUse File Scaleにチェックを入れる
  4. Blenderでエクスポートする際にApply Transformにチェックを入れる

とすれば正常なスケールでインポートできるということになります。

参考サイト

docs.unity3d.com

qiita.com