관리 메뉴

caLAB

TouchDesigner GLSL 기초 - 01 본문

TouchDesigner/TouchDesigner 튜토리얼

TouchDesigner GLSL 기초 - 01

도이(doi) 2021. 3. 9. 17:45
728x90

GLSL 공부하려는 이유. 

TouchDesigner은 기본적으로 단일 Thread에서 작동한다. 그렇기 때문에 한꺼번에 

여러개의 파티클을 만드는 등 대량의 계산 처리를 한 번에 요구하는 작업에는 효율적이지 않다.

GLSL을 사용하면 GPU(multi-thread)를 통하여 연산 처리를 할 수 있기 때문에 대량의 계산 처리를 cpu의 단일 thread보다. 효율적으로 처리할 수 있다. 좀 더 멋있는 작업물을 위해서 공부를 시작해보자!

 

GLSL(openGL shading Language)이란?

shader의 일종으로 그래픽에 최적화 된 언어이다. c언어를 기본으로 한다. 

각각의 픽셀에 어떤 색을 입힐지 결정한다. 

2D 3D 그래픽이 GPU에 직접적으로 실행 된다. 

 

* Shader란?

입력값(vertex info)을 출력값(화면에 보여지는 pixel)으로 변환시키는 프로그램. GPU에서 일어남.

 

TouchDesigner에서 GLSL을 다루는 operator는

glsl TOP, glslmulti TOP, glsl MAT이 있다. 

 

glsl을 가져와서 보면, 아래 text DAT이 3개 있다.

glsl_pixel이라고 되어 있는 곳에서 우리는 기본적인 pixel shader(fragment shader)를 작성할 수 있다.

glsl_info에서는 코드에 error가 없는지 확인 할  수 있는 compile창이다.

glsl_compute에서는 compute shader를 작성할 수 있다. 

GLSL 구성

unifrom block

user에 의해서 전달되어지는 변수(파라미터에 정의)

parameter에서 변수 선언 및 정의. 

runtime(프로그램이 실행 되는 중)에는 업데이트가 불가능 하다. 

ex) uniform float exampleUniform;

interface block

입력 변수(in) 및 출력 변수(out) 정의 정의.

 

main block

입력 변수를 처리하고 출력 변수로 결과를 내보냄.

TDOuputSwizzle : 운영체제에 따른 올바른 출력 채널을 지원

 

Multi-Part Values

- vec2, vec3, vec4

- xyzw, rgba, uvst

 

주석

'//' or '/*'

 

그래픽 파이프라인

glsl TOP vs glslmulti TOP

glsl은 3개의 input값만 연결할 수 있고 glslmulti는 다수의 input 값을 연결할 수 있다.

 

add 구현

glsl texture함수 texture(sTD2DInputs[num], vUV.st);

특정 texture(sTD2DInputs[0])를 좌표(vUV.st)에 샘플링[0-1]

 

파형 종류

buffer란?

정보를 담는 공간, 메모리

m.blog.naver.com/PostView.nhn?blogId=cestlavie_01&logNo=40172559538&proxyReferer=https:%2F%2Fwww.google.com%2F

 

FrameBuffer 란?

1. FrameBuffer란? FrameBuffer는 화면에 그려질 화면 전체에 대한 정보를 담는 공간, 메모리입니다. ...

blog.naver.com

Array를 사용하여 multiChannel을 singleChannel로 보내기

 

5개로 각각 분리되어있던 noise값들을 shuffle에서 swap channels and samples로 하나의 channel로 변경한다.

glslmulti TOP에서 Arrays창에서 uniform을 정의해준다. 

코드는 아래와 같이 치면 된다. for loop 사용. 

TexelFetch(sampler, index)

index에 있는 sample을 가져옴. 이미지를 데이터로 변환.

 

728x90
반응형
Comments