Graphics Pipeline은 쉽게 말해, 우리가 OpenGL로 렌더링을 진행하는 과정을 단계별로 정리해놓은 것이다. 사실 지금까지 OpenGL을 사용한 프로젝트들도 이 과정을 거쳐 렌더링이 되었지만, OpenGL은 Graphics Pipeline에 대해 몰라도 렌더링이 가능하게끔 만들어주는 고수준 API다 보니 이를 깊이 있게 이해하지 않고 작업했던 경우가 많다.
하지만 다음 프로젝트부터는 Vulkan이라는 더 저수준의 API를 이용해 렌더링을 진행할 예정이기 때문에, 이번 기회에 Graphics Pipeline에 대해 제대로 공부해 보기로 했다.
Graphics Pipeline은 크게 4단계로 나눌 수 있다:
Application 단계는 우리가 CPU 단에서 직접 제어하는 단계다. 보통 렌더링에 필요한 정보(정점 정보, 인덱스 정보, 프리미티브 정보 등)를 준비하는 역할을 한다.
게임 엔진을 사용하는 경우에는 이 단계에서 물체들의 물리 처리(물체의 움직임, 충돌 처리 등), 최적화(예: Frustum Culling)를 추가로 수행할 수 있다. 물론 텍스처를 VRAM에 복사하는 등 GPU를 활용한 작업들도 일부 포함되지만, 대부분의 작업은 CPU를 이용한다.
만약 렌더링이 아닌 빠른 계산만을 위해 GPU를 사용하고 싶다면, Compute Shader를 활용하는 것이 더 적합하다.
Geometry Processing 단계에서는 화면에 렌더링할 정점 정보를 준비하여 정규화된 좌표로 변환한다. 이 과정은 크게 다음 5단계를 거친다:
이 과정이 끝나면, 렌더링할 정점 정보가 준비된 상태로 다음 단계로 넘어간다.
Rasterization 단계는 준비된 정점 정보를 화면 픽셀 정보로 변환하는 단계다. 이 작업은 프리미티브(정점들이 모여 만드는 기본 도형) 단위로 진행된다. 모든 프리미티브를 순회하며, 해당 프리미티브가 속하는 픽셀들의 정보를 계산하고 저장한다.
Rasterization 단계는 다음 2단계를 거친다:
이 과정이 끝나면, 픽셀별로 여러 프래그먼트(Fragment)들이 생성되며, 이는 다음 단계에서 처리된다.
Pixel Processing 단계는 픽셀별로 최종 색상을 결정하는 단계다. 보통 텍스처의 색상 정보와 빛 처리를 활용하여 각 픽셀의 최종 색을 계산한다.
이 단계는 다음 2과정을 포함한다:
여기까지 마치면 하나의 Graphics Pipeline 과정이 끝난다.
앞으로 각 단계의 세부 과정들을 하나씩 살펴볼 예정이다.
Geometry Processing - Screen Mapping (0) | 2024.11.29 |
---|---|
Geometry Processing - Clipping (0) | 2024.11.29 |
Geometry Processing - Geometry Shading (1) | 2024.11.29 |
Geometry Processing - Tesselation (0) | 2024.11.29 |
Geometry Processing - Vertex Shading (0) | 2024.11.29 |