25
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

TouchDesignerのオペレータをPythonで繋ぐ

Posted at

この記事で伝えたいこと

TouchDesignerのオペレータの繋がりをPythonで自動制御したいとき,以下の3つを覚えておけばなんとかなります.

  • オペレータtoの入力としてオペレータfromを繋ぎたいときは,to.inputConnectors[0].connect(from)とする.
  • 同様に,オペレータfromの出力としてオペレータtoを繋ぎたいときは,from.outputConnectors[0].connect(to)とする.
  • 2つのオペレータの接続を切りたいときは,me.outputConnectors[0].disconnect()のように,disconnect()を呼ぶ.

具体例

かわいい猫の画像をネットで漁っていると,とても癒されますよね.ということで,Twitterで"cat"と検索をかけたときにヒットする画像を取得して,スライドショー表示させるものを作ります.

cat.gif

プログラムの全体図は次の通りです.

cat.png

左半分の赤色の部分で画像のURLを取得し,それをFileプロパティに指定したMovie File In TOPを,Replicator COMPで生成します.そしてコピー結果を全てSwitch TOPに繋ぎ,そのIndexプロパティをLFO CHOPで操作しています.

DATに画像のURLを収納し,その各成分を順に見ることで各画像を表示するMovie File In TOPを生成する方法は,TouchDesigner使いなら一度は通る道:Visual Thinking with TouchDesigner - プロが選ぶリアルタイムレンダリング&プロトタイピングの極意の3章14節「Replicator COMPで動的に複製する」に記載されたものと同一なので,ここでは詳細は省きます.

今問題にしたいのは,複製された各Movie File In TOPをSwitch TOPに繋ぐことです.ここを本記事の最初に述べたコードで解決します.Replicator COMPには,コールバック用のText DATがくっついています.このPythonコードを以下のように書き換えます.

replicator1_callbacks.py
# me - this DAT
# 
# comp - the replicator component which is cooking
# allOps - a list of all replicants, created or existing
# newOps - the subset that were just created
# template - table DAT specifying the replicator attributes
# master - the master operator
#

def onReplicate(comp, allOps, newOps, template, master):
    switch = op('switch1')
    lfo = op('lfo1')

    # switchオペレータのIndexが,1から画像の総数まで,1秒ごとにインクリメントされるように設定
    lfo.par.frequency = 1.0 / len(newOps)
    lfo.par.offset = 1
    lfo.par.amp = len(newOps)

    for c in newOps:
        c.outputConnectors[0].connect(switch)
        #c.display = True
        #c.render = True
        #c.par.display = 1
        #c.par.clone = comp.par.master
        pass

    return

ここでは複製された各オペレータの出力としてSwitch TOPを繋ぎたいので,c.outputConnectors[0].connect(switch)としました.

せっかくノードベースでプログラミングできるのにPythonで繋がりを制御する場面はそうそうない気もしますが,例えばこのようにReplicator COMPと組み合わせることで,手間を減らすことが可能です.具体例では取り扱わなかった接続を切るコードも含め,是非役立ててみてください.

25
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?