
0. 기하학적 디테일의 동적 생성과 테셀레이션 (Dynamic Geometry Detail)
Tessellation은 단순한 삼각형을 더 작고 상세한 여러 개의 삼각형으로 분할하는 과정입니다.(선택적으로 해당 단계를 페스할 수 있습니다.)
이전에는 CPU에서 미리 정교한 모델을 만들어 보내야 했지만, 이제는 GPU에서 실시간으로 정점을 생성하여 LOD(Level of Detail)를 극대화할 수 있습니다.
1. Hull Shader : 제어점과 분할 계획 (Programmable)
테셀레이션의 첫 번째 관문인 Hull Shader는 Vertex Shader로부터 받은 정점(Control Points)을 어떻게 쪼갤지 결정합니다.
- Control Points Out : 입력받은 정점을 바탕으로 새로운 패치(Patch)를 구성하는 제어점을 출력합니다.
- Tessellation Factor : "이 삼각형을 얼마나 잘게 쪼갤 것인가?"에 대한 수치를 결정합니다. 예를 들어, 카메라와 가까운 물체는 높은 수치를, 먼 물체는 낮은 수치를 부여하여 성능을 최적화합니다.
2. Tessellator : 실제 분할의 실행 (Fixed-Function)
이 단계는 개발자가 직접 코딩하는 것이 아니라, GPU 하드웨어가 담당하는 고정 기능 단계입니다.
- Mechanism : Hull Shader에서 넘겨준 Tessellation Factor를 바탕으로, 실제 수학적인 계산을 통해 기하학적 구조를 작은 단위(점, 선, 삼각형)로 쪼갭니다.
- Domain : 이 단계에서는 아직 실제 3D 좌표를 가진 정점이 아니라, 추상적인 좌표(U, V) 형태의 정점들을 생성합니다.
3. Domain Shader : 새로운 정점의 탄생 (Programmable)
마지막으로 Domain Shader는 Tessellator가 쪼개놓은 추상적인 좌표들에 실제 3D 위치를 부여합니다.
- Positioning : Hull Shader의 제어점 정보와 Tessellator의 분할 좌표를 결합하여 최종적인 Clip Space 좌표를 계산합니다.
- Displacement Mapping : 단순히 면만 쪼개는 것이 아니라, Height Map (높이 맵) 정보를 사용하여 정점을 실제로 위아래로 움직임으로써 울퉁불퉁한 표면 디테일을 물리적으로 구현합니다.
4. 게임 클라이언트 개발자 관점의 포인트 (Optimization)
테셀레이션은 강력하지만 자원을 많이 소모하기 때문에 전략적인 접근이 필요합니다.
- Memory Bandwidth vs GPU Compute : 고해상도 모델을 처음부터 메모리에서 읽어오는 것보다, 저해상도 모델을 보내고 GPU에서 직접 쪼개는 것이 Memory Bandwidth 측면에서 훨씬 유리할 수 있습니다.
- Adaptive Tessellation : 거리에 따라 동적으로 Tessellation Factor를 조절하는 로직을 작성하여, 불필요한 연산을 줄이는 것이 최적화의 핵심입니다.
- Visual Quality : 단순히 부드럽게 만드는 것을 넘어, Displacement Mapping을 통해 실감 나는 지형이나 갑옷의 질감을 표현할 때 주로 사용됩니다.
5. 핵심 요약 및 시사점
Tessellation은 GPU 내부에서 정점을 "창조"하는 단계입니다.
- Hull Shader : 쪼갤 계획을 세웁니다 (Tessellation Factor).
- Tessellator : 하드웨어가 실제로 면을 분할합니다.
- Domain Shader : 쪼개진 점들에 실제 높이와 위치를 부여합니다 (Displacement Mapping).
'CS > 그래픽스' 카테고리의 다른 글
| [Rendering Pipeline] Stage 5 : Rasterization (0) | 2025.12.25 |
|---|---|
| [Rendering Pipeline] Stage 4 : Geometry Shader (0) | 2025.12.25 |
| [Rendering Pipeline] Stage 2 : Vertex Shader (0) | 2025.12.25 |
| [Rendering Pipeline] Stage 1 : Input Assembly (0) | 2025.12.25 |
| [Rendering Pipeline] Stage 0 : Vertex/index Buffer Preparation(Application Stage) (0) | 2025.12.25 |