Output Merger
fragment shader를 통해 나오는 fragment color를 바로 viewport에 그리지 않고
마지막으로 frame buffer들을 통해 output merger 단계를 거친다
Frame buffer
Frame buffer에는 Color buffer, Depth buffer, Stencil buffer가 있다
Color buffer는 픽셀의 색상을 저장하는 버퍼이다
Depth buffer(z-buffer)는 픽셀의 z축 값을 저장하는 버퍼이다
Stencil buffer는 특정 영역을 그릴 때 무시하거나 그리지 않도록 하는데 활용되며
그림자를 구현할 때 주로 사용된다
RGBZ
rasterizer는 z-좌표뿐만 아니라 법선과 텍스처 좌표도 보간한다
z값은 fragment shader를 우회하고 output merger로 직접 전달되어
최종적으로 각 프래그먼트의 색상과 z값을 가지고 RGBZ 값으로 저장되어 있다
Z-buffering
매 프레임마다 그릴 때,
모든 픽셀의 z-buffer를 1.0으로 초기화하고
color buffer는 background color로 초기화한다
그리고
색을 칠하기 전의 z buffer 값과 색을 칠 할 z buffer 값을 비교하여
색을 칠 할 z buffer 값이 더 작은 경우(앞에 있는 경우)에 만 그린다
Depth Sorting
가장 뒤에 그려지는 물체를 먼저 그리는 방법으로
모든 물체들의 drawcall을 sorting하는 방법도 있지만
overhead가 발생해서 현대 그래픽스는 z-buffering을 사용한다
glClear
depth buffer는 기본적으로 꺼져있기 때문에
해당 기능을 사용하기 위해서는 glEnable을 통해 켜줘야한다
또한, 매 프레임마다 glClear를 통해서 color buffer와 depth buffer를 지워야 한다
'그래픽스 > [전북대] OpenGL' 카테고리의 다른 글
[OpenGL Note] Output Merger - Alpha Blending (1) | 2024.04.20 |
---|---|
[OpenGL Note] Lighting - Ambient, Emmisive (1) | 2024.04.19 |
[OpenGL Note] Lighting - Diffuse, Specular (0) | 2024.04.19 |
[OpenGL Note] Fragment Shader (0) | 2024.04.18 |
[OpenGL Note] Texture Wrapping과 Texture Filtering (1) | 2024.04.18 |