Technical/Shader 11

Texture

텍스처 매핑(Texture Mapping) 3D 메쉬에 입히는 것 Texture Mapping을 위해서는 텍스처 좌표(Texture Coordinates) 또는 UV 좌표(UV Coordinates)가 있어야 함. 이들 좌표는 Vertex 단위로 지정된 다음 Mesh의 Face 위에서 보간된다. 즉, Mesh Fragment 각각의 Texture 좌표는 메쉬를 구성하는 Vertex의 Texture 좌표들이 보간된 값에서 얻는다. 텍스처 샘플링(Texture Sampling) 텍스처에서 특정 좌표(위치)의 색상 값을 찾는 과정. GLSL에서 텍스처를 저장하는 변수 타입을 샘플러라고 함. 쿼드(Quad) 두개의 삼각형으로 이뤄진 사각형 또는 정사각형을 의미함. 대부분의 게임 엔진에서 삼각형 Face만으로 구..

Technical/Shader 2021.03.01

Fragment Shader

Fragment Shader Vertex Shader와 동일하게 동시에 하나의 Fragment만 처리하며, 주된 역할은 Fragment의 색상을 결정하는 것임. Fragment는 화면의 특정 픽셀을 채우기 위해 필요한 정보를 가리킴. 코드 작성에서 Vertex Shader와의 가장 큰 차이점은 데이터를 저장할 기본 변수가 없어서 직접 변수를 만들어야 함. GPU로 하여금 특정 대상을 그리게 하는 명령을 드로우콜(Draw Call)이라고 함. 특정 Shader를 사용하여 메쉬를 렌더링하려면, 그 메쉬의 DrawCall을 보내기전에 어떤 Shader를 사용하는지 알려줘야 함. 이 과정을 Shader Binding이라고 함. Fragment 보간 Fragment들은 Vertex 사이에 존재하기때문에 GPU는 ..

Technical/Shader 2021.03.01

Vertex Shader

Vertex Shader 보통 C++ 파일이 아닌 .vert라는 확장자를 가진 별도의 파일에 저장함. Shader도 다른 에셋들과 마찬가지로 Runtime으로 불러오기 때문에 메쉬나 이미지 같은 에셋이 있는 디렉토리에 저장함. OpenFrameworks에서 에셋 디렉토리는 bin/data 폴더를 사용함. Vertex Shader는 한번에 하나의 Vertex만을 처리하며, 직접 데이터를 주지 않는 이상 다른 Vertex에 대한 정보를 가지고 있지 않다. in 키워드는 앞 단계에서 전달 받을 데이터가 무엇인지 구체적으로 명시 할 때 사용. Out 키워드는 다음 단계로 전달할 변수를 선언 할 때 사용. Vertex Shader 앞 단계에서는 GPU가 메쉬 데이터를 Vetex Shader를 비롯한 이후 파이프라..

Technical/Shader 2021.03.01

Shader

그래픽 카드에서 실행되는 프로그램 Shader만 할 수 있는 일 중에 가장 중요한 것은 렌더링 파이프라인을 제어하는 것. 렌더링 파이프라인의 많은 부분은 렌더링하는 대상과 무관하게 그대로 유지 됨. 그러나, Shader를 통해서 파이프라인의 주요 공정을 제어함으로써 게임이나 기타 환경에서 필요로하는 모습을 만들 수 있음. Shader는 작동하는 단계에 따라서 각각 다른 이름으로 불림. 우리가 주목해야 할 대상은 Vertex Shader와 Fragment Shader임.

Technical/Shader 2021.03.01