본문 바로가기

프로그래밍/DirectX

Directx11 렌더링 파이프라인

Swap Chain
 : 렌더링된 내용물을 창에 표시하는데 쓰이는 실제 버퍼들을 추상화한 것

렌더링 파이프라인

  1. 입력 조립기 (Input Assembler)
  2. 정점 셰이더 (Vertex Shader)
  3. 덮개 셰이더 (Hull Shader)
  4. 테셀레이터 (Tessellator)
  5. 영역 셰이더 (Domain Shader)
  6. 기하 셰이더 (Geometry Shader)
  7. 래스터라이저 (Rasterizer)
  8. 픽셀 셰이더 (Pixel Shader)
  9. 출력 병합기 (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