TDで、複数プロセスのデータを共有する方法

概要

ローカル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 DAT2Touch Out CHOPを追加します。今回は、absTime.frameの値を送ります。

毎フレームごとの値を連番(シークエンス)で送れるので、後ほど遅延時間を確認できます。

受信側

送信側のTDを起動した状態のままで、別のTDで受信側の.toeファイルを新規作成し、1Touch In DAT2Touch In CHOPを追加します。追加すると、早速、受信側のノードの数字が変わります。

もし、送受信ができない場合は、

  • Touch InのParametersのNetwork Addresslocalhostになっているかを確認
  • 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ライセンスだと、さらに共有できるノードが用意されています。こちらは、次回に。