vertex는 program과 동의어다.
GPU rendering을 위해서 vertex shader와 fragment shader 두 가지 프로그램을 작성해야한다.
rasterizer와 output merger는 하드웨어로 고정된 단계로, 정해진 연산을 수행한다.
output merger는 z-buffering과 alpha blending을 수행한다.
GL은
color buffer,
depth buffer,
stencil buffer를 제공하는데,
이들을 합해서 frame buffer라고 한다.
color buffer는 screen의 2차원 viewport에 나타날 pixel 전체를 저장하는 메모리 공간이다.
depth buffer는 z-buffer라고도 불리는데,
color buffer와 동일한 resolution을 가지며,
현재 color buffer에 저장되어 있는 pixel의 값을 저장한다.
이 값은 스크린 공간에서 정의된 3차원 viewport의 범위에 속한다.
z-buffer를 이용해, pixel과 fragment의 앞뒤 순서를 가리는 알고리즘을
z-buffering 혹은 depth buffering이라고 부른다.
z-buffering은 삼각형 처리 순서에 독립적이다. (파란색 삼각형을 먼저 처리하나, 빨간색 삼각형을 먼저 처리하나 그 결과가 같다.)
fragment shader의 output은 RGBAZ fragment이다.
여기서 RGB는 color,
A는 fragment의 투명도(opacity)를 나타내는 alpha 값,
Z는 depth 값을 의미한다.
fragment와 pixel이 혼합(blending) 되어야 하는 경우 사용된다.
반투명 물체를 rendering할 때는, 반투명 fragment의 좌표가
color buffer에 있는 pixel의 값 보다 작을 경우,
pixel의 색상은 fragment를 통해 비쳐 보아야 한다. 이때 pixel과 fragment 색상의 blending이 필요한 것이다.
fragment shader가 출력하는 fragment의 색상 중,
를 alpha channel 이라고도 한다.
pixel과의 blending 과정은 fragment의 alpha channel을 이용하므로, alpha blending이라고 부른다.
정규화된 A는 [0, 1] 범위의 값을 갖고,
최솟값 0은 '완전 투명',
최댓값 1은 '완전 불투명'을 나타낸다.
alpha blending 수식은 다음과 같다.
: blending된 color,
: fragment의 불투명도(alpha channel),
: fragment color
: pixel color