アニメーションを作るときってまず、オブジェクトの特定のパラメータにキーを追加しますよね。位置とか角度とか、カメラだったら焦点距離(Focal Length)とか。作業するユーザーからすると、複数の「キー」を補完しつつ繋いだものが「カーブ」で、そのカーブを格納するのが「トラック」なんじゃろうと思ってしまうンだけど、ソフトウェアからすると逆だそうで、「トラック」があって「カーブ」があって「キー」が存在できるンらしいんです。道路があるから車が走れるって感じですかそうですか。
それで、トラックやらカーブを取得するときに必要なのが、DescID (DescriptionID)ってやつで、Descriptionってここでは「説明」って意味だと思うわけで、要するに「僕ちゃんが欲しいのはアレです」って言ってもソフトウェアは分からんから細かく説明しなくてはならないのですね。
トラックを取得するとき、
track = obj.FindCTrack(c4d.DescID(
c4d.DescLevel(c4d.ID_BASEOBJECT_POSITION,c4d.DTYPE_VECTOR,0),
c4d.DescLevel(c4d.VECTOR_X,c4d.DTYPE_REAL,0))
)
こういう風に書く必要があるんですが、上記は位置のトラックの取得なんだけど、c4d.DescLevelっていう、同じようなのが二つあります。これはDescIDのレベル1と2で、取得されるトラックとの関係は下の図のようになります(多分)。
位置トラックは更に位置のX、位置のY、位置のZに分かれるんで、2段階に分けて、最大3種類書かなくてはならないんですね。角度も角度のX、角度のY、角度のZに分けなくてはなりません。
なんで、そういう細かいことに気付いたかと言うと、SDKでいちいち名前とか調べなくても、画面のパラメータをエクスプレッションエディタに直接ドラッグ&ドロップすればいいよってことで、やってたら、ものによってごちゃごちゃ書かれてたり、単純だったりするわけです。途中でコンマで区切られてたり。
ああ、これがDescIDのレベルの複雑さと関係するんだろうなと思って、「焦点距離」トラックを作ってみると、
「焦点距離」だけで、その下位には何も作られません。やっぱりね。
そして、その「焦点距離」のトラックを取得する際は、
focusTrack = obj.FindCTrack(c4d.DescID(c4d.DescLevel(c4d.CAMERA_FOCUS)))
という風になり、DescIDはレベル1まであればいいので、位置トラックの取得と比べるとずいぶん簡単です。
つづく
※ Cinema4DでPythonスクリプトを勉強するにあたっては、「Cinema4D道場」で「Pythonスクリプト習得」編を購入してがんばってます。何故かリンクが張れない(ブログの編集画面で「不正な書式が~」と出てアップできない)ので、興味がある方は「Cinema4D道場」でググって下さい。
※コメント投稿者のブログIDはブログ作成者のみに通知されます