
一定間隔で数が増える数値を出したいときは、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