가상 카메라에 비친 3차원 장면의 모습에 근거해서 2차원 이미지를 생성하는 데 필요한 일련의 단계들.
- GPU에서 어떤 단계들을 거쳐서 최종적으로 화면에 출력하는지에 대한 파이프라인이며 꼭 알아둬야한다.
- 기본적으로 이후에 해당 단계들을 구현하면서 자세히 알아볼것이기 때문에 대략적인 흐름만 설명한다.
입력 조립기(Input Assembler)
정점 셰이더(Vertex Shader)
- 입력조립기에서 조립이 완료된 기본 도형들의 정점들을 입력받는다.
- 입력받은 정점들을 가지고 작업하는 곳이며, 다시 정점을 반환한다.
- 좌표계 변환, 조명 등등의 효과를 줄 수 있다. (이후에 나옴)
- 픽셀 셰이더는 픽셀 하나하나에 대한 연산으로 연산량이 많으므로 가능한 정점 셰이더에서 처리해 주는것이 성능에 좋다.
덮개 셰이더(Hull Shader)
- 테셀레이션의 첫번째 단계이며, Vertex Shader에서 넘겨준 기본 도형들에 아래의 작업들을 수행한다.
- 각 기본도형마다 테셀레이션 계수를 결정.
- 테셀레이션 계수는 이후 과정에서 해당 기본도형이 얼마나 세밀하게 분할하는지 파악하는데 사용.
- 바람직한 출력 제어 패치 구성의 각 제어점마다 실행되는 것으로, Domain Shader단계에서 기본도형을 실제로 분할하는 데 사용할 점들을 알아낸다.
테셀레이션(Tessellation) 단계들
- Hull Shader, Tessellator, Domain Shader의 단계들이 테셀레이션을 위한 단계들이다.
- 주어진 메시의 삼각형들을 더 잘개 쪼개서 새로운 삼각형들을 만든다.
- 실제 메시가 늘어나는 LOD효과를 낼 수 있다.
- Low-Poly를 사용해서 런타임에 High-Poly로 만듬으로서 메모리를 절약할 수 있다.
- 애니메이션 혹은 물리 처리같은 연산을 Low-Poly Mesh들에 적용하고 High-Poly는 랜더링에만 사용해서 계산량을 줄일 수 있다.
기하 셰이더(Geometry Shader)
- 온전한 기본도형을 입력받아서 여러 개의 기하구조들도 확장하거나 파괴할 수 있다.
- 핵심은, GPU상에서 기하구조를 생성 혹은 파괴할 수 있다.
- 주로 파티클같이 입자가 많은경우에 유용하게 사용된다.
절단(Clipping)
레스터화 단계(Rasterizer Stage)