프로젝트/전자공학종합설계

[전자공학종합설계] 0. GPU & Computer Graphics 관련 용어 정리

아이스얼그레이 2022. 3. 13. 18:14

GPU overview를 작성하면서 느낀건데, 관련 용어를 전혀 모르겠습니다! 그래서 먼저 생소한 용어를 정리하고 연구를 진행하는게 좋을듯해서 GPU와 computer graphics 관련 용어를 정리해보려고 합니다.

 

GPU

Immediate Mode GPU vs Tile-Based GPU

Tile-Based GPU란 ARM GPU가 채택한 GPU architecture입니다. 보통 사용되는 GPU architecture은 Immediate Mode GPU인데, 이와 비교해 Tile-Based GPU의 장, 단점을 알아보겠습니다.

 

Immediate Mode GPU

전통적인 데스크탑 GPU의 architecture는 보통 Immediate Mode GPU로 알려져있습니다. Immediate Mode GPU은 rendering을 엄격한 command stream으로 처리하여, 모든 draw call의 각 primitive(vertex를 처리하는 기본 단위)에 대해 vertex 및 fragment shader를 순서대로 실행합니다.

 

아래 그림은 Immediate Mode GPU의 HW data flow와 memory interaction을 나타낸 것 입니다.

 

장점

- vertex shader와 다른 geometry 관련 shader의 output이 GPU 내의 on-chip에 남을 수 있습니다. 이러한 shader의 output은 pipeline의 다음 stage에서 데이터를 사용할 준비가 될 때 까지 FIFO buffer에 저장할 수 있습니다. 이는 GPU가 중간 geometry 결과를 저장하고 검색하는 외부 memory bandwidth를 거의 사용하지 않음을 의미합니다.

 

단점

- fragment shading은 각 draw의 삼각형 위치에 따라 화면 주위를 이동합니다. 이것은 stream의 삼각형이 화면의 모든 부분을 cover할 수 있고, 삼각형이 draw 순서로 처리되기 때문입니다.

 

이것의 효과는 active working set이 전체 framebuffer의 크기임을 의미합니다. GPU는 이 working set에서 모든 blending, depth testing, stencil testing operation에 대해 현재 fragment의 픽셀 좌표에 대한 데이터의 현재 값을 불러와야 합니다.

 

일반적으로, 모든 shaded fragment는 이 working set에 접근합니다. 그러므로, 고해상도에서 이 memory에 가해지는 bandwidth load는 각 fragment에 대한 여러 operations으로 매우 높을 수 있습니다. 하지만 caching은 최근에 접근한 framebuffer의 부분을 GPU에 가깝게 유지하여 high bandwidth load을 완화할 수 있습니다.

 

Tile-Based GPU

Tile-Based GPU는 reder passed processing에 대해 다른 approach을 취합니다. 이 approach는 fragment shading동안에 GPU가 필요로 하는 외부 memory 접근 횟수를 최소화하기 위해 고안되었습니다.

 

Tile-Based renders는 화면을 작은 pieces로 분할하고, 각 작은 tile을 fragment shading 처리하여 memory에 쓰기 전에 완성합니다. 이 작업을 수행하려면, GPU는 각 tile에 기여하는 geometry를 미리 알아야 합니다. 따라서 Tile-Based renderer는 각 render pass를 2개의 processing pass로 분할합니다.

 

 

아래 그림은 Tile-Based GPU의 HW data flow와 memory interaction을 나타낸 것 입니다.

 

 

1. 

Computer Graphics

Rendering

rendering은 2D 또는 3D 모델에서 이미지를 생성하는 process입니다. 이에 따른 결과 이미지를 render라고 합니다.

strictly defined language 또는 data structure의 object를 포함하는 scene file에서 여러 모델을 정의할 수 있습니다.

 

Vertex

computer graphics(이하 CG)의 vertex(복수형 vertices)는 2D 또는 3D 공간의 한 점 또는 표면의 여러 점과 같은 특정 속성을 설명하는 data structure 입니다. vertex buffer에 저장되는 vertex들은 vertex shader에 의해 적절한 변환이 일어납니다. 이러한 vertex processing은 GPU의 rendering pipeline 중 첫 번째 단계에 해당합니다.

 

삼각형의 vertices는 공간적인 위치 뿐만 아니라 object를 올바르게 rendering하는 데 사용되는 다른 값과도 연결됩니다. vertex의 대부분의 속성은 rendering될 공간의 vector을 나타냅니다. 이러한 vector는 일반적으로 1, 2, 또는 3차원입니다. Real-time rendering에서 이러한 속성은 vertex shader 또는 vertex pipeline에서 사용됩니다.

 

Rasterization

rendering pipeline의 2단계인 rasterizaion은 rendering pipeline의 1단계인 vertex processing의 출력을 입력으로 받습니다. 이 단계에서는 각 vertices를 vertex, line, polygon(삼각형) 단위로 처리하는데, 보통 polygon 단위로 처리하며, 이러한 단위를 primitive라고 합니다.

 

이렇게 조립되는 각 polygon들은 최종적으로 2차원 평면에 그려집니다. 이때 화면은 pixel로 구성되므로, polygon들을 pixel로 채워야 합니다. 해당 단계에서 일종의 예비 pixel인 fragment로 채우게 됩니다. fragement는 각 vertex에 할당되었던 여러 data를 이용하여 생성됩니다.

 

Fragment

이전 단계인 rasterizaion의 출력은 vertex별 attrbute가 보간된 fragment입니다. 현재 단계인 fragement는 fragment 하나를 입력으로 받습니다. fragment processing은 fragment shader에 의해 수행되며, fragment의 색상을 결정한다. shader의 출력은 색상을 나타내는 RGB 값입니다.