[TouchDesigner]一定間隔で数が増える数値の出し方

一定間隔で数が増える数値を出したいときは、Pattern CHOPを使うと便利。

Pythonで書くとこんな処理

def onCook(scriptOp):
	scriptOp.clear()
	scriptOp.insertRow(['ty'], 0)

	n = 15
	step = 5

	j = 0
	i = 0
	for i in range(1,n+1):
		scriptOp.appendRow([j])
		if i % step == 0:
			j += 1

	return

Pattern CHOPをつくる

早速、Pattern CHOPをつくり、パラメーターの設定をする。


Typeから”Step”を選ぶ。今回、使用する項目は以下。

  • Length: sampleの長さ
  • Number of Steps: 何段階で目標値に増加させるか
  • Amplitude: 振幅数(この場合だと、中間地点の値)
  • Channel Names: 出力するチャンネルの名前

サンプル:階段状にBoxが増えていく

実際に、使えそうなシチュエーションとして、InstanceされるオブジェクトのYを段階的に増やして、階段状に上がっていくものサンプルとします。サンプルファイルは、こちら。
https://github.com/arkwknsk/touchdesigner/tree/master/tips/pattern-chop-step

完成はこういう感じのものです。横に5列、縦に3行のグリッド上にBoxが配置されますが、Z方向に1行(つまり、横に5個ずつ)ごとに、Yの値が変化し上がっていく構造です。

早速、ネットワークを見ていきましょう。

一番の左の”Para”というCHOPで、一列に何個、何行分表示するかをパラメータとして指定できるようにしています。その数値から、grid SOPでグリッドを作り、InstanceされるBOXの元の位置を生成。

Pattern CHOPのパラメータ項目の中で、簡単なPythonスクリプトを書き、生成する数列の長さ、ステップ数を入れています。また、grid SOPのパラメータも、スクリプトで指定しています。こうすることで、”Para”の値を変えると、動的に構造を変化させることができます。詳細は、サンプルファイルを。

生成されたGridをCHOPに変換し、次に、Select CHOPで、値をそのまま使うtxとtzだけを抽出します。tyの値は、Pattern CHOPで生成し、最終的にMerge CHOPでtx, ty, tzを合わせる形にします。

これをGeometry COMPにリンクし、インスタンスさせます。

サンプルファイル

https://github.com/arkwknsk/touchdesigner/tree/master/tips/pattern-chop-step