TouchDesigner 프리셋 만들기

9838 단어 TouchDesigner
TouchDesigner Advent Calendar 2018 16일째의 기사입니다. 잘 부탁드립니다.

소개



실시간으로 생성되는 비주얼의 파라미터를 바꾸어 조정하거나 마음에 드는 파라미터를 저장하거나 한다고 생각합니다. 저장한 것을 프리셋으로 사용할 수 있으면 좋겠다고 생각하면서, Palette > Derivative > Techniques > presets 네.

샘플 파일



github에 올랐으므로 필요에 따라 참조하십시오.
htps : // 기주 b. 코 m / Chima Nako / 토우 ch로 해 g r-a d ゔ ぇ t ぇ da r 2018

기본으로 사용하는 UI



UI의 베이스는 Palette > Derivative > UI > gal 에 들어가 있는 것입니다. 지금까지 Palette > Derivative > UI > TUIK 안에 있는 것을 사용해 UI를 만들고 있었습니다만, 내용을 조금 만지려고 하면 Tscript로 구현되고 있어 잘 모르기 때문에 Python 에서 구현되는 gal에 긁힘과 Discord에서 조언을 받았습니다. 사용해 보면 확실히 TUIK와 비교하여 자신이하고 싶은 용도로는 사용하기 쉬웠습니다.

샘플 구조





이번에 만든 프리셋의 구조로는 0-9의 각 버튼을 클릭하면 저장된 프리셋의 값이 반영되며, UI에서 값을 변경한 후 Save 버튼을 클릭하면 현재 UI의 값이 저장됩니다. 라는 것입니다. 이러한 값을 사용해 Ramp Top 를 애니메이션 시키고 있습니다.



VJ 툴과 같이 여러 종류의 비주얼을 준비하기 위해 UI_private 가정합니다. UI_all 쪽은 각 비주얼 공통의 내용을 보관 유지하고 있는 것으로, 현재 프리셋을 선택하는 라디오 버튼이 들어 있어, UI_private 의 내용을 함께 표시하고 있습니다.

사전 설정 업데이트


table_all_values 에 모든 프리셋의 데이터가 들어 있고, preset_save 안의 chopexec_save 로부터 프리셋의 업데이트를 하고 있습니다.
첫 번째 열이 각 프리셋의 이름이고 이름이 일치하면 index에 해당하는 값을 추가하거나 업데이트합니다.
새 프리셋이 추가되면 새 행(row)을 추가합니다.
null_current = op('null_current_values')
chopto_current = op('chopto_current_values')
null_index = op('null_index')
table_all = op('../table_all_values')

def offToOn(channel, sampleIndex, val, prev):
    # get index to update
    presetIndex = int(null_index[0] + 1)
    # get a list channels
    chans = null_current.chans()
    # reset index
    index = 0

    for c in chans:
        done = False

        for i in range(table_all.numRows):
            table_name = table_all[i, 0]
            # check if a row for this value exists
            if(c.name == table_name):
                table_name.val = chopto_current[index, 0]
                updateValue(c, index, presetIndex)
                done = True
                break
        # if a row for this value doesn't exist
        if(done == False):
            table_all.appendRow([c.name])   
            updateValue(c, index, presetIndex)
            done = True
        index += 1  
    return

def updateValue(chan, index, presetIndex):
    # update value 
    param = table_all[index, presetIndex]
    param.val = chan

프리셋에 테이블을 사용하는 것은 익숙한 Matthew Ragan씨의 기사를 참고로 하고 있습니다.
TouchDesigner | FB HelpGroup | Presets | Matthew Ragan

UI 업데이트





프리셋 번호를 클릭했을 때, chopexec_switch 로 한번 프리셋으로부터의 값을 반영시킨 후, op('text_reset_switch').run(delayFrames = 60) 로 60프레임 후에 UI로부터 값을 변경할 수 있는 상태로 되돌립니다.
constant_switch = op('constant_switch')
def onValueChange(channel, sampleIndex, val, prev):
    constant_switch.par.value0 = 1
    op('text_reset_switch').run(delayFrames = 60)
    return
constant = op('constant_switch')
constant.par.value0 = 0


UI_private 내의 각 CHOP Execute 우리는 각각 바로 오른쪽에 있는 UI의 Value를 직접 업데이트하고 있습니다. UI에서 변경했을 때도 프리셋에서 변경했을 때에도 UI의 값이 변경되기를 원하기 때문에 이렇게합니다.

개선하고 싶은 점


  • json으로 export하여 table DAT로 읽을 수 없습니까?
  • Python에서 컨테이너 내에서 외부 table DAT를 참조하고 CHOP Execute에서 각 UI의 Value를 직접 업데이트하는 것을 어떻게 처리하고 싶습니다 (단순히 네트워크와 코드를 청소하고 싶습니다).

  • 마지막으로



    프리셋 이런 식으로 하고 있어요—라는 분이 계시면, 가르쳐 주시면 다행입니다.
    고마워요.

    좋은 웹페이지 즐겨찾기