TouchDesigner 운영자를 Python으로 연결

이 기사에서 전하고 싶은 것



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"과 검색을 걸었을 때 히트하는 이미지를 취득하여 슬라이드 쇼 표시시키는 것을 만듭니다.



    프로그램의 전체도는 다음과 같습니다.



    왼쪽 절반의 빨간색 부분에서 이미지 URL을 가져 와서 File Replicator COMP에서 속성에 지정된 Movie File In TOP을 생성합니다. 그리고 복사 결과를 모두 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와 조합하는 것으로, 수고를 줄일 수 있습니다. 구체적인 예에서는 취급하지 않았던 접속을 끊는 코드도 포함해 꼭 도움을 주세요.

    좋은 웹페이지 즐겨찾기