CS/그래픽스

Rendering Pipeline] Stage 7 : Color Blending & Output Merger

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

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

 

0. 픽셀의 최종 확정과 화면 출력 (Final Pixel Determination & Framebuffer Writing)

Color Blending (또는 Output Merger) 단계는 Fragment Shader에서 계산되어 넘어온 색상과 깊이 값을 바탕으로, 해당 픽셀을 실제 화면의 메모리 공간인 Framebuffer에 어떻게 기록할지 결정하는 단계입니다.

 

이 단계는 하드웨어가 담당하는 고정 기능(Fixed-Function) 단계입니다.

 

1. 테스트 단계 : 픽셀의 생존 결정 (Per-Sample Processing)

색상을 섞기 전에, 해당 프래그먼트가 화면에 그려질 자격이 있는지 여러 테스트를 거칩니다.

  • Scissor Test : 개발자가 설정한 특정 직사각형 영역 바깥의 픽셀을 즉시 제거합니다.
  • Stencil Test : 스텐실 버퍼(Stencil Buffer)의 값을 참조하여, 특정 마스크 영역 안에 있는지 확인합니다. 포탈 효과나 특정 UI 영역만 그릴 때 활용됩니다.
  • Depth Test (Z-Test) : 가장 중요한 테스트입니다. 현재 그리려는 프래그먼트의 깊이(Z) 값을 기존에 그려진 Depth Buffer와 비교하여, 더 앞에 있는 경우에만 통과시킵니다.

 

2. 블렌딩 : 색상의 결합 (Alpha Blending)

테스트를 통과한 프래그먼트는 이제 Framebuffer에 이미 기록되어 있는 기존 색상과 어떻게 섞일지 결정합니다.

  • Opaque (불투명) : 기존 색상을 무시하고 새로운 색상으로 덮어씁니다.
  • Alpha Blending (투명/반투명) : 프래그먼트의 알파(Alpha) 값을 사용하여 기존 색상과 새 색상을 수학적으로 합성합니다.
  • Additive / Multiplicative : 빛의 합산이나 그림자 합성 등 특수 목적에 따라 다양한 연산 방식을 적용할 수 있습니다.

 

3. Render Order의 중요성

블렌딩은 처리 순서에 매우 민감합니다.

  • Opaque Objects : 깊이 테스트(Z-Test)를 효율적으로 활용하기 위해 보통 Front-to-Back (가까운 것부터) 순서로 그립니다.
  • Transparent Objects : 반투명 물체는 뒤에 있는 색상이 비쳐야 하므로 반드시 Back-to-Front (먼 것부터) 순서로 그려야 정확한 결과가 나옵니다. 클라이언트 개발자가 정렬(Sorting) 로직에 신경 써야 하는 이유입니다.

 

4. 게임 클라이언트 개발자 관점의 포인트 (Optimization)

최종 단계에서의 최적화는 프레임 레이트 확보에 결정적인 역할을 합니다.

  1. Early-Z Test : 원래는 프래그먼트 쉐이더 이후에 깊이 테스트를 하지만, 현대 GPU는 쉐이더 연산 전에 미리 깊이를 체크하여 가려진 픽셀의 연산을 생략하는 Early-Z 기법을 사용합니다. 이를 극대화하기 위해 불투명 물체를 먼저 그리는 것이 중요합니다.
  2. Overdraw : 같은 위치에 여러 번 덧그리는 오버드로는 GPU의 쓰기 대역폭을 낭비합니다. 특히 모바일 환경에서는 반투명 오브젝트가 겹치는 것을 최소화해야 합니다.
  3. Alpha Test vs. Blending : Alpha Test (또는 Clip)는 픽셀을 완전히 버리는 방식이라 빠를 수 있지만, 최신 GPU에서는 Early-Z를 깨뜨릴 수 있어 신중히 사용해야 합니다.

 

5. 핵심 요약 및 시사점

Color Blending 단계는 파이프라인의 문지기와 같습니다.

  • Tests : 깊이와 스텐실 검사를 통해 픽셀의 가시성을 최종 판단합니다.
  • Blending : 투명도와 합성 공식을 통해 최종 색상을 도출합니다.
  • Fixed-Function : 하드웨어가 매우 빠르게 처리하지만, 개발자의 렌더링 순서 제어가 성능을 좌우합니다.