【Unity】【Blender】【解説編】BlenderでFBXをエクスポートしてUnityに取り込む(スケールと回転の問題を解消)

BlenderでFBXをエクスポートしてUnityに取り込む方法です。
何も対処をせずに取り込むとスケール値や回転値がおかしくなるので、その問題点と修正方法を踏まえて解説します。

Unity 2018.2.0
Blender 2.79b

手っ取り早く手順だけ知りたい方

手っ取り早く手順だけ知りたい方は、別の記事にまとめていますので下記の記事をご覧ください。

light11.hatenadiary.com

問題点

まずBlenderで、原点にオブジェクトを生成します。

f:id:halya_11:20181202151831p:plain

そして次のような設定でFBXをエクスポートします。

f:id:halya_11:20181202152129p:plain

これをUnityに取り込んでインスタンス化したものが下記です。
スケール値と回転値に変な値が入っていることがわかります。

f:id:halya_11:20181202152640p:plain

スケール値

スケールの問題は、UnityとBlenderで単位の取り扱いが違うことが原因です。
下記のようにExport FBXのApply ScalingsをFBX Allにすることで解消できます。

f:id:halya_11:20181202152921p:plain

Unityにインポートするとスケール値が正常になっていることが確認できます。

f:id:halya_11:20181202153055p:plain

ちなみにこの原因に関しては深入りしてもどうしようもないのでこの程度にとどめますが、
詳しく知りたい方は下記の記事を参照してください。

blog.mattnewport.com

回転がおかしくなる理由

回転がおかしくなる理由は少し複雑です。

まずUnityとBlenderでは座標系が異なります。
UnityはY軸を上方向とする左手座標系なのに対して、BlenderはZ軸を上方向とする右手座標系です。

f:id:halya_11:20181202154055p:plain

そのため、BlenderからUnityにモデルを持って行く際には回転させて軸を合わせてくれるのですが、
この結果として回転値が入ってしまいます。

回転値を修正する

さて前節の通り、普通にUnityに取り込むと-90度の回転が入ってしまいます。
これを打ち消すために、まずはオブジェクトモードでルートオブジェクトのX軸の回転値に90を入力します。

f:id:halya_11:20181202154859p:plain

このままだとモデルが横を向いてしまっているので、
次に編集モードでモデルが上を向くように頂点座標自体を回転させます。

編集モードで全頂点を選択後、Tools > Transform > Rotateで適当に決定して、
ツールシェルフ下部からAngle = -90°、Constraint AxisのXにチェックを付けます。

f:id:halya_11:20181202155158p:plain

これをUnityにインポートすると、回転値も正常になったことが確認できます。

f:id:halya_11:20181202155326p:plain

Z軸正方向を奥にする

さてここまででスケール値と回転値を修正できましたが、
UnityはZ軸正方向を奥とするのに対して、取り込んだモデルはZ軸正方向を手前としています。

f:id:halya_11:20181202155521p:plain

場合によってはこのあたりの修正も必要になってくるので、手順を解説します。

前節の状態から選択モードで全頂点を選択後、Tools > Transform > Rotateで適当に決定して、
ツールシェルフ下部からAngle = 180°、Constraint AxisのZにチェックを付けます

f:id:halya_11:20181202155955p:plain

これをUnityにインポートすると、Z軸の負の方向を手前としたモデルがインポートできます。

f:id:halya_11:20181202160108p:plain

アドオンもある

これらの処理を行うアドオンも作られているようなので使ってみるのもいいかもしれません。

https://forum.unity.com/threads/blender-unity-rotation-fix.181870/

(細かい部分はプロジェクトごとにカスタムすることにはなりそうですが)

参考サイト

blog.mattnewport.com

https://forum.unity.com/threads/blender-unity-rotation-fix.181870/