본문 바로가기

공부/Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문

[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 10 - 출력 병합기

728x90
반응형

 

 

 

 

 

 

GPU 렌더링 파이프라인

 

  • 이번 챕터에서는 출력 병합기가 수행하는 두 가지 주된 작업인 z-버퍼링알파 블렌딩을 다룬다.

 

 

 


 

 

10.1 Z-버퍼링

 

  • GL은 컬러 버퍼(color buffer), 깊이 버퍼(depth buffer), 스텐실 버퍼(stencil buffer)를 제공하는데, 이들을 합해서 프레임 버퍼(frame buffer)라고 한다.
  • 컬러 버퍼는 스크린의 2차원 뷰포트에 나타날 픽셀 전체를 저장하는 메모리 공간이다. (w x z 해상도)
  • 깊이 버퍼z-버퍼라고도 불리는데, 컬러 버퍼와 동일한 해상도를 가지며 현재 컬러 버퍼에 저장되어 있는 픽셀의 z값을 저장한다.
  • z가 프래그먼트마다 겉으로 안들어나지만 계산이 된다. 프래그먼트에서 나오는 normal은 라이팅(lighting), texcoord는 텍스쳐링(texturing)에 사용된다.

 

 

빨간색 삼각형 렌더링 > 파란색 삼각형 렌더링
파란색 삼각형 렌더링 > 빨간색 삼각형 렌더링

 

  • 스크린 공간 3차원 뷰포트의 z범위가 [0.0, 1.0]이라고 가정하자. 그러면 z-버퍼는 배경의 z값에 해당하는 1.0으로 초기화된다. 한편, 컬러 버퍼는 배경색(흰색)으로 초기화된다.
  • 프래그먼트 쉐이더가 한 프래그먼트의 RGBA 색상을 출력할 때, 그 프래그먼트의 스크린 공간 좌표 (x, y, z)는 자동으로 출력 병합기에 전달된다.
  • 그러면 출력 병합기는 그 z좌표를 현재 z-버퍼의 (x, y)에 기록되어 있는 z값과 비교한다. 만약 프래그먼트의 z좌표가 작다면, 이는 현재 컬러 버퍼에 저장되어 있는 픽셀보다 앞에 있다는 뜻이므로, 컬러 버퍼의 픽셀을 프래그먼트 색상으로 대체한다.

 

  • 그림을 보면 (38, 56), (38, 57), (39, 56) 좌표에 위치한 픽셀들이 빨간색에서 파란색으로 바뀐 것에 주목하라. 동시에 z-버퍼의 같은 곳에서 z값 역시 0.8에서 0.5로 갱신되었다.
  • 이처럼 z버퍼를 이용하여 픽셀과 프래그먼트의 앞뒤 순서를 가리는 알고리즘 z-버퍼링(z-buffering) 혹은 깊이 버퍼링(depth buffering)이라 부른다.
  • 원칙적으로 z-버퍼링 알고리즘은 삼각형들을 임의의 순서로 처리하는 것을 허용한다.

 

 

 


 

 

10.2 알파 블렌딩

 

  • 이 절은 프래그먼트와 픽셀이 혼합(blending)되어야 하는 경우를 설명할 것이다.
  • 반투명(translucent) 물체를 렌더링할 때는 이야기가 달라진다. 반투명한 프래그먼트의 z좌표가 컬러 버퍼에 있는 픽셀의 z값보다 작을 경우, 픽셀의 색상은 프래그먼트를 통해 비쳐 보여야 한다.
  • 이는 픽셀과 프래그먼트 색상의 혼합을 필요로 한다.

 

  • 프래그먼트 쉐이더가 출력하는 프래그먼트의 RGBA 색상 중 A를 알파 채널(alpha channel)이라고도 하는데, 픽셀과의 혼합 과정은 프래그먼트의 알파 채널을 이용하므로 알파 블렌딩(alpha blending)이라 불린다.
  • A는 정수 범위보다는 정규화된 범위인 [0, 1]이 선호된다. 최소값 0은 '완전한 투명'을 나타내고 최대값 1은 '완전한 불투명'을 나타낸다.

 

알파 블렌딩 식

 

  • 여기서 c는 블렌딩된 색상을, α는 프래그먼트의 불투명도(알파 채널), c_f는 프래그먼트 색상, c_p는 픽셀 색상을 나타낸다.

 

알파 블렌딩

 

  • 파란색 삼각형은 반투명하고, 빨간색 삼각형은 불투명하다.
  • 파란색 프래그먼트는 알파 블렌딩 식에 의해 빨간색 픽셀과 블렌딩된다.

 

  • 하지만, 렌더링 순서가 바뀌어, 파란색 삼각형을 먼저, 빨간색 삼각형을 나중에 그리면 빨간색 프래그먼트의 z좌표 0.8은 파란색 픽셀의 z값 0.5보다 크므로 폐기될 것이다. 블렌딩이 이뤄지지 않는다.

 

  • z-버퍼링은 삼각형 처리 순서에 독립적이지만 이는 불투명한 삼각형들에만 적용된다. 반투명한 삼각형들은 이렇게 임의의 순서로 렌더링될 수 없다.
  • 모든 불투명한 삼각형이 처리된 뒤, 반투명한 삼각형들은 뒤에서부터 앞으로(back-to-front) 차례차례 처리되어야 한다. 이를 위해 반투명 삼각형들은 정렬(sorting)되어야 한다.

 

 

 

 


 

 

 

 

출처

한정현 - [OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문]을 보고 공부하고 정리한 내용입니다.

728x90