Graphics pipeline
graphics pipeline의 두가지 역할
- 스크린은 사실상 2D 픽셀이므로 개발자가 input으로 넣은 3D 좌표를 2D 픽셀로 변환하는 작업
- 변환한 2D 좌표에 rgb(255,255,255) 색을 넣는 작업
결과적으로 그래픽파이프라인은 3D좌표를 2D픽셀로 만드는 작업을 말합니다. 그래픽 파이프라인의 각 단계에서 GPU 위에 작은 프로그램들을 실행시킴으로써 데이터를 빠르게 처리하기 위해 수천개의 작은 프로세싱 코어를 가지고 있습니다. 이 작은 프로그램들이라는 것은 shaders라고 합니다.
기본 쉐이더도 있지만 Vertex shader, Geometry shader, Fragment shader 다음에는 개발자가 GLSL로 작성한 쉐이더를 직접 주입할 수 있습니다.
조작 가능한 3가지 Shader
각 파이프 라인은 우리가 알고 있는 파이프라인 개념과 다르지 않습니다. 각 파이프라인의 return 값은 다음 파이프라인의 input입니다. 따라서, 각 파이프라인의 입력과 출력의 타입이 중요합니다.
- 저장된 버퍼에서 원시 Vertex 데이터를 수집하고, Index 버퍼를 이용하여 Vertex의 복제나 중복을 막습니다.
1. Vertex Shader (3D좌표 -> 3D좌표)
Vertex Shader는 opengl에게 좌표(Vertex) 리스트와 그 좌표를 어떤 식으로 그릴지를 알려줘야 합니다.
- input
1. 3D 좌표 리스트(각 좌표는 위치값
과 색상값
을 가지고 있음)
2. primitives
GL_POINTS - 점을 그려라
GL_TRIANGLES - 삼각형을 그려라
GL_LINE_STRIP - 하나의 긴 선을 그려라)
- output:
1. 3D 좌표
2. Geometry Shader
- Vertex Shader에서 받은 정점 리스트와 Primitives를 이용해 vertex를 증감시켜 새로운 도형을 만듭니다. Vertex Shader에서 기본적으로 도형을 완성해 오지만 생성된 도형에서 추가로 없는 것을 그릴 수 있습니다.
3. Rasterization
- Vertex Shader와 Geometery Shader를 지난 도형이 픽셀로 변경되는 것을 말함
- Vertex 사이에 공간을 보간작업을 통해 알맞은 픽셀을 표시
- 여기서 색이 정해지지는 않음
4. Fragment Shader
- Rasterization에서 그려진 픽셀에 색을 부여하는 단계
- Vertex Shader에 보간된 데이터를 통해 색을 표현하거나, 텍스트 좌표(UV), Normal Mapping 등을 이용