
0. 기하학적 형상에서 프레그먼트로의 변환 (Converting Geometry to Fragment)

Rasterization 단계는 이전 단계들을 거쳐 완성된 3D 도형(삼각형 등)을 2차원 화면상의 Fragment 뭉치로 쪼개는 과정입니다.
이 단계는 하드웨어가 담당하는 고정 기능(Fixed-Function) 단계로, 매우 빠른 속도로 수행됩니다.
1. Clipping & Screen Mapping : 화면 밖 제거와 좌표 변환
본격적인 래스터화에 앞서, 화면에 보일 부분만 남기는 전처리 작업을 수행합니다.
- Clipping : 카메라의 가시 범위(Frustum) 경계에 걸쳐 있는 삼각형을 잘라냅니다. 화면 밖에 있는 부분은 버리고, 경계에 맞춰 새로운 정점을 생성하여 화면 안쪽만 남깁니다.
- Perspective Division : Clip Space 좌표를 NDC (Normalized Device Coordinates, -1 ~ 1 사이의 값)로 변환하여 원근감을 최종적으로 적용합니다.
- Screen Mapping : NDC 좌표를 실제 모니터 해상도 크기(예 : 1920x1080)의 픽셀 좌표로 변환합니다.
2. Back-face Culling : 불필요한 면 제거
래스터라이저가 픽셀을 채우기 전에 수행하는 아주 중요한 최적화 단계입니다.
- 메커니즘 : 삼각형의 정점 나열 순서(Winding Order)를 확인하여 카메라를 등지고 있는 뒷면(Back-face)인지 판단합니다.
- 효율성 : 뒷면으로 판명된 삼각형은 픽셀 계산을 시작하기도 전에 폐기됩니다. 이를 통해 연산량을 절반 가까이 줄일 수 있습니다.
3. Scan Conversion : 픽셀 점유 판정
이제 화면 좌표로 옮겨진 삼각형이 어떤 픽셀 칸을 차지하는지 결정합니다.
- Process : 삼각형 내부의 픽셀 중심점(Sample Point)이 삼각형 안에 포함되는지 검사합니다.
- Fragments : 이 과정을 통해 생성된 '픽셀 후보군'을 Fragment라고 부릅니다. 각 프래그먼트는 화면상의 위치 정보뿐만 아니라, 이후 연산에 필요한 데이터들을 가지고 있습니다.
4. Interpolation : 데이터 보간 (Varying)

정점(Vertex)에는 데이터가 있지만, 삼각형 내부의 Fragment에는 데이터가 없습니다. 래스터라이저는 정점의 데이터를 삼각형 면을 따라 부드럽게 채워줍니다.
- Barycentric Interpolation : 삼각형의 세 정점이 가진 데이터(UV, Color, Normal 등)를 픽셀의 위치에 맞춰 수학적으로 보간합니다.
- 결과 : 각 프래그먼트는 자신만의 고유한 UV 좌표나 법선 벡터 값을 가지게 되며, 이는 다음 단계인 프래그먼트 쉐이더의 입력값이 됩니다.
5. 게임 클라이언트 개발자 관점의 포인트 (Optimization)
래스터라이제이션 단계 자체는 하드웨어가 처리하지만, 개발자는 다음의 최적화 이슈를 관리해야 합니다.
- Overdraw : 같은 픽셀 위치에 여러 개의 삼각형이 겹쳐 있으면 래스터라이저가 중복된 프래그먼트를 대량으로 생성하게 됩니다. 이는 성능 저하의 주범이 됩니다.
- Sub-pixel Triangles : 삼각형이 너무 작아서 픽셀 하나보다 작아지면, 래스터라이저의 효율이 급격히 떨어집니다. 적절한 LOD (Level of Detail) 관리가 필요한 이유입니다.
- Fixed-Function Efficiency : 이 단계는 하드웨어 가속을 받으므로 매우 빠르지만, 너무 복잡한 기하 구조를 한꺼번에 넘기면 래스터라이저가 병목의 원인이 될 수 있습니다.
6. 핵심 요약 및 시사점
Rasterization은 3D 수학의 세계를 2D 디지털 이미지의 세계로 연결하는 가교 역할을 합니다.
- Scan Conversion : 삼각형을 픽셀 단위의 Fragment로 변환합니다.
- Interpolation : 정점의 데이터를 픽셀들에 골고루 나눠줍니다.
- Fixed-Function : 하드웨어 전용 회로에서 동작하는 초고속 단계입니다.
'CS > 그래픽스' 카테고리의 다른 글
| Rendering Pipeline] Stage 7 : Color Blending & Output Merger (0) | 2025.12.25 |
|---|---|
| [Rendering Pipeline] Stage 6 : Fragment Shader (0) | 2025.12.25 |
| [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 2 : Vertex Shader (0) | 2025.12.25 |