2021-08-29 (日)
* FBXファイルをちょっとだけ理解した
面倒くさそうな構造のファイルだなと思って今まであまり関わらないようにしていたのだけど,ファイル自体は頻繁に目にするので中身を読んでみた.とりあえず,Material, Model, Geometry, DeformerとSkinあたりを読み込んで,他のフォーマットに変換してみてそれらく動いたので大丈夫そう.
https://github.com/binzume/modelconv/
噂通り色々扱いにくいフォーマットだったけど,すごく基本的なところでは,個々のオブジェクトを表すModelのローカル座標系を得るのすら色々な値を見ないといけなくて面倒くさい.
変換行列そのものが入ってると楽なのだけど,Modelは変換行列を持ってない.DeformerとかPoseNodeは普通にMatrixで持ってるのに(このMatrixもあまり扱いやすくないのだけど)...
オブジェクトのプロパティを眺めるとLcl Translation
,Lcl Rotation
,Lcl Scaling
とかが並んでるので,これを見て,
ToTranslateMatrix(translation) * EulerToRotationMatrix(rotation, rotationOrder?) * ToScaleMatrix(scaling)
みたいにすると良さそう.プロパティは省略可能なので見つからなければ,PropertyTemplateからデフォルト値を探す.Rotationはオイラー角で入ってるけど,回転順序も設定によって変わるし,SphericXYZとか単なるオイラー角じゃないのもあるけど多くのツールは無視してるっぽいので今回も無視.
それっぽい結果になった.
……ここまでなら,世界は平和だったのだけど現実はもっと厳しかった.モデリングソフト上でのpivotやoffset周りの操作を知らないと計算できないし,いまや同じ会社の製品なのに3ds MaxとMayaでも違うあたりがすごい.