CS/그래픽스

[Rendering Pipeline] Stage 6 : Fragment Shader

tae-woong 2025. 12. 25. 00:27

렌더링 파이프라인이란 3차원 상의 물체를 2차원의 컴퓨터 화면에 표현하기 위한 과정

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) 상황이라고 합니다.

  1. Overdraw Management : 화면의 같은 자리에 여러 프래그먼트가 겹쳐 있으면, 보이지도 않을 뒷물체의 쉐이더 연산까지 수행하게 됩니다. 이를 막기 위해 Early-Z Test(미리 깊이를 체크해 연산을 건너뛰는 기술. 레스터라이제이션에서 미리 테스트) 등을 활용해야 합니다.
  2. Shader Instruction Count : 픽셀 수는 화면 해상도에 따라 수백만 개(4K 기준 약 800만 개)에 달합니다. 쉐이더 코드 한 줄이 늘어날 때마다 전체 연산량은 기하급수적으로 증가하므로 최적화가 필수적입니다.
  3. Branching (if-else) : GPU는 모든 픽셀을 동시에 연산하므로, 조건문(Branch)에 의해 연산 경로가 갈라지면 성능이 급격히 저하됩니다.

 

5. 핵심 요약 및 시사점

Fragment Shader는 3D 수학 모델에 생명력(색과 빛)을 불어넣는 단계입니다.

  • Per-Fragment Processing : 모든 프래그먼트에 대해 개별적으로 실행됩니다.
  • Data Interpolation : 정점 데이터가 면을 따라 부드럽게 채워진 값을 입력으로 사용합니다.
  • PBR & High-End Visuals : 현대 게임의 실사 같은 그래픽은 대부분 이 단계의 정교한 연산에서 나옵니다.