1. 개요

도메인 셰이더(DS)는 테셀레이션 파이프라인(HS-T-DS)의 마지막 프로그래밍 가능(Programmable) 스테이지.
테셀레이터(T)가 생성한 수많은 '새로운 정점'들을 입력받아, 이 정점들의 최종 3D 위치를 계산한다.
세분화된 지점의 꼭지점과 각 도메인 샘플에 해당하는 꼭지점 위치를 계산한다.
2. 핵심 역할: 최종 정점 위치 계산
DS의 핵심 임무는 테셀레이터가 생성한 '상대 좌표'를 '최종 3D 위치'로 바꾸는 것이며, 이 과정은 크게 세 단계이다.
2.1. 위치 보간 (Position Interpolation)
- DS는 두 가지 데이터를 입력받는다.
- From 테셀레이터: "새 정점의 상대 좌표" (예: (u,v,w) = (0.5, 0.5, 0))
- From 헐 셰이더: "원본 제어점(Control Points)" (예: 원본 삼각형 꼭짓점 3개), Patch Constant Data, Tessellation Factor
- DS는 이 두 정보를 조합하여, 새 정점이 원본 패치 표면의 어디에 위치하는지 '기본 3D 위치'를 계산(보간)한다. (예: 꼭짓점 A와 B의 정확히 중간 지점)
2.2. 디스플레이스먼트 매핑 (Displacement Mapping)

- DS는 방금 계산한 '기본 3D 위치'를 기반으로, '높이 맵(Height Map)' 또는 '디스플레이스먼트 맵' 텍스처를 조회한다.
- 맵에서 읽어온 값(예: 0.0 ~ 1.0 사이의 흑백 값)을 사용하여, 정점의 위치를 법선(Normal) 방향(바깥쪽)으로 '실제로' 밀어낸다.(Displace).
- 이 작업을 통해, 평평했던 저(Low)폴리곤 표면이 정교하고 울퉁불퉁한 고(High)폴리곤 표면(예: 돌담, 지형, 주름)이 완성된다.
2.3. 최종 좌표 변환 (Final Coordinate Transformation)
- 이제 DS는 '실제로 그려질' 정점의 최종 3D 위치를 아는 유일한 스테이지.
- 따라서 (테셀레이션이 꺼졌을 때) 정점 셰이더(VS)가 하던 일을 여기서 수행해야 한다.
- DS는 이 최종 3D 위치에 WVP(World-View-Projection) 행렬을 곱하여, 래스터라이저(RS)가 사용할 최종 클립 공간 좌표(SV_Position)를 계산한다.
3. 입력과 출력
3.1. 입력 (Input)
- From 테셀레이터 (T):
- 도메인 좌표 (Domain Coordinates): (u,v,w) 또는 (u,v). (필수)
- From 헐 셰이더 (HS):
- 패치 제어점 (Patch Control Points): 위치 보간의 기준이 되는 '원본 찰흙'.
- 패치 상수 데이터 (Patch Constant Data): 헐 셰이더가 DS에게 전달하고 싶은 추가 데이터 (선택 사항).
- 테셀레이션 팩터 (Tessellation Factors, 공간 분할 요소)
- From 메모리 (Memory):
- 디스플레이스먼트 맵 (Displacement Map): 정점 변위를 위한 텍스처.
- 상수 버퍼 (Constant Buffers): WVP 행렬 등.
3.2. 출력 (Output)
- To 래스터라이저 (RS):
- SV_Position (필수): 최종 클립 공간 좌표.
- 기타 정점 데이터: 픽셀 셰이더(PS)가 사용할 데이터 (예: UV 좌표, 보간된 법선 벡터 등).
4. Displacement Mapping vs Normal Mapping
1. 노멀 매핑 (Normal Mapping)
- 원리: 시각적 환상(Illusory Detail)을 통해 표면의 굴곡을 모방. 이는 실제 지오메트리를 수정하지 않는 셰이딩(Shading) 기법.
- 작동 파이프라인: 픽셀 셰이더 (Pixel Shader, PS)
- 메커니즘:
- 노멀 맵(Normal Map) 텍스처를 사용하여, 픽셀 단위로 표면의 법선 벡터(Normal Vector)를 교란(perturb) 시킨다.
- 원본 지오메트리의 법선 대신, 텍스처에서 읽어온 법선을 광원 계산에 사용하여 빛의 반사를 조작한다.
- 결과: 평면(Flat) 지오메트리 위에서도 고주파(high-frequency) 디테일이 있어 보이게 한다. (예: 미세한 흠집, 모공, 가죽 질감)
- 한계:
- 지오메트리 자체가 변경되지 않으므로, 실루엣(Silhouette)이나 외곽선은 평평하게 유지.
- 시야각에 따른 시차(Parallax) 효과나 자체 그림자(Self-Shadowing)를 정확히 표현할 수 없다.
- 성능 비용: 낮음 (Low Cost). 픽셀 셰이더에서의 텍스처 조회 1회 및 광원 계산 수정만 필요하여 연산 부하가 적다.
2. 디스플레이스먼트 매핑 (Displacement Mapping)
- 원리: 실제 기하학적 변위(Geometric Displacement)를 통해 표면의 굴곡을 생성.
- 작동 파이프라인: 도메인 셰이더 (Domain Shader, DS)
- 메커니즘:
- 하드웨어 테셀레이션(HS-T-DS) 파이프라인이 필요.
- 테셀레이터(T)가 저해상도 패치(Patch)를 고밀도 메시(High-density Mesh)로 동적 세분화(Subdivide)한다.
- 도메인 셰이더(DS)가 세분화된 각 정점을 입력받아, 높이 맵(Height Map) 텍스처를 샘플링한다.
- 맵의 스칼라(Scalar) 값(높이 값)을 기반으로, 정점의 위치를 법선 방향으로 실제 변위(Displace)시킨다.
- 결과:
- 모델의 지오메트리 자체가 물리적으로 변경된다.
- 실루엣이 굴곡에 맞게 정확하게 변형됩니다.
- 시차 효과, 자체 그림자, 가려짐(Occlusion) 등이 물리적으로 올바르게 표현된다. (예: 벽돌, 지형, 거친 암석)
- 성능 비용: 높음 (High Cost). 실시간 테셀레이션 및 수많은 정점 처리에 대한 연산 부하가 매우 크다.
5. 요약
도메인 셰이더는 테셀레이션 파이프라인의 마지막 단계. 테셀레이터가 생성한 수많은 점(좌표)들을 입력받아, 원본 제어점을 기준으로 보간하고 디스플레이스먼트 맵을 적용한뒤, 이 정점들을 최종 화면 좌표로 변환하여 RS에 넘긴다.
'그래픽스' 카테고리의 다른 글
| 07. Rasterizer (0) | 2025.11.04 |
|---|---|
| 06. Geometry Shader (0) | 2025.11.04 |
| 04. Tessellator (0) | 2025.11.04 |
| 03. Hull Shader (0) | 2025.11.04 |
| 02. Vertex Shader (0) | 2025.11.04 |