'Vertex Processing' 단계는 Input Assembler 단계로부터 받은 정점 데이터(Primitive)의 3차원에 있는 점(Vertex)들을 2차원평면 상에 어느 위치에 해당하는지 계산하는 과정이다. DirectX 11 에서는 Vertex Processing 단계를 조금 더 세부적으로 나누었는데 아래와 같다.
- Vertex Shader
- Hull Shader
- Tessellation
- Domain Shader
- Geometry Shader
Vertex Shader
화면에 그려질 모든 Vertex(정점)는 'Vertex Shader'를 거쳐 간다. 변환, 조명, UV 매핑 등 수많은 특수 효과를 정점 셰이더에서 수행할 수 있으며, [Vertex Shader] 에서 흔히 수행하는 변환들은 다음과 같다.
- World Transform
- View Transform
- Projection Transform
- ....
[World Transform]
렌더링 파이프라인에서 3차원 모델을 표현하고 위치시키는 데에는 2가지 좌표 공간이 사용된다.
- [Local Space] : 3차원 모델이 구성되는 좌표 공간이다.
'Local Space' 의 원점 (0,0,0)은 3차원 모델의 중심이다. - [World Space] : 3차원 모델이 배치되는 가상세계의 좌표 공간이다.
'World Space' 의 원점 (0,0,0)은 가상세계의 중심이다.
[World Transform] 은 'Local Space' 에서 정의된 3차원 모델을 'World Space' 로 변환하는 과정으로 가상세계에 배치된 모든 3차원 모델의 좌표가 동일한 좌표계를 기준으로 변환된다. 이 과정에서 이동(Translate), 회전(Rotate), 크기(Scale) 변환이 행렬을 통해 이루어 지며 이를 하나의 행렬로 나타내면 아래와 같다.
가상 세계에 배치된 모든 3차원 모델의 좌표를 통일시키면, 모든 객체의 위치, 크기, 방향이 통일된 기준에서 정의되기 때문에 이후 적용될 변환에서 유리하게 작용한다.
- 행렬 변환의 연속적 적용
객체의 변환 연산을 단순화한다. 통일된 좌표계를 사용할 경우, 객체의 변환(이동, 회전, 크기 조정)을 각각 독립적으로 적용하는 것이 아니라 하나의 행렬로 조합하여 변환 연산을 단순화할 수 있다. - 연산의 단순화
각종 연산(충돌 감지, 거리 계산 등)을 일관된 기준에서 수행하는 것은 연산을 간단하게 만들고, 디버깅을 용이하게 한다.
예를 들면 하나의 행렬로 조합하여 계산할 경우 각 변환을 독립적으로 처리하는 것보다 효율적이며, 충 돌 감시 연산은 객체의 위치를 변환할 필요 없이 직접 비교할 수 있어 충돌 여부를 판단하는 연산이 단순해진다.

[View Transform]
우리가 3차원 가상 세계를 볼 수 있는 이유는 3차원 가상 세계를 비추는 가상의 카메라가 있기 때문이다.
[View Space] 는 가상의 카메라의 부여된 'Local Space' 로 'View Space' 의 원점은 가상의 카메라에 중심이 된다. 그 카메라의 위치와 방향을 설명함으로써 가상 세계에서 관찰자가 볼 수 있는 영역, 즉 2차원 이미지를 생성해야 하는 영역인 [View Space] 를 결정한다.
[View Transform] 은 'World Space' 에서 화면에 표시 할 2차원 이미지인 'View Space' 로 변환하는 과정으로 가상 세계에 배치된 모든 정점의 좌표가 가상의 카메라를 기준으로 변환된다.

[Projection Transform]
[World Transform] 변환으로 3차원 가상 세계를 구성하고 [View Transform] 변환으로 가상의 카메라의 위치와 방향을 설명했다. 가상의 카메라를 서술하는 요소가 하나 더 남았는데 카메라가 볼 수 있는 영역이다.
클리핑(Clipping)은 컴퓨터 그래픽스에서 장면을 렌더링할 때, 화면에 보이는 부분만을 계산하고 그려내는 과정이다. 뷰 볼륨(View Volume) 또는 클리핑 영역(Clipping Region)이라 불리는 카메라가 볼 수 있는 영역 내에 있는 객체들만을 선택적으로 렌더링하는 것을 의한다. 뷰 볼륨은 다음과 같은 뷰 볼륨의 경계를 정의하는 6개의 클리핑 평면(Clipping Planes)으로 정의된다.
- 근 평면(Near Plane) :
- 원 평면(Far Plane) :
- 옆 평면(Side Planes) : 가상의 스크린 경계를 나타낸다
[Projection Transform] 은

Tesselation
[Tesselation] 단계는 한 메시의 삼각형들을 더 잘게 쪼개서 새로운 삼각형을 만드는 과정이다.
[Tesselation] 단계의 예시는 아래와 같다.
| OLD(Level Of Detail) | 카메라에 가까운 삼격형들에는 Tesselation 을 적용해서 세부도를 높이고, 먼 삼각형들에는 적용하지 않는 방식은 OLD 매커니즘을 구현할 수 있다. (최적화) |
| 메모리 절약 | 메모리에는 Low-Poly 메시, 즉 적은 수의 삼각형들로 이루어진 메시를 담아두고 즉석에서 삼각형들을 추가함으로써 메모리를 적용할 수 있다. |
| 계산량 감소 | 애니메이션이나 물리 처리 같은 연산들은 단순한 Low-Poly 메시에 대해 수행하고, Tesselation 된 High-Ploy 매시는 렌더링에만 사용함으로써 계산량을 줄일 수 있다. |
Geometry Shader
[Geometry Shader] 단계는 온전한 기본도형(Primitive) 를 입력받아 생성되지 않은 임의의 정점을 추가하거나 삭제하여 변형하는 과정이다.
'DirectX' 카테고리의 다른 글
| [Computer Graphics] 렌더링 파이프라인 - Rasterization (0) | 2024.04.10 |
|---|---|
| [Computer Graphics] 렌더링 파이프라인 - Input Assembler (0) | 2024.04.09 |