[OpenGL] Graphics pipeline

joDMSoluth·2021년 12월 16일
0

Graphics pipeline

graphics pipeline의 두가지 역할

  1. 스크린은 사실상 2D 픽셀이므로 개발자가 input으로 넣은 3D 좌표를 2D 픽셀로 변환하는 작업
  2. 변환한 2D 좌표에 rgb(255,255,255) 색을 넣는 작업

결과적으로 그래픽파이프라인은 3D좌표를 2D픽셀로 만드는 작업을 말합니다. 그래픽 파이프라인의 각 단계에서 GPU 위에 작은 프로그램들을 실행시킴으로써 데이터를 빠르게 처리하기 위해 수천개의 작은 프로세싱 코어를 가지고 있습니다. 이 작은 프로그램들이라는 것은 shaders라고 합니다.
기본 쉐이더도 있지만 Vertex shader, Geometry shader, Fragment shader 다음에는 개발자가 GLSL로 작성한 쉐이더를 직접 주입할 수 있습니다.

조작 가능한 3가지 Shader

각 파이프 라인은 우리가 알고 있는 파이프라인 개념과 다르지 않습니다. 각 파이프라인의 return 값은 다음 파이프라인의 input입니다. 따라서, 각 파이프라인의 입력과 출력의 타입이 중요합니다.

0. Input Assembler(입력 어셈블러)

  • 저장된 버퍼에서 원시 Vertex 데이터를 수집하고, Index 버퍼를 이용하여 Vertex의 복제나 중복을 막습니다.

1. Vertex Shader (3D좌표 -> 3D좌표)

Vertex Shader는 opengl에게 좌표(Vertex) 리스트와 그 좌표를 어떤 식으로 그릴지를 알려줘야 합니다.

  • input
    1. 3D 좌표 리스트(각 좌표는 위치값색상값을 가지고 있음)
    2. primitives

    GL_POINTS - 점을 그려라
    GL_TRIANGLES - 삼각형을 그려라
    GL_LINE_STRIP - 하나의 긴 선을 그려라)

  • output:
    1. 3D 좌표

2. Geometry Shader

  • Vertex Shader에서 받은 정점 리스트와 Primitives를 이용해 vertex를 증감시켜 새로운 도형을 만듭니다. Vertex Shader에서 기본적으로 도형을 완성해 오지만 생성된 도형에서 추가로 없는 것을 그릴 수 있습니다.

3. Rasterization

  • Vertex Shader와 Geometery Shader를 지난 도형이 픽셀로 변경되는 것을 말함
  • Vertex 사이에 공간을 보간작업을 통해 알맞은 픽셀을 표시
  • 여기서 색이 정해지지는 않음

4. Fragment Shader

  • Rasterization에서 그려진 픽셀에 색을 부여하는 단계
  • Vertex Shader에 보간된 데이터를 통해 색을 표현하거나, 텍스트 좌표(UV), Normal Mapping 등을 이용
profile
풀스택이 되고 싶은 주니어 웹 개발자입니다.

0개의 댓글