TouchDesignerの基本操作を思い出すメモ


久しぶりに触ると、何もかも忘れていたので改めてメモする。超基本的なUIUXをメモしておく。

随時更新


ほぼ網羅して書いてくれているQiita




Network Editor

左クリック  + 移動で
移動

右クリック + 移動で
選択

ホイール / ダブルクリックで
Compに入る。出る。

ホイールクリック + 移動で
Zoom


OPを選択時D / OP右下青ボタン
画面背景にプレビューの表示

OPを選択時P
パラメーターウインドウ

OPを選択時P + Command / OP右下青ボタン
背景に表示

OPをホイールクリック or パラメーターウインドウ上部iボタン
infoの確認

OP右下+ボタンで、referenceやエクスプレションに繋げれたり、SOPなら法線とか情報を見れる
OP選択時、Aでもおk

>Pを押すと Display Optionの表示

OP選択時 + Ctrl + P

H 選択したオペレーターに画面を戻す


右クリック + View で別ウィンドウでそのOPを表示。UIをそのComp内に作っていた場合は、触れる。
Boardaless..だとちょっとじゃま


ノード増やすときにAlt + Nを押すとnullが追加できるらしい。

That probably feels normal to most of us…but there is a faster way. We can use a keyboard shortcut Alt + N to create the null in 3 easy steps! They are as follows:

Click on the operator you want a null after
Hit Alt + N on the keyboard (lowercase n)
Hit Enter on the keyboard

That’s it!!! It looks like this:

https://interactiveimmersive.io/blog/beginner/touchdesigner-workflow-speed-boosts/


text DATなどを簡単に実行するためにはtext portを開いてドラッグアンドドロップからのRun Script以外に
text DAT選択してのCtrl + Rで簡単に実行できる。


topとかを、dをすと、ピクセル情報が出てくる。


そもそも、右クリックするとShortcutがでてくる。

vにあたっている、View as Pointsを押せば、point cloud系・particle系の何かみたいなピクセルのrgbをxyzに落とし込んだ時の表示が見れてよい。


Python Script周り


Basic


op('xxx'):xxxオペレーターの参照取得
op('xxx').par.xxxxxx:xxxオペレーターのパラメータの参照
ops('xxx*'):ワイルドカードで複数の参照
→ あとは変数用意してfor variable in variablesとかで適当にループ回す
str(me.digits):
absTime.seconds:総経過時間
absTime.frame:総フレーム数
me.time.seconds:タイムライン一周分の時間
me.time.frame:タイムライン一周分のフレーム数
me:OP自身
me.parent():OPの親
me.parent().var('xxx' , xxx):local Variable xxx設定
me.digits:
me.op('xxx'):
print(''' xxx '''):シングルクォート3つで改行ありで出力できる
parent():親を参照
parent(x):親の祖先を参照。xは数値
parent().digits:
parent().name:
op('xxx')['chan1']:xxxオペレーターのchan1の値を参照
op('xxx')[0]:xxxオペレーターの配列0番目の値を参照(一つ上と同じ値)、OPにある値の分だけ配列数指定可能
→ こっちの記述のほうが変更に強い
op('xxx')chan(0):xxxオペレーターのchan1配列0番目の値を参照
op('xxx')chan(0).vals:xxxオペレーターのchannel全値をリストとして取得
math.sin():sin関数
math.cos():cos関数
op('table')[row(横), column(縦)]:row、columnで指定した条件でTableの値を参照
→ row, columnにはテーブルの指定の行&列番号もしくは値の文字列でも指定可能
app.samplesFolder + '/Map':現在開いているファイルのフォルダの中身?
配列.len():配列の数を返す
配列.append(''):配列に要素を追加
配列.extend(['', '']):配列に配列要素を追加
op('xxx').findChildren( $type, ):子要素を全取得, 引数で絞込める
Dictionaryデータ.keys():Keyを全て取得
Dictionaryデータ.values():Valuleを全て取得
me.inputCell:テーブルのセルに演算できる
int(val):valをint型にする
float(val):valをfloat型にする
str(val):valを文字列に
※Pythonでは数値と文字列を連結するとエラーになる。暗黙的に型変換をしてくれない

[Channel Class]
op.chan(x).index:channe(x)のインデックス
op.chan(0).name:channel名
op.chan(0).owner.name:channelの属すオペレーター名

[CHOP Class]
op('xxx').samples:xxxオペレーターの値の配列数取得

[引用] https://qiita.com/freeman/items/f0038df7b3cdffcf3925




eval() ・exec()


たくさんのオペレーターを操作
例えば、「constant1,2...9のvalue0に1を代入する」はこうです。

https://qiita.com/ibuibu69/items/8ffa1d1d4d969a973068
for i in range(1,10):
    op( 'constant' + str(i) ).par.value0 = 1

例えば、「constant1のvalue1,2,...9に1を代入する」はこうです。
exec関数を使います。(私はこれを知らず、四苦八苦しました。。)

コツ:
valueの項番をイテレータとするには、まず実行したい文全体をstring型で書き、イテレータを埋め込みます。その後、exec()関数で実行します。
クォーテーションをエスケープするのを忘れずに!!

https://qiita.com/ibuibu69/items/8ffa1d1d4d969a973068
for i in range(1,10):
    script = 'op(\'constant1\').par.value' + str(i) + ' = 1'
    exec(script)
print(a)


例えば、「constant1の1,2,...10の合計値を表示する」はこうです。

https://qiita.com/ibuibu69/items/8ffa1d1d4d969a973068
a = 0
for i in range(10):
     a += eval('op(\'constant1\').par.value' + str(i) ) 
print(a)

先ほどのexec関数と似てますが、今度は値を評価する関数であるevalを使ってます。
以下のように、exec関数を用いてもよいです。

https://qiita.com/ibuibu69/items/8ffa1d1d4d969a973068
a = 0
for i in range(10):
     script = 'a += op(\'constant1\').par.value' + str(i)     
exec(script)



TOPまわり

レイヤー

単純にレイヤー的に画像を重ねたいときはmergeなんてノードがないので頭おかしくなる
overがレイヤー処理
いわゆるレイヤーモードごとにある程度nodeになっている
comp topだと細かくレイヤーモードを選べる

アルファの調整


channel Mix TOP
でRGBAの調整ができる。

channel Mixだと、使いにくいため、
luma levelのpostの方がもっと使いやすい。




TOPにdelay

chacheTOPで可能。

Activeをonにして、chache size分キャッシュされて、Step sizeごとにキャッシュされて、Output Index-10だと10フレーム前の表示になる。

下記は分かりやすく、色を付けているだけ

この記事が気に入ったらサポートをしてみませんか?