FBX Blender ↔︎ 3ds Max
Camera Animation not Conversion

普段はMaxを日常的・能動的に使うことがないので詳しい事情はわからないのですが
何となくカメラに関して、ちょっと特殊な感じがしています。

Film Offset

まずmayaやCinema4Dでいうフィルムオフセット、Blenderでいうレンズ→シフトがありません。
代わりなのか、そういうわけでもないのか、仰・俯角を補正するモディファイヤがあったりします。
とかくフィルムオフセットがあるシーンをMaxに渡した際は
最終的には目合わせや大きく出力してトリミングするといった手法をとることになると思います。

Lens Animation

そして少し前に発覚したのがレンズのアニメーションに関して。
Maxからは水平視野角のみしか出力されないようです。
もちろん、焦点距離は諸条件から連動した絶対値になるので
持つ必要がないというの考え方も理屈ではわかります。
が、この先困ったことに遭遇することがおそらくそれなりの頻度で発生しそうな気がします。

Max→Blender

Blenderのカメラには水平視野角のパラメータがありません
内部的に持ってるかとかそういうことも現状しらべてはいませんが
fbxでMax→Blenderとした場合にアニメーションは渡されませんし
※のちにFBX SDKで調べたところもアニメーションとしては焦点距離のみでした。

Blender→Max

逆にいうとBlenderからは焦点距離の値のみしか出力されず
MaxはGUI上は焦点距離の値を持っていますが
内部的には持っていない
のではないかと思います。あくまで推測ですが。
※同様にFBX SDKで調べてみてもアニメーションとしては水平視野角のみでした。

まさかそんなことがあるとは思ってませんでしたと言うのは言い訳ですが最初は全然気づきませんでした。
検証を依頼してくれたポメロ越田くんの指摘で改めて確認し
それぞれのソフトで相互にテストしてみて得た結論です。

さらに、レンズのアニメーションデータが受け渡しできていない事実は分かりましたが
それは単にレンズのアニメーションデータがインポートできないことが確認できただけで、
じゃーあるデータは何なのかってことを確認する意味で
両者から出力されたfbxを中間(?ではありませんが)として
C4Dで両アプリケーションから出力したfbxをインポートしてみました。

FBX Conversion

@ C4D import

  • Blender fbx: 焦点距離のみにキーフレーム
  • 3ds Max fbx: 水平視野角のみにキーフレーム

当然、C4D上ではそれぞれ(Blender、Max)のデータで、それぞれ(焦点距離、水平視野角)の値は連動します。

C4D → 3ds Max

そして、C4DにインポートしたBlender fbxのカメラのパラメータをフルベイクしfbx出力。
それをMaxでインポートしてみたところ、きちんとレンズアニメーションが再現されます

今後に関して

やっとFBX SDKでアニメーションデータを確認することができるようになりました。
FBX SDK でのデータ操作に関して理解はできるものの
オブジェクトにアニメーションがブラ下がっている状態だとイメージしやすいのですが
そうではないので、どうするのが良いのかわからない感じのデータ構造に感じています。
とりあえず、txtやjsonに出力することはできるようにはなったのでそれを活用しつつ
時間がある時にFBX SDKで相互にアニメーションを追加するPythonツールでも書いてみようと思っています。



コメントを書く