[ Graphics ] 출력 병합기
프레임 버퍼
프레임 버퍼(frame buffer)는 컬러 버퍼(color buffer), 깊이 버퍼(depth buffer), 스텐실 버퍼(stencil buffer)로 구성된다.
컬러 버퍼: 스크린의 2차원 뷰포트에 나타날 픽셀 전체를 저장하는 메모리 공간으로, 화면과 같은 해상도
깊이 버퍼(z-buffer): 컬러 버퍼와 동일한 해상도, 컬러 버퍼에 저장되어 있는 픽셀의 z값을 저장(masking)
스텐실 버퍼 : 컬러 버퍼와 동일한 해상도, 컬러 버퍼에 저장되어 있는 픽셀을 값에 따라 렌더링 하지 않는 등의 특수 효과에 사용(masking)
1. z - 버퍼링
스크린 공간에서 프래그먼트에 따른 픽셀의 색상이 결정될 때, 해당 픽셀에 위치하는 프래그먼트가 다수 존재 시, 출력되야 하는 것을 결정해야 한다. 이를 깊이 버퍼에 저장된 z값의 비교를 통해 가장 앞에 위치한 프래그먼트를 찾아, 출력한다. 이를 깊이 버퍼링(depth buffering) 또는 z-fighting이라고도 한다.
z-버퍼링 알고리즘은 삼각형들을 임의의 순서로 처리하는 것을 허용한다.
2. 알파 블랜딩
프래그먼트와 픽셀이 혼합(blending)되는 경우로, 기존 z- 버퍼링을 통해 가장 앞에 위치한 프래그먼트의 색상이 출력 되지만, 일정 알파 값을 가지고 같은 위치의 프래그먼트가 존재할 경우, 알파값에 따른 색상 블랜딩을 진행한다. 프래그먼트의 RGBA 색상 중 A를 알파 채널(alpha channel)이라 하며, 이를 통한 픽셀과의 혼합 과정을 알파 블렌딩(alpha blending)이라 한다.
※ 알파(alpha) : 불투명도
- $c$ : 블렌딩 된 색상
- $α$ : 프래그먼트의 불투명도(알파 채널)
- $c_f$ : 프래그먼트 색상,
- $c_p$ : 픽셀 색상
알파 블랜딩은 임의의 순서로 렌더링 될 수 없으며, 모든 불투명한 삼각형이 처리된 뒤, 반투명 삼각형들은 뒤부터 앞으로(back-to-front) 순서대로 처리된다. 이로 인해 반투명 삼각형들은 정렬(sorting)되어야 한다.
출처: OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문