Mayaで作ったデータをFBXでExportし、UE4にImportするフローをよく使っています。
その時に遭遇した問題点と解決策をまとめました。
元はUE4.24で調べたことなんですが、たぶんUE4.26でも同じ状態だと思います。
軸変換問題とは?
UE4とMayaでXYZ軸がどっちを向いているか、右手座標系/左手座標系が異なっています。
参考
上向き | 正面 | 座標系 | |
---|---|---|---|
Maya | Y | Z | 右手座標系 |
UE4 | Z | X | 左手座標系 |
Mayaで作成したモデルデータを、UE4へインポートした時、デフォルトのオプションだと上向きの違いは変換をしてくれます。(Y-up → Z-up)
しかし、ZとYを入れ替えるだけで正面の向きは変換してくれません。そのため、Y-frontとして扱うことになります。
そうすると、以下のような問題が起きます
- ACharacterなどで使われている、MeshComponentにSkeletalMeshを指定すると横を向く
- 大抵の場合、Meshを270度(-90度)回転して回避していると思います
- SkeletalMeshのソケットの向きがX軸で90度回ってしまう
- その結果、アタッチしたときに意図しない方向を向くことになります
- データ側でアタッチ用ボーン/ソケットに90度の回転を入れて回避したこともあります
解決策
FBXインポートオプションでForce Front XAxisがあるので、これを有効にすることです。
これを行えば、MeshComponentの補正や、前述のデータ調整による回避策は不要になります。
あくまで、Mayaで出力したFBXの場合なので、他のDCCツールは座標系を確認して要/不要を判断してください。
新規FBXをインポートする場合
インポートダイアログの設定(Miscellaneous>Force Front XAxis)を有効にする。
既にインポート済みのアセットの場合
アセットをダブルクリックで開いて、ペルソナのアセット詳細>Import Settings>その他>Force Front XAxisを有効にする。
その後、再インポートを行う。
注意点&FAQ
既存データに適用した場合の回転値について
既存データを変更すると、モデルの向きが90度回ります。そのため、
- 配置したActorの回転値を修正
- ACharacter派生などで使っているMeshComponentで指定した回転値の修正
など、回転値に関する修正が必要になります
スケルタルメッシュとアニメーション
スケルタルメッシュとアニメーションは密接に結びついているため、これらの片方だけForce Front XAxisを有効にすると、表示が崩れます。
その場合でも、Force Front XAxisを有効か無効のどちらかに統一すれば直ります。
大規模な開発の場合、移行作業はスケジュールを調整してまとめて行うことをお勧めします。
グレイマン(SK_Mannequin)はY-frontだけど…
混乱の一因でもありました。グレイマンがY-frontになっているので、それで問題ない。と思っていたのですが、この元データはY-upではないようです。
そのため、Jointの向きはデータ作成者の意図通りになっており、アタッチなども問題なく行えます。
なお、ThirdPersonCharacterで問題なく使えているのは、MeshConponentに270度の回転が入っているためです。
MayaとUE4で軸の向きが違う
Force Front XAxisの対応をした後でも、以下の画像のようにMayaとUE4でJointの軸の向きが異なっているように見えます。
結論から言うと問題ありません。
ただ、
Maya | UE4 | |
---|---|---|
UP | Y(緑) | Z(青) |
FRONT | Z(青) | X(赤) |
SIDE | X(赤) | Y(緑) |
と対応を見てみると、異なるのはSIDEのみです。これは、右手座標系、左手座標系の差異からくるもので、問題ありません。
あとがき
会社的にも技術情報の共有が推奨される事になりました。
他にもUE4の一般的な調査項目のまとめがストックされているので、暇を見て記事を書いていこうと思います。