« 落とし穴にはまった「C4D標準パーティクルをスプラインエミッタにする」 | トップページ | 落とし穴にはまった「スプラインエミッタにする」XPressoのC.O.F.F.E.E.ノードで実験 »

落とし穴にはまった「スプラインエミッタにする」確認する為のC.O.F.F.E.E.エクスプレッション

「C4D標準パーティクルをスプラインエミッタにする」は落とし穴から脱出できるか?
今回は、C.O.F.F.E.E.エクスプレッションで確認。

今回はR9.5で実験します。R10/R11も同じです。
では、ヌルオブジェクトにC.O.F.F.E.E.エクスプレッションを取り付けて試してみよう。
XPressoのC.O.F.F.E.E.ノードでも良いとは思うが、今回はC.O.F.F.E.E.エクスプレッション。
ついでに確かめたい事も有りますので…

Coffee_rengering

/*
レンダリング中のC.O.F.F.E.E.
2009.1.22

*/


main(doc , op)
{
  var act_doc , act_tim , act_sec , act_fps , act_fm;//配列変数にすれば良かったか?
  var doc_tim , doc_sec , doc_fps , doc_fm;          //現在、表側にあると思われるドキュメント、その中の時間を確保する変数

  act_doc = GetActiveDocument();  //GetActiveDocument()でアクティブドキュメントを取得
  if(act_doc){
    act_tim = act_doc->GetTime(); //アクティブドキュメントのBaseTimeを取得
    act_fps = act_doc->GetFps();  //アクティブドキュメントの秒間フレーム数の取得
  }
  if(act_tim){
    act_sec = act_tim->GetSecond();     //アクティブドキュメントの現秒を取得
    act_fm = act_tim->GetFrame(act_fps);//アクティブドキュメントの現フレーム取得
  }

  if(doc){
    doc_tim = doc->GetTime(); //main()に渡されるdocのBaseTimeの取得
    doc_fps = doc->GetFps();  //main()に渡されるdocの秒間フレーム数の取得
  }
  if(doc_tim){
    doc_sec = doc_tim->GetSecond();     //main()に渡されるdocの現秒を取得
    doc_fm = doc_tim->GetFrame(doc_fps);//main()に渡されるdocの現フレーム取得
  }

//取得したデータの表示
  print("af : " , act_fm , "   actSecond : " , act_sec);
  print("  GetActiveDocument : " , getclass(act_doc));
  println();
  print("df : " , doc_fm , "   docSecond : " , doc_sec);
  print("  doc : " , getclass(act_doc));
  println();
  println("---");
}

このスクリプトは、main()関数に渡されたdocのBaseDocumentとGetActiveDocument()で取得したBaseDocumentのアニメーションキーフレームの時間をコンソールに表示するものです。
それでは、実行します。実行しますと言っても…
エクスプレッションエディタにスクリプトを入力後、実行ボタンを押します。エクスプレッションエディタの下の方に「エラーはありませんでした!」が表示されれば問題ありません。

それでは実験です。
コンソールが開かれていると思います。
まず、コンソールの表示内容を消去します。
アニメーションツールバーで0フレームから再生ボタンを押して再生します。

上の段がGetActiveDocument()で取得したデータ
下の段がmain()に渡されたdocから取得したデータ

Coffee_rendering_01

フレーム数/秒数/クラス名は共に同じ数値が表示されています。
再生している現フレームと秒が表示されています。

0フレームに戻して、コンソールの表示を消去します。

次の実験は、アニメーションをレンダリングします。
とりあえず、何もない状態でレンダリングしますので、アニメーションフレーム数を増やします。

編集メニュー/「プロジェクトの設定」です。
現在は90fなので、適当に300fに変更します。

Coffee_rengering_02

続いてレンダリング設定。
出力のフレームを「全てのフレーム」に変更します。
ファイルに出力しないので、パスはカラの状態です。

Coffee_rendering_03

ではレンダリングします。
「レンダリング後に保存」を実行。
「画像表示」ウィンドウが表示されます。同時に「保存せずに実行しますか?」とダイアログが出ます。
「はい」を押して続行します。

Coffee_rengering_04

ある程度レンダリングしたら、「画像表示」ウィンドウを閉じダイアログが出ますので、レンダリングを中止します。

コンソールを見てください。

Coffee_rendering_05

GetActiveDocument()は、取得できているもののフレーム、秒が0.0のままになっています。docの方はフレーム、秒数共に変化しています。

この結果だけでも言えますが、アニメーションにC.O.F.F.E.E.で対応する時にGetActiveDocument()を使って現在のBaseDocumentを取得する事は、不可という事になります。

もう一度同じ実験をします。
アニメーションツールバーのスライダーを100fに移動して、同じようにレンダリングをさせます。コンソールの結果は…

Coffee_rendering_06

GetActiveDocument()のフレームが100のまま変化していません。
レンダリングには対応していませんが、確かに現在の時間を指しています。

もう一つ実験です。
新規でシーンを追加します。
ドキュメントが2個開いている状態です。
この状態で、レンダリングを開始して、途中で違うシーン(ドキュメント)に切り替えます。多分予測通りだと思いますが、GetActiveDocument()は切り替わったドキュメントのアニメーションツールバーのスライダのフレーム値を拾うと思います。

追加したシーンのスライダを適当な位置にスライドさせ、先ほどの実験シーンをレンダリングさせます。そして途中で切り替えます。

Coffee_rendering_07

レンダリング実行中の161フレームでドキュメントを切り替えました。
GetActiveDocument()は切り替わり前の100fから切り替わり後の68fに変化しています。
docのフレームは1フレームづつ増え続けています。

この結果から言えることは、アニメーションにC.O.F.F.E.E.で対応するときGetActiveDocument()の使用は不可だということです。
間違ってはいけないのは、C.O.F.F.E.E.がアニメーションに対応できないと言うことではありません。docを渡してくれるC.O.F.F.E.E.エクスプレッションは可能です。C.O.F.F.E.E.プラグインのエクスプレッションタグも可能です。
XPressoのC.O.F.F.E.E.ノードは、docは渡されないので、それなりの対処が必要だということですね。

|

« 落とし穴にはまった「C4D標準パーティクルをスプラインエミッタにする」 | トップページ | 落とし穴にはまった「スプラインエミッタにする」XPressoのC.O.F.F.E.E.ノードで実験 »

コメント

この記事へのコメントは終了しました。