LoginSignup
33
27

More than 5 years have passed since last update.

TouchDesignerで動的に四角形を増やして飛ばす

Last updated at Posted at 2017-12-07

はじめに

登録時にTouch Designerって書いててすいませんでした!!!!
お触り警察の人ごめんなさい!!!!

TDはリアルタイムな増減が苦手

単純な図形を楽器のアタックに合わせて散らかすことは良くあることだ。

oFならまあ一瞬ですが、
TDだと辛い。

TDは個数が決まってるものを、
大量にざっくり似たような動きでコピーするのは得意ですが、

  • 動的に数が変わる
  • 決まった点Aから点Bに移動する

的な地味な絵作りは結構難しい。

もちろんReplicatorやCopy Sop使っても可能ですが、
めちゃ重い。

頓知を効かせてChopだけで何とかして、
インスタンシングで描画する必要があります。

Event Chopを使う

というわけでEvent Chopを使います。

こいつはPulseを突っ込んであげたり、
createEventなどの関数を呼んであげると、
ADSRベースのチャンネルデータを作ってくれます。

ADSR

ADSRとはAttack, Decay, Sustain, Releaseの略で、
DTMやってる人にはお馴染みだと思います。
ADSRの解説

ざっくりいうと、1から0まで時間をかけて減衰する値を作ります。

Trigger Chopでも同じようなことは出来るんですが、
Event Chopの良いところは、叩けば叩くだけチャンネルのサンプル数が増えていくところです。
そして決めた時間が経ったらサンプルはちゃんと死んでくれる。

サンプル数が増減するので、こいつをインスタンシングに使うと良さそうです。

固定の値も持てるよ

Event ChopはADSRに影響されない、
つまり時間で変化しない固定の値を持つこともできます。
これで四角形の発生元と向かい先を作れば良いですね。

流れ

  1. Event Chopに任意のチャンネルを作る(四角形の初期値と向かい先)
  2. 使い回すADSRの値を設定
  3. createEvent関数でEventを発生させる
  4. ADSRを使ってBlend Chopで2つの値を補間
  5. インスタンシングする

チャンネルの準備するよ

3番目のインレットにconstantsなどでチャンネルの名前を教えてあげます。

スクリーンショット 2017-12-07 15.40.01.png

ADSRの値を設定

後述のcreateEvent関数で設定しなかった値は、
UI上で設定した値が入ります。
なので、共通の値は設定しときましょう。
今回は1から0までシンプルに落ちて欲しいのでこんな感じ。

ただ、これだと何も動かないのでDecay Timeのみスクリプトから設定します。

スクリーンショット 2017-12-07 16.41.27.png

createEvent関数呼ぶよ

次にcreateEvent関数を呼びます。
ポイントはsamples引数です。

ここにリストを突っ込んでやると
1で作った名前の順番でチャンネルが作られます。

また、decayTimeなど、ADSRの値をチャンネル毎にランダマイズしたりもできます。
要は四角形が飛んでく速さをランダマイズ出来るってことです。

start = 0
goal = random.random() * 2.0 - 1.0
decay = random.random()
e = op('event1')
e.createEvent(decayTime = decay, samples=[start,goal])

Event Chopのリファレンス

ADSRで補間するよ

Select ChopでADSR、初期値、向かい先、とそれぞれのチャンネルを取り出して、
Blend ChopでADSRの値を利用して補間します。

ついでにADSRの値もrenameしてscaleなどに使います。
これで移動しながら徐々に消えていく四角形が出来ます。

スクリーンショット 2017-12-07 16.05.58.png

この時にBlend Chopの入力順に注意しましょう。

スクリーンショット 2017-12-07 16.04.39.png

インスタンシング

スクリーンショット 2017-12-07 16.01.21.png

特にいうことなし

toe置いときます

補足

S Curve Chopとの相性が最高

エクスペリメンタルビルドだけにしか入ってないですが、
ADSRの値をLookUpとSCurveでぐんにゃりさせると使い勝手良いです。

S Curve Chop

孔明の罠

世間のチュートリアルの中には、
Event Chopを使わずにTableに必要な値を格納して、
Execute Datで毎フレーム更新して死活管理する、みたいなのもあります。

が、これ落とし穴があって、TableはStringなので、
値の読み書き時に文字列の変換が走るんですね。

なのであんまり数増やせずにすぐに重たくなります。
非推奨。

33
27
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
27