2018년 3월 20일 화요일

3.[6-8] 프래그먼트 쉐이더, 프레임버퍼 동작, 컴퓨트 쉐이더


  1. 프래그먼트 쉐이더
    1. OpenGL 그래픽스 파이프라인에서 마지막으로 프로그래밍 가능한 스테이지
    2. 각 프래그먼트의 색상을 결정하여 framebuffer - window 에 그려지도록 한다.
    3. 프래그먼트 쉐이더의 수행으로 결정된 색상은 최종 픽셀이 아닐수도 있음.
      1. depth test, stencil, blending, multi sampling 등 다른 많은 효과에 영향을 받기 때문.
    4. Example
      1. #version 430 core

        out vec4 color;

        void main(void)
        {
          color = vec4(sin(gl_FragCoord.x * 0.25) * 0.5 + 0.5, ~);
        }
        1. gl_FragCoord
          1. 프래그먼트 쉐이더 내장 변수 중 하나
          2. 윈도우 안에서의 프래그먼트 위치를 가지고 있음
    5. 다른 스테이지들은 OpenGL이 입력값을 렌더링되는 프리미티브에 따라 보간한다. (ex. color)


70P

  1. 프레임버퍼 동작
    1. OpenGL 그래픽스 파이프라인의 마지막 스테이지
    2. 화면에 보이는 영역
    3. 색상 이외에도 픽셀당 값을 저장하기 위해 사용되는 여러 추가적인 메모리 영역
    4. 운영체제가 소유하나, off-screen 영역에 대해 직접 프레임버퍼 생성 가능픽
    5. 픽셀 오퍼레이션
      1. scissor test
        1. 사용자가 정의한 사각형의 내부에 대해서만 테스트 진행
      2. stencil test
      3. depth test
        1. 프래그먼트의 z 좌표와 깊이 버퍼의 내용을 비교
        2. 각 픽셀당 하나의 값(픽셀의 깊이)을 가짐
        3. 깊이 버퍼는 보통 (0~1) 사이다.
        4. 0에서 1으로 갈 수록 가까운 점에서 멀어지는 곳으로 이동
        5. 동일 위치에 이미 렌더링 된 다른 프레그먼트보다 가까운지 결정.
          이미 렌더링 된 프래그먼트 보다 멀면 그리지 않는다.
      4. blending

72P
  1. 컴퓨트 쉐이더
    1. 다른 그래픽스 관련 스테이지와는 별개로 동작하는 파이프라인.
    2. 그래픽스 프로세서의 계산 파워를 사용하는 방법
    3. 단일 스테이지 파이프라인
    4. work item(아이템) - local work group(그룹)
    5. GL_COMPUTE_SHADER 타입으로 쉐이더 생성하는 것 외에는 일반 쉐이더와 동일한 방식으로 사용한다.

댓글 없음:

댓글 쓰기