FBX Python SDK Focal Length <-> H-FOV Convesion Script

これまでに FBX SDK がらみのエントリーをいくつか書いてきましたが
このスクリプトができた事をもって今回でひとまず終了かなと思います。
もし Web 制作のご依頼をお請けし、その関連でアニメーション付きの FBX を読み込む必要がでた場合に
FBX SDK を使う機会があるかもしれないので何かしらエントリーすることもあるでしょう。
まず FBX というのは基本的には 3D シーンのパイプラインになる汎用的なファイルです。
ポメロ越田くんからよくご相談いただく 3DsMax と Blender とのやりとりで発生した
FBX に関する事象に対応するためR&D を実施してきたのでした。

カメラ画角に 2 種類のパラメーター

DCC ツールそれぞれの Python で開発するぐらいのことは
作業を楽にする上ではそれなりにあることだと思いますが
ファイルにまつわるスタンドアローンの開発ツールである
FBX SDK のようないかにも玄人エンジニアっぽいものを
素人のホリデーコーダーがいじり始めたのは
計算することで相互に求めることが可能なカメラ画角の 2 種類のパラメーター

焦点距離・視野角が原因です。

この相互変換できるという点がコトをややこしくしていて
DCC ツールによっては書き出し時に一方しかパラメーターとしてもっていないことがあるのです。
しかもこれ自体はコトをややこしくしないためのソフトウェア上の安心設計だと思います。

  • Blender: 焦点距離のみ(カメラオブジェクトに視野角なし)
  • 3DsMax: 視野角のみ

※ちなみに Cinema4D は両方あり。

ということなので FBX として書き出しても いずれかしか値をもっておらず
アニメーションしていたとても値を渡せず片思いで心はすれ違います。

この事象を解消すべく、 焦点距離にしかアニメーションがない場合は水平視野角に
水平視野角にしかアニメーションがない場合は焦点距離に アニメーションを付与するような
スクリプトを書き始めたということです。

※ただし、Blender から FBX でのアニメーション書き出しは後述の理由で必要なくなったため
実装してあるものの焦点距離換算の水平視野角へのアニメーション付与は必要なくなりました。

Blender からアニメーション付きで書き出し

これは以前にエントリーしていますが、一切アニメーション付きで FBX 書き出しはしません。
キーフレームごとにテイクとして出力され、
Blender からの書き出し、
作業する DCC ツールでの読み込みともに長時間がかかる上に
肝心のアニメーションのキーフレームなどありません。
C4D、3dsMax では使い方(適切な読み込み方がある?)がわかりません。
以上のことから、Blender からアニメーション出力する場合はすべて abc とします。

FBX Python SDK Focal Length <-> H-FOV Convesion Script

ということで相互変換の必要は無くなったのですが それ以前に進めていたこともあり、
邪魔になるわけでもないですし
もしかしたら、後々必要になる可能性もかんがえてそのまま実装していきました。

いつも通り Cursor Editorで AI の力を借りつつ書いていきます。

以前 FBX Python SDK はweb 上にあまりリファレンスがなく
トークンの無駄打ちをし、さらにむしろ作業の混沌を深めてしまったので
今回はこれまでに自身で書いてきた、これ用に新規で書いたコードなど
必要と思われるリファレンスを用意した上で
SDK 公式をベースとして使うようにプロンプトを設計しました。

そうするとなんとも簡単にサクッとできたんですが、、、 
元FBX(by3DsMax)を変換・出力したファイルを
C4D でインポートし確認するも水平視野角にしかキーフレームがない !

なーんだ、できてねーべ。

まー、FBX Python SDK 開発をしているといつものことだわな。
ということで、安くないのでトークンの無駄打ちを避けるため
AI にさらなる追い込みかけることはせず、自分でコードを確認。

あれこれと中間過程の値を確認してみましたが全然おかしくない
詰んだなー、、、、

が、ふと考えると確認は 実際に使用する必要のないC4D のみだったなーとよぎったんです。
必要なのは Blender にカメラ画角のアニメーションを渡すことなので
試しにBlender(4.5.3 LTS)で読み込みしてみよう。

あれ?ん?あるな。 

焦点距離にキーフレームが付いています。
きちんとPython上で計算した値のキーフレームがついているのです。 
※フレームカウントは30fps換算です。

で、変換をかける前の 元FBX を Blender で読み込みしてみます。 

よかった。ちゃんとついていない。

なんだ、変換できてるじゃないか。素晴らしいぞ AI

やればできるじゃないか。疑ってすまなかった。

てか、なんで C4D で読み込んでも焦点距離にキーフレームが付いていないんだろう、、、
本題は解決した、が新たな謎が増えた。

まー別にいーっすけど。



コメントを書く