Swap Chain
: 렌더링된 내용물을 창에 표시하는데 쓰이는 실제 버퍼들을 추상화한 것
렌더링 파이프라인
- 입력 조립기 (Input Assembler)
- 정점 셰이더 (Vertex Shader)
- 덮개 셰이더 (Hull Shader)
- 테셀레이터 (Tessellator)
- 영역 셰이더 (Domain Shader)
- 기하 셰이더 (Geometry Shader)
- 래스터라이저 (Rasterizer)
- 픽셀 셰이더 (Pixel Shader)
- 출력 병합기 (Output Merger)
1. 입력 조립기 (Input Assembler)
: 자원들로부터 입력 자료를 읽어 들여서 파이프라인의 이후 단계들이 사용할 정점들을 긁어모으는 작업을 담당한다. 취합한 정점들과 기본도형(Primitive) 연결성 정보를 다음 단계로 넘겨준다.
2. 정점 셰이더 (Vertex Shader)
: 입력 조립기가 넘겨준 정점 자료의 정점들을 한번에 하나씩 처리한다. 새로운 정점을 생성하거나 기존 정점을 삭제하지 못하고 모든 정점은 독릭접으로 처리된다. 정점 셰이더의 한 실행은 다른 실행의 정보에 접근하지 못한다.
테셀레이션(Tessellation) 단계
3. 덮개 셰이더 (Hull Shader)
: 각 기본도형마다 실행되는 것으로, 기본 도형에 대한 일단의 테셀레이션 계수들을 결정한다. 이 계수들은 이후 과정에서 해당 기본도형을 얼마나 세밀하게 분할해야 하는지 파악하는데 쓰인다. 바람직한 출력 제어 패치 구성이 각 제어점마다 실행되기 위해, 이후 Domain 셰이더 단계에서 기본도형을 실제로 분할하는데 사용할 제어점 (Control Point)들을 만들어낸다.
4. 테셀레이더 (Tessellator)
: 현재 기본도형 종류에 적합한 Sampling Pattern을 결정한다. 테셀레이션 계수들과 자기 자신의 구성을 이용해서 현재 기본도형의 정점들 중 기본도형을 더 작은 조각으로 분할하기 위한 표본으로 사용할 정점들을 결정한다. 그 정점들로부터 산출한 무게중심 좌표들을 Domain 셰이더에 넘긴다.
5. 영역 셰이더 (Domain Shader)
: 무게중심 좌표 (Barycentric Coordinates)들과 덮개 셰이더가 생성한 제어점들을 입력으로 받아서 새 정점들을 생성한다. 현재 기본도형에 대해 생성된 제어점들 전체와 텍스처, 절차적 알고리즘 등을 이용해서, 테셀레이션된 각 점마다 무게중심 '위치'들을 출력 기하구조(Geometry)로 변환해서 다음 단계로 넘겨준다.
6. 기하 셰이더 (Gemotry Shader)
: 완성된 형태의 기본도형들을 처리하거나 생성한다. 새로운 자료 요소를 추가하거나 제거할 수 있다. 또 처리된 기하구조를 파이프라인 바깥의 버퍼 자원으로 보낼 수 있는 분기점이기도 하다. 스트림 출력 단계가 이 버퍼 출력을 담당한다. 이 단계가 끝나면 기하구조가 래스터화되어서 단편 수준에서 처리된다.
단편 (Fragment) : 렌더 타겟의 한 픽셀에 해당하는 자료 집합
7. 래스터화기 (Rasterizer)
: 주어진 기하구조가 렌더 타겟의 어떤 픽셀들을 덮는지 파악해서 그 픽셀들에 대한 단편 자료를 산출한다. 각 단편은 모든 정점별(Per-vertex) 특성을 해당 픽셀 위치에 맞게 보간한 값들을 가진다. 또 각 단편의 깊이 값도 결정한다
8.. 픽셀 셰이더 (Pixel Shader)
: 파이프라인에 연결된 각 렌더 타겟을 위한 색상 값을 출력한다. 여러 텍스처에서 Sampling하거나 주어진 단편의 특성 값들로 계산을 수행한다.
9.. 출력 병합기 (Output Merger)
: 픽셀 셰이더 출력을 파이프라인에 연결된 Depth/Stencil View 및 Render Target View에 합치는 작업을 담당한다. 깊이 판정과 스텐실 판정, 혼합 함수적용 등을 수행하고, 출력을 해당 지원에 실제로 기록한다.
'프로그래밍 > DirectX' 카테고리의 다른 글
DirectX 11 기초 (0) | 2019.03.28 |
---|---|
3D 애니메이션 이론 2 (0) | 2019.03.26 |
3D Animation 이론 1 (0) | 2019.03.22 |
Rasterizer (0) | 2019.03.04 |
Light / Rendering (0) | 2019.02.28 |