
0. 공간 변환과 정점 단위 연산의 프로그래밍 (Space Transformation & Programmable Vertex Processing)
Vertex Shader는 Input Assembly 단계에서 조립된 정점(Vertex)들을 하나씩 넘겨받아 처리하는 단계입니다.
이 단계의 가장 큰 특징은 개발자가 직접 HLSL이나 GLSL 같은 쉐이더 언어로 로직을 작성할 수 있는 Programmable Stage라는 점입니다.
1. Viewing Pipeline : 3D 월드에서 화면으로의 6단계 여정


버텍스 쉐이더의 가장 핵심적인 임무는 로컬 좌표계에 있는 정점을 화면에 그려질 수 있는 2D 좌표로 변환하는 것입니다.
버텍스 쉐이더는 단순히 위치만 옮기는 것이 아니라, 효율적인 렌더링을 위해 정교한 Viewing Pipeline 과정을 거칩니다.
3D 월드에서 화면으로의 6단계 여정 버텍스 쉐이더는 단순히 위치만 옮기는 것이 아니라, 효율적인 렌더링을 위해 정교한 Viewing Pipeline 과정을 거칩니다.
- Step 1. Model Space : 모델링 툴에서 제작된 오브젝트 고유의 좌표계입니다.
- Step 2. World Space : 전체 게임 월드 내에서의 절대적인 위치와 회전을 정의합니다.
- Step 3. View Space (Camera Space) : 카메라를 중심으로 모든 오브젝트를 재배치합니다. 거리 기반의 연산이 용이해지는 단계입니다.
- Step 4. Pre-lighting (Vertex Lighting) : 핵심 단계입니다. 픽셀 단위 조명(Per-Pixel Lighting)은 연산량이 매우 많으므로, 상대적으로 적은 수의 정점 단계에서 조명을 미리 계산하여 효율을 극대화합니다.
- Step 5. NDC (Normalized Device Coordinates) & Clipping : 투영(Projection) 행렬을 통해 3D 데이터를 2D 평면으로 압축하고, 좌표를 -1 ~ 1 사이로 정규화합니다. 이 과정에서 화면 밖의 정점을 잘라내는 Clipping이 동시에 수행됩니다.
- Step 6. Screen Space : 정규화된 좌표를 실제 모니터 해상도(Pixel Unit)에 맞게 매핑합니다.
2. 정점 기반의 추가 연산 : 동적인 움직임 구현
위치 변환 외에도 버텍스 쉐이더에서는 정점 하나하나를 직접 제어하여 다양한 시각 효과를 만들어냅니다.
- Vertex Animation : 정점의 위치값을 시간에 따라 변하게 하여 깃발이 흔들리거나 파도가 치는 효과를 CPU 연산 없이 GPU에서 빠르게 처리합니다.
- Skeletal Animation (Skinning) : 캐릭터의 뼈대(Bone) 가중치에 따라 정점을 이동시켜 애니메이션을 구현합니다.
- Vertex Coloring : 정점 데이터에 포함된 컬러 값을 가공하여 최종 결과물에 반영합니다.
3. 병렬 처리와 독립성 : Parallel Processing
GPU는 수천 개의 작은 코어로 이루어져 있습니다. 버텍스 쉐이더는 이 구조를 극한으로 활용합니다.
- Massive Parallelism : 각 정점은 서로에게 영향을 주지 않고 Independent(독립적)하게 계산됩니다. 0번 정점을 계산하는 코어는 1번 정점이 어디로 가는지 알 필요가 없습니다.
- Throughput : 이러한 병렬 구조 덕분에 초당 수천만 개의 정점을 실시간으로 변환할 수 있습니다.
4. 게임 클라이언트 개발자 관점의 포인트 (Optimization)
실시간 환경에서 버텍스 쉐이더의 부하를 줄이는 것은 프레임 유지의 핵심입니다.
- Instruction Count : 쉐이더 코드 내의 연산 개수를 최소화해야 합니다. 특히 sin, cos, pow 같은 무거운 수학 연산은 신중히 사용해야 합니다.
- Uniform vs Attribute : 모든 정점에 공통으로 적용되는 값(예 : 빛의 위치)은 Uniform 변수로 전달하여 불필요한 중복 계산을 막아야 합니다.
- Position-Only Pass : 그림자 맵 생성 등 색상 정보가 필요 없는 경우에는 위치값만 계산하는 가벼운 버텍스 쉐이더를 사용하여 연산 효율을 높입니다.
5. 핵심 요약 및 시사점
Vertex Shader는 정점들에게 "너는 화면 어디에 찍혀야 하고, 어떤 속성을 가지고 있는가"를 부여하는 단계입니다.
- Space Transformation : MVP 행렬을 통한 공간 변환이 주 목적입니다.
- Programmability : 개발자가 직접 로직을 제어할 수 있는 첫 번째 구간입니다.
- GPU Parallelism : 수많은 정점을 동시에 처리하여 압도적인 속도를 냅니다.
'CS > 그래픽스' 카테고리의 다른 글
| [Rendering Pipeline] Stage 4 : Geometry Shader (0) | 2025.12.25 |
|---|---|
| [Rendering Pipeline] Stage 3 : Tessellation (Hull Shader, Tessellator, Domain 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 |
| Anti-Aliasing (0) | 2025.11.11 |