Cinema4Dメモ

Cinema4Dという3DCGソフトに関するメモ書きです。

複数のカメラのパラメータを一つのカメラに集約するPythonスクリプトが概ね完成

2015-04-18 00:28:27 | Python & Cinema4D

そういうわけで、スクリプトがやっと満足に動きました。

このスクリプトは後日公開するつもりですが、シーン内に複数あるカメラの位置と角度と焦点距離を一つのカメラの複数のフレームにアニメーションとして納めるスクリプトです。例えば建築のインテリアのCGを作ってて、いろいろな部屋をいろんな構図でイメージしたいって時にたくさんのカメラを作ると思いますが、全部まとめて1アクションでレンダリング出来ます。は?レンダーキューに追加すればいいだけだが?と言われると、はい、そうですねとしか言い様がないんですけど(^^;)それくらい分かってるけど、別の理由があるのだ(意味深)

最後までわからなくて苦労したのが、100行目の

bt = c4d.BaseTime(frame,fps) の行で、当初は

bt = c4d.baseTime(frame) としていたんですが、0フレームの次に30フレームにキーが追加されて、その次は60フレームに追加される始末。

このframeという変数は、最初0で、for文の一通りの処理が終わると、1増えるようになってて(125行目)、この変数frameを使って、0フレーム、1フレーム、2フレーム・・・と、各カメラから取得した値を何フレーム目に書き込んでいくのかということ、つまり今何フレームなのかを保持する役割を持った重要な変数なんです。

間延びして配置されたキーフレーム・・・(笑)

変数frameが1の時は30フレームにキーが作られて、変数frameが2の時は60フレームにキーが作られるのは、BaseTime()自体がドキュメントのFPSである30に影響を受けてるンだなーというのはわかるんだけど、じゃあ、どうすればいいのよ?って数時間苦しんだけど、SDKのBaseTime()のところを見ていると、()の中で , で区切ったりしてるのを発見して、やけくそでBaseTime(frame,fps)としたらうまくいったんだけど、疲れました。

追記 BaseTime(A,B)とあったら、分数の分子がAで分母がBになるとなるようです。つまり、A/Bなんだけど、BaseTime(A/B)と書くとエラーになります。math.ceilを使って切り上げしてもダメで・・・要するに割りたければ , で区切ればいいらしいです。


コメントを投稿