
0. 화면의 색상을 결정하는 빛과 질감의 연산 (Shading & Texturing)
Fragment Shader (DirectX에서는 Pixel Shader라고 함)는 래스터라이저를 통해 생성된 Fragment(픽셀 후보군) 하나하나의 최종 색상을 계산하는 단계입니다.
버텍스 쉐이더가 물체의 '형태'를 잡는다면, 프래그먼트 쉐이더는 그 위에 '색과 질감'을 입히는 역할을 합니다.
1. Fragment vs Pixel : 용어의 정의
많은 경우 픽셀 쉐이더와 혼용되지만, 엄밀히 말하면 이 단계의 결과물은 아직 '픽셀'이 아닙니다.
- Fragment : 화면의 특정 칸(픽셀)을 차지하기 위한 후보 데이터입니다.
- Process : 프래그먼트 쉐이더에서 색상이 계산된 후에도, 이후의 Color Blending이나 Depth Test에서 탈락할 수 있기 때문에 최종 확정 전까지는 Fragment라고 부르는 것이 정확합니다.
2. 주요 임무 : Lighting & Texturing

프래그먼트 쉐이더는 래스터라이저로부터 ★ 보간된(Interpolated) 데이터(UV, Normal, Color 등)를 받아 복잡한 수학 연산을 수행합니다.
- Texturing : 보간된 UV 좌표를 사용하여 Texture에서 색상 값(Texel)을 읽어옵니다.
- Lighting : 빛의 방향, 관찰자의 위치, 법선 벡터(Normal)를 이용해 Phong, Blinn-Phong 또는 최신 게임의 주류인 PBR (Physically Based Rendering) 연산을 수행합니다.
- Shadowing : 그림자 맵(Shadow Map) 등을 참조하여 해당 픽셀이 그림자 영역에 있는지 판단하고 어둡게 처리합니다.
3. Programmability : 무한한 시각 효과의 구현


이 단계는 개발자의 역량에 따라 표현력이 무궁무진해집니다.
- Normal Mapping : 실제 정점은 평평하지만, 픽셀마다 법선 벡터를 조작하여 울퉁불퉁한 표면 디테일을 눈속임으로 구현합니다.
- Post Processing Effects : 굴절(Refraction), 반사(Reflection), 글로우(Glow) 등 다양한 특수 효과를 픽셀 단위에서 제어합니다.
4. 게임 클라이언트 개발자 관점의 포인트 (Optimization)
프래그먼트 쉐이더는 보통 그래픽 파이프라인에서 가장 무거운 병목(Bottleneck) 지점이 됩니다. 이를 GPU Bound (Pixel Bound) 상황이라고 합니다.
- Overdraw Management : 화면의 같은 자리에 여러 프래그먼트가 겹쳐 있으면, 보이지도 않을 뒷물체의 쉐이더 연산까지 수행하게 됩니다. 이를 막기 위해 Early-Z Test(미리 깊이를 체크해 연산을 건너뛰는 기술. 레스터라이제이션에서 미리 테스트) 등을 활용해야 합니다.
- Shader Instruction Count : 픽셀 수는 화면 해상도에 따라 수백만 개(4K 기준 약 800만 개)에 달합니다. 쉐이더 코드 한 줄이 늘어날 때마다 전체 연산량은 기하급수적으로 증가하므로 최적화가 필수적입니다.
- Branching (if-else) : GPU는 모든 픽셀을 동시에 연산하므로, 조건문(Branch)에 의해 연산 경로가 갈라지면 성능이 급격히 저하됩니다.
5. 핵심 요약 및 시사점
Fragment Shader는 3D 수학 모델에 생명력(색과 빛)을 불어넣는 단계입니다.
- Per-Fragment Processing : 모든 프래그먼트에 대해 개별적으로 실행됩니다.
- Data Interpolation : 정점 데이터가 면을 따라 부드럽게 채워진 값을 입력으로 사용합니다.
- PBR & High-End Visuals : 현대 게임의 실사 같은 그래픽은 대부분 이 단계의 정교한 연산에서 나옵니다.
'CS > 그래픽스' 카테고리의 다른 글
| [Rendering Pipeline] Stage 8 : Framebuffer (0) | 2025.12.25 |
|---|---|
| Rendering Pipeline] Stage 7 : Color Blending & Output Merger (0) | 2025.12.25 |
| [Rendering Pipeline] Stage 5 : Rasterization (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 |