Unityお勉強メモ 「fbxファイルの座標系」

※断片的な情報から予想してるだけだから間違ってるかもだよ。

■前提知識■

メタセコ:右手Y-Up
Blender:右手Z-Up
Unity:左手Y-Up

fbxは頂点の座標だけでなく、各メッシュの回転(Lcl Rotation)も保持できる。

■疑問■

fbxの座標系はググっても出てこない。
そもそも「様々な座標系に対応するフォーマット」と巷で言われている。
ほんとに?
実際のところは、『Unityと同じ左手のY-Up』じゃないの?

■根拠■

メタセコからのfbxをエクスポートすると:
  Lcl Rotationはオールゼロ(0,0,0)になる。
  その代わりメッシュの頂点のXが反転される。
  これはちょうど、右手Y-Up(メタセコ)から左手Y-Upへの変換に相当する。
  【変換のイメージ】
    dstVertex.X = -srcVertex.X

Blenderでfbxをインポートすると:
  頂点のXが符号反転される上に、オブジェクトにX90,Z180の回転が設定される。
  これはちょうど、左手Y-Upから右手Z-Up(Blender)への変換に相当する。
  【イメージ】
    dstVertex.X = -dstVertex.X
    dstObjRot = srcObjRot.RotateZ(180).RotateX(90)

Blenderからfbxをエクスポートすると:
  前方と上がどの座標軸かを選ぶことができる。この設定によってエクスポートの動作が変わる。
  頂点のXが反転されたり、Lcl Rotationに回転が設定されたりする。

Unityでfbxをインポートすると:
  頂点の座標がそのまま取り込まれる。
  Lcl RotationがオブジェクトのTransformのデフォルト値となる。

メタセコとBlenderはfbxを入出力する際に何らかの変換を行うが、
Unityはfbxの座標やプロパティをそのまま取り込んでいる。