COMPごとにタイムラインをつくる方法

TouchDesignerでは、メイン(ルート)のタイムラインとCOMPごとのタイムラインを複数持つことができます。”timeline1″は、メインのタイムラインのフレーム数、null1は、base COMPが持つタイムラインのフレーム数を出力しています。それぞれ、違うフレーム数とタイムラインの最終点が違うことが確認できます。

今回のサンプルファイルはこちら
https://github.com/arkwknsk/touchdesigner/tree/master/tips/multi-timeline

Base COMPにlocal timelineを追加

新規プロジェクトに、Base COMPを追加。Base COMP上で右クリックし、”Add Component Time”をクリック。

すると、Baseの中に、”local”という名前のBase COMPが自動的につくられます。Base COMPの中に入って確認。ここで注目すべきは、画面下部に、今まで無かったタイムラインのUIが表示されています。この”local” Base COMPが、メインのタイムラインとは別時間軸で動くローカルタイムラインを制御してくれます。よって、この”local” Base COMPと同じCOMPにつくられたノードは、このローカルタイムラインを参照して動くようになります。

サンプルファイルの/project1/baseを開いてください。1のボタンを押すと、ローカルのタイムラインが1フレームにリセットされ停止します。2のボタンを押すと、再生されます。

先ほどと同じTimeBaseを追加する操作で、すでに、3“local”が追加されています。

ローカルタイムラインのフレーム数取得

このCOMP内の現在再生されているフレーム数を取得するには、4の様なtimeline CHOPを追加します。

プロパティのReference Operatorで、このCHOPが参照するオペレーターを指定できます。ここでは、このTimeline CHOPが置かれているCOMP(オペレーター)を指定します。

ローカルタイムラインを切り離す

ローカルタイムラインをメイン(ルート)タイムラインと切り離して、単独で再生できるようにします。3の中に入ると、

time COMPというのがあります。これが、タイムラインを生成するCOMPになります。このプロパティの”Run Independently”をOnにします。

なお、このプロパティで、フレームレートやループ再生するかどうかなど、タイムラインの基本設定を行うことができます。

各OPにローカルタイムラインを反映

ローカルタイムラインを持つと、どんなことができるのかをサンプルにまとめてみました。

5のParticle SOPでは、シミュレーション時間をローカルタイムラインから参照することで、変化を付けることができます。 6LFO CHOPでは、生成するためのタイムラインを同期させることができます。フレームレートを落とすとLFOの生成速度が落ちます。 7Movie In Topでは、再生をタイムラインと同期するように設定するため、ローカルタイムラインが止まると再生が止まります。 8Animation COMPでは、ローカルタイムラインにそって、キーフレームが再生されます。そのため、メインタイムラインとは違う速度、方向で再生することができる様になります。

その他、スクリプトやReferenceで参照すれば、さまざまなOPの再生タイムラインを変更することができます。

とは言え、何に応用できるかは謎だったりするのですが、負荷を最適化するために、COMPごとのタイムラインを違うフレームレートで再生するとか、マルチプロセスで同期させるときなどに、メインタイムラインとは違うタイムラインで同期させることなどができそうです。