CS/그래픽스

[Rendering Pipeline] Stage 8 : Framebuffer

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

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

0. 렌더링의 결과물과 화면 출력 (Final Storage & Presentation)

Framebuffer는 그래픽스 파이프라인의 모든 연산이 완료된 최종 데이터가 저장되는 VRAM의 특정 메모리 영역입니다.

 

이전 단계인 Color Blending을 통해 확정된 픽셀 색상들이 이곳에 기록되며, 우리가 모니터를 통해 보는 한 장의 '프레임'이 완성되는 곳입니다.

 

1. Framebuffer의 구성 요소 (Memory Buffers)

Framebuffer는 단순히 색상 정보만 담는 것이 아니라, 렌더링 과정에서 사용된 여러 보조 버퍼들의 집합체입니다.

  • Color Buffer : 실제로 화면에 출력될 RGB 색상 값이 저장되는 버퍼입니다.
  • Depth Buffer (Z-Buffer) : 각 픽셀의 깊이 정보가 저장됩니다. 다음 프레임 렌더링 시 가시성 판단의 기준이 됩니다.
  • Stencil Buffer : 특정 영역을 마스킹하거나 특수 효과를 제어하기 위한 정수 데이터가 저장됩니다.

 

2. Swap Chain과 Double Buffering : 화면 찢어짐 방지

GPU가 화면을 그리는 속도와 모니터가 화면을 출력하는 속도는 서로 다릅니다. 이 차이로 인해 발생하는 Tearing (화면 찢어짐) 현상을 막기 위해 Swap Chain 메커니즘을 사용합니다.

  • Front Buffer : 현재 모니터에 실제로 출력되고 있는 버퍼입니다.
  • Back Buffer : GPU가 다음 프레임을 열심히 그리고 있는 '작업용' 버퍼입니다.
  • Swap (Present) : Back Buffer의 그림이 다 그려지면, Front Buffer와 역할을 순식간에 교체하여 사용자에게 완성된 그림만 보여줍니다.

 

3. V-Sync와 모니터 출력

완성된 프레임은 모니터의 주사율(Refresh Rate, 예 : 60Hz)에 맞춰 전송됩니다.

  • V-Sync (Vertical Synchronization) : 모니터가 화면을 다 그릴 때까지 기다렸다가 버퍼를 교체하는 설정입니다. 찢어짐은 방지하지만, 프레임 드랍 시 입력 지연(Input Lag)이 발생할 수 있습니다.
  • Refresh Rate : 모니터가 초당 몇 번 화면을 갱신하는지를 나타내며, 게임의 최종 FPS는 이 수치와 밀접한 관련이 있습니다.

 

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

파이프라인의 끝단에서 개발자는 하드웨어 자원의 한계와 사용자 경험을 조율해야 합니다.

  1. Resolution & Memory : 해상도가 높아질수록(4K 등) Framebuffer가 차지하는 메모리 용량이 급격히 늘어납니다. 이는 VRAM 부족 문제로 이어질 수 있습니다.
  2. Post-Processing (After Framebuffer) : 렌더링이 끝난 Framebuffer의 내용을 다시 입력으로 사용하여 Bloom, Depth of Field, Tone Mapping 등의 후처리 효과를 적용합니다. 이 과정 역시 추가적인 GPU 자원을 소모합니다.
  3. Frame Pacing : 단순히 높은 FPS를 찍는 것보다, 프레임이 일정한 간격으로 Present되도록 관리하는 것이 부드러운 조작감을 만드는 핵심입니다.

 

5. 핵심 요약 및 시사점

Framebuffer는 파이프라인의 모든 노력이 결실을 맺는 '전시장'입니다.

  • Collection of Buffers : Color, Depth, Stencil 버퍼가 모여 하나의 프레임을 이룹니다.
  • Swap Chain : 완성된 그림만을 부드럽게 노출하기 위한 이중 버퍼링 구조를 가집니다.
  • The Bridge : 디지털 데이터가 우리 눈에 보이는 빛(모니터 신호)으로 변하는 마지막 관문입니다.