[그래픽스] Output Merger

YEOM JINSEOP·2023년 11월 21일
0

Computer Graphics

목록 보기
11/14

GPU rendering

  • GPU는 polygon mesh를 입력으로 받아서,
    각각의 3차원 polygon을 스크린에 그려질 2차원 형태로 바꾸고,
    이 2차원 polygon 내부를 차지하는 pixel들의 색상을 결정한다.
    이 pixel은 color buffer에 기록되는데, 이는 스크린에 나타날 pixel 전체를 저장하는 메모리 공간을 말한다.
    color buffer는 주기적으로 스크린에 복사된다.

  • vertex는 program과 동의어다.
    GPU rendering을 위해서 vertex shader와 fragment shader 두 가지 프로그램을 작성해야한다.

  • rasterizer와 output merger는 하드웨어로 고정된 단계로, 정해진 연산을 수행한다.

  • output merger는 z-buffering과 alpha blending을 수행한다.


Z-buffering

  • 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의 zz 값을 저장한다.
    zz 값은 스크린 공간에서 정의된 3차원 viewport의 zz 범위에 속한다.

  • z-buffer를 이용해, pixel과 fragment의 앞뒤 순서를 가리는 알고리즘을
    z-buffering 혹은 depth buffering이라고 부른다.

  • z-buffering은 삼각형 처리 순서에 독립적이다. (파란색 삼각형을 먼저 처리하나, 빨간색 삼각형을 먼저 처리하나 그 결과가 같다.)


Alpha blending

  • fragment shader의 output은 RGBAZ fragment이다.
    여기서 RGB는 color,
    A는 fragment의 투명도(opacity)를 나타내는 alpha 값,
    Z는 depth 값을 의미한다.

  • fragment와 pixel이 혼합(blending) 되어야 하는 경우 사용된다.
    반투명 물체를 rendering할 때는, 반투명 fragment의 zz 좌표가
    color buffer에 있는 pixel의 zz 값 보다 작을 경우,
    pixel의 색상은 fragment를 통해 비쳐 보아야 한다. 이때 pixel과 fragment 색상의 blending이 필요한 것이다.

  • fragment shader가 출력하는 fragment의 RGBARGBA 색상 중,
    AA를 alpha channel 이라고도 한다.
    pixel과의 blending 과정은 fragment의 alpha channel을 이용하므로, alpha blending이라고 부른다.

  • 정규화된 A는 [0, 1] 범위의 값을 갖고,
    최솟값 0은 '완전 투명',
    최댓값 1은 '완전 불투명'을 나타낸다.

  • alpha blending 수식은 다음과 같다.
    c=αcf+(1α)cpc = \alpha c_f + (1 - \alpha)c_p
    \\
    cc: blending된 color,
    α\alpha: fragment의 불투명도(alpha channel),
    cfc_f: fragment color
    cpc_p: pixel color

  • z-buffering 알고리즘은 삼각형 처리 순서에 독립적이였으나, 이는 불투명한 삼각형들에만 적용된다.
    모든 불투명한 삼각형이 처리된 뒤, 반투명한 삼각형들은 뒤에서부터 앞으로 차례차례 처리되어야 한다.
    이를 위해 반투명한 삼각형들은 정렬되어야 한다.

0개의 댓글