
概要
ローカルPC内もしくはネットワークに接続されたPC間で動くTouchDesignerの複数のプロセスでデータを共有する方法。
TDのプロセスは、シングルスレッドで動作し同期型のため、高負荷の処理に弱く、マルチコアのCPUの性能をフル活用することができません。大まかな機能ごとにプロセスを分けて、同時起動すると、マルチスレッド的で動作し、負荷分散を図ることができます。また、モジュール化を図ったり、複数人の共同作業の分割にお役立ち!
サンプルファイル
https://github.com/arkwknsk/touchdesigner/tree/master/tips/touchin
Touch In / Out
TDには、プロセス間でデータを共有できるノードがいくつか用意されています。
- Touch In / Out CHOP
- Touch in / Out DAT
- Touch in / Out TOP
また、Pro/Commercialライセンスのみで使えるもっと高度なノードもあります。
送信側

今回は、数値・文字列データを送れるDATとCHOPを送受信
送信側に、1Touch Out DATと2Touch Out CHOPを追加します。今回は、absTime.frame
の値を送ります。
毎フレームごとの値を連番(シークエンス)で送れるので、後ほど遅延時間を確認できます。
受信側

送信側のTDを起動した状態のままで、別のTDで受信側の.toeファイルを新規作成し、1Touch In DATと2Touch In CHOPを追加します。追加すると、早速、受信側のノードの数字が変わります。
もし、送受信ができない場合は、
- Touch InのParametersの
Network Address
がlocalhost
になっているかを確認 - OSもしくはウィルスソフトのファイヤーウォールを一時的に全OFF
を試してみてください
遅延
気になる遅延ですが、DATの方は、デフォルトの設定でローカルPC内で1 frame程度の遅延です。これは、PC自体の処理能力に依存すると思われます。
CHOPの方はデフォルトの設定だと、ローカルPC内でも5 framesのズレが発生します。これは、デフォルトの設定では、通信のドロップのエラー処理のため、キャッシュを貯めているの原因の様です。
CHOPの遅延回避

Touch In CHOPのparameterをこれぐらいにすると、ローカルPC内でも1 frameのズレ程度にできます。
OSCと比較
同じように、異なるプロセスやPCでデータを共有するのに、OSCが一般的に使われますが、Touch In/Outと比べると、
- それぞれにノードを1つだけ置いて送受信でき、すぐに他のCHOPノードに送れるので開発が楽
- チャンネルネームも送信できる
という利点があります。ただし、OSCの場合は、TD以外で開発されたアプリと通信ができるので、ここは大きく違います。あくまでも、TD同士での通信に有効と言えます。
使い道
このノード群を使うと、以下のようなことができます。
- 重たいCHOP系の処理と描画系処理を別な.toeで制作して、マルチスレッドで実行する
- 制御系toeから、複数のPCで稼働するtoeプロセスを制御して、複数画面同期コンテンツを動かす
その他のノード
Pro/Commercialライセンスだと、さらに共有できるノードが用意されています。こちらは、次回に。