컴퓨터 그래픽스

2024.7.14(일) - 10장 출력 병합기

새우급여기 2024. 7. 14. 20:37

출력 병합기는 GPU 파이프라인의 마지막 단계.

Z-버퍼링

뷰포트 내의 두 삼각형이 (x, y) 좌표의 픽셀을 놓고 경쟁한다. 이 픽셀은 결국 파란색으로 칠해짐.

→ 파란색 삼각형이 빨간색 삼각형 앞에 있기 때문이다.

이러한 결정은 두 삼각형의 z 값 비교를 통해 이뤄진다.

Gl은 컬러 버퍼, 깊이 버퍼, 스텐실 버퍼를 제공하는데, 이를 합해

프레임 버퍼라고 한다.

  • 컬러 버퍼: 스크린의 2차원 뷰포트에 나타날 픽셀 전체를 저장하는 메모리 공간
  • 깊이 버퍼: z-버퍼라고도 불림. 컬러 버퍼와 동일한 해상도를 가지며 현재 컬러 버퍼에 저장되어 있는 픽셀의 z 값을 저장함.

(a) 빨간색, 파란색 순서로 렌더링이 이루어짐.

(b) 파란색, 빨간색 순서로 렌더링이 이루어짐.

컬러 버퍼와 깊이 버퍼를 초기화하는 GL 프로그램.

glDepthRange로 정의된 스크린 공간이 있을 떄, Z-버퍼는 배경의 z값에 해당하는 maxZ 값(1.0)으로 초기화 된다. 한편 컬러 버퍼는 배경색으로 초기화된다. glClearDepth와 glClearColor는 각각 초기 z값, 컬러를 설정하고 glClear는 이를 이용해 z-버퍼와 컬러 버퍼를 초기화한다.

Z-버퍼를 이용해 픽셀과 프래그먼트의 앞뒤 순서를 가리는 알고리즘을

Z-버퍼링 혹은 **깊이 버퍼링(depth buffering)**이라 부른다.

알파 블렌딩

반투명 물체를 렌더링 할 때는, 반투명한 프래그먼트 z좌표가 컬러 버퍼에 있는 픽셀의 z값보다 작을 경우, 픽셀의 색상은 프래그먼트를 통해 비쳐 보여야 한다. 이는 픽셀과 프래그먼트 색상의 혼합을 필요로 한다.

  • 알파 채널: 프래그먼트 쉐이더가 출력하는 프래그먼트의 RGBA 색상 중 A
  • 알파 블렌딩: 픽셀과의 혼합 과정은 프래그먼트의 알파 채널을 이용한다.

전형적인 알파 블렌딩 식은 다음과 같다.

알파 블렌딩. (a) 파란색 삼각형은 반투명, 빨간색 삼각형은 불투명하다.

(b) 컬러 버퍼의 세 픽셀이 블렌딩 된 색상을 가진다.

알파 블렌딩을 위한 GL 프로그램

z-버퍼링에서와 마찬가지로, 우선 glEnable(GL_BLEND)를 호출해서 알파 블렌딩을 활성화한 후, glBlendFunc와 glBlendEquation을 사용하여 프래그먼트와 픽셀 혼합 방법을 지정한다. glBlendFunc 첫 번째, 두 번째 파라미터는 각각 프래그먼트와 픽셀 가중치를 설정한다.

 

위의 전형적인 알파 블렌딩 식을 그대로 구현하고 있는 것이다.

 


이미지 출처: [OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]

위 서적을 보고 공부한 내용을 정리함