1. 개요

테셀레이터(T)는 헐 셰이더(HS)와 도메인 셰이더(DS) 사이에 위치하는 하드웨어 스테이지.
테셀레이션 3단계(HS-T-DS) 중 유일하게 프로그래밍이 불가능한 고정 기능(Fixed-Function) 하드웨어 유닛이다.
즉, 개발자가 셰이더 코드를 작성할 수 없으며, 하드웨어가 정해진 작업만 수행합니다.
이 스테이지의 유일한 목적은 헐 셰이더로부터 받은 Patch Constant Data에 따라, 원본 패치(Patch)를 기계적으로 잘게 나누어(Tessellate) 새로운 정점들을 생성하는 것입니다.
TS(분할기) 단계에서는 기하 도형 패치를 나타내는 도메인의 샘플링 패턴을 만들고, 이러한 샘플을 연결하는 더 작은 개체(삼각형, 점 또는 선)의 집합을 생성합니다.
2. 핵심 역할 및 작동 방식
2.1. 입력 (Input)
- From 헐 셰이더 (HS): Patch Constant Data .
- Patch Constant Data에는 테셀레이터가 작업을 수행하는 데 필요한 모든 설정과 수치가 포함되어 있다.
- 테셀레이션 팩터 (Tessellation Factors): "얼마나" 잘게 쪼갤지 (예: Edge=8, Inside=6).
- 테셀레이터 설정 (Tessellator State): "어떻게" 쪼갤지 (예: Partitioning=integer, Domain=triangle).
2.2. 처리 (Process)
- 테셀레이터는 프로그래밍 로직 없이, 오직 입력받은 Patch Constant Data의 값들을 읽고 그대로 실행한다.
- 팩터 값에 맞춰 원본 패치(삼각형 또는 사각형)를 기하학적으로 분할한다.
- 설정된 분할 방식에 따라 수백, 수천 개의 새로운 정점을 생성한다.
2.3. 출력 (Output)
- To 도메인 셰이더 (DS): 생성된 새 정점들의 좌표 (Domain Coordinates).

3. 중요: 출력되는 '좌표'의 의미

테셀레이터는 3D 공간(월드, 뷰 공간 등)에 대해 알지 못한다. 이 단계에서 생성된 '새 정점'의 좌표는 3D 위치(x,y,z)가 아니라, "원본 패치의 어느 상대적인 위치에 찍힌 점인가?"를 나타내는 도메인 좌표(Domain Coordinate)를 생성한다.

- 삼각형 패치 (Tri-domain): (u, v, w) 형태의 무게 중심 좌표(Barycentric Coordinates)를 출력한다.
- (1, 0, 0) = 원본 꼭짓점 A
- (0.5, 0.5, 0) = A와 B의 정확한 중간 지점
- 사각형 패치 (Quad-domain): (u, v) 형태의 UV 좌표를 출력합니다.
- (0, 0) = 원본 꼭짓점 A
- (1, 1) = 원본 꼭짓점 C
- (0.5, 0.5) = 패치의 정중앙
이 상대 좌표 값들이 다음 단계인 도메인 셰이더로 전달되어, 실제 3D 위치로 변환된다.
'그래픽스' 카테고리의 다른 글
| 06. Geometry Shader (0) | 2025.11.04 |
|---|---|
| 05. Domain Shader (0) | 2025.11.04 |
| 03. Hull Shader (0) | 2025.11.04 |
| 02. Vertex Shader (0) | 2025.11.04 |
| 01. Input Assembler (0) | 2025.11.04 |