관리 메뉴

caLAB

[Touchdesigner] Compute Shader 개념 본문

TouchDesigner/TouchDesigner 튜토리얼

[Touchdesigner] Compute Shader 개념

도이(doi) 2021. 3. 17. 18:57
728x90

Compute Shader를 사용하게 되면,

rop(render output unit)을 생략하기 때문에 pixel, vertex shader보다 속도가 빠르다.

다른 shader들과 마찬가지로 GPU를 제어한다. 

 

Touchdesigner에서 Compute Shader를 사용하는 기본 세팅에 대해서 알아보도록 하자. 

우선 다른 shader 작업과 마찬가지로, glsl multi TOP를 만든다. 그 후 숨겨져 있는 compute glsl DAT를 연다.

glslmulti TOP 파라미터에서 mode를 Compute Shader로 설정한다. 

그렇게 되면 에러가 뜨는데 이는 GLSL version을 4.30 이상으로 바꾸면 해결된다. 

처음 compute shader DAT를 열게 되면 아래와 같이 보인다. 

local_size 의 개념은 아래의 이미지로 생각하면 됩니다.

처리해야 될 총 픽셀의 크기가 8*8일 때 layout(local_size_x = 4, local_size_y = 4)이면 

8*8 pixel을 4*4 단위로 묶게 됩니다. 

glslmulti TOP를 보시면 dispatch size 파라미터가 보이는데 

이는 실행 사이즈가 됩니다. 8*8 pixel을 4*4단위로 묶으면 dispatch size는 2*2가 되어야 합니다.

간단한 개념은 이렇게 설명이 될 것 같습니다.

이제 compute shader를 응용해보도록 하겠습니다.

 

compute shader DAT를 아래와 같이 수정하도록 하겠습니다.

각 코드에 대한 설명은 주석으로 나와 있습니다.

위 코드는 총 3가지의 이미지를 최종적으로 저장하게 되는데요. 이는 buffer에 저장되게 됩니다. 

#of Color Buffer의 값을 이 경우 3으로 설정해주면 됩니다.

만약 이미지를 추가할 경우 이 수를 imageStore 수에 맞게 늘려주시면 됩니다.

첫 번째 이미지를 제외하고 이미지를 출력하기 위해서는 renderselect TOP를 사용해야 합니다.

renderselect에 원하는 이미지를 불러오고 싶을 경우 glslmulti를 TOP에 끌어다 놓은 후 Color Buffer Index의 값을 n-1로 설정하시면 됩니다. 아래와 같은 경우 두 번째 이미지를 불러오고 있습니다.

noise 값을 3d 좌표로 받아오는 것은 add SOP으로 point를 생성하고 convert SOP으로 particles per point로 전환시키고 이를 geometry로 가져온 후 instance해서 Translate OP에 glslmulti를 놓고 값을 대입해주면 아래와 같이 noise 3D cube가 나오게 됩니다. 재미를 위해서 다른 3D geometry(ex) box SOP)를 연결해 보시면 particle값이 변하는 것을 보실 수 있습니다. 

728x90
반응형

'TouchDesigner > TouchDesigner 튜토리얼' 카테고리의 다른 글

windowCOMP perform mode 세팅하기  (0) 2021.04.06
TouchDesigner Optimization  (0) 2021.03.30
TouchDesigner FPS 측정  (0) 2021.03.15
TouchDesigner GLSL 2D, 3D  (0) 2021.03.12
TouchDesigner GLSL 기초 - 02  (0) 2021.03.10
Comments