Skip to content

3D 그래픽 개념 및 렌더링 파이프라인(3)

[칼럼 핵심 요약]
월드 좌표계에 정리된 좌표계를 [5]에서 카메라(시점)로부터 포착한 좌표계로 변환하는 처리를 행한다. 그리고 화면에 표시할 때 어떻게 보일까…… 구체적으로는 어떤 시야로 할 것인가라고 하는 변환도 실시한다. 이것은 사진 촬영에 있어서의 카메라의 프레이밍이나 렌즈의 선택에 상당하는 부분이라고 할 수 있다.

🌐 원문 링크: 3Dグラフィックスの概念とレンダリングパイプライン(3) (Mynavi News)
📅 원문 발행일: 2008-04-04 | ✍️ 저자: 西川善司 (니시카와 젠지 / Zenji Nishikawa)

NOTE

💡 현대 그래픽스 관점에서의 발전사 (Modern Retrospective)

  • 전통적 파이프라인의 재편: 버텍스 셰이더 → 지오메트리 셰이더 → 래스터라이저로 이어지던 전통적 파이프라인은 DX12 Ultimate / Vulkan에서 태스크 셰이더(Amplification/Task Shader) → 메시 셰이더(Mesh Shader) 파이프라인으로 대체되어, 지오메트리 컬링과 LOD 처리를 GPU 코어에서 고도로 병렬화하고 있습니다.
  • Draw Call 오버헤드 해소: 과거 CPU 병목의 주원인이었던 드로우 콜(Draw Call)은 모던 저수준 API(Vulkan, DirectX 12, Metal)의 바인드리스(Bindless) 렌더링과 GPU 구동 파이프라인(ExecuteIndirect / GPU-Driven Rendering)을 통해 수만 단위의 드로우를 단일 명령으로 처리합니다.

📖 본문 해설

[원문 리드문] > 월드 좌표계에 정리된 좌표계를 [5]로 카메라(시점)에서 포착한 좌표계로 변환하는 처리를 한다. 그리고 화면에 표시할 때 어떻게 보일까…… 구체적으로는 어떤 시야로 할 것인가라고 하는 변환도 실시한다. 이것은 사진 촬영에 있어서의 카메라의 프레이밍이나 렌즈의 선택에 상당하는 부분이라고 할 수 있다.

그림 1: GPU 내부의 렌더링 흐름그림 1: GPU 내부의 렌더링 흐름

버텍스 파이프라인의 최종 처리

[5] [6]은 드디어 실제 그리기를 향한 최종 준비 단계적인 처리에 상당한다.

월드 좌표계에 정리된 좌표계를 [5]에서 카메라(시점)로부터 포착한 좌표계로 변환하는 처리를 행한다. 그리고 화면에 표시할 때 어떻게 보일까…… 구체적으로는 어떤 시야로 할 것인가라고 하는 변환도 실시한다. 이것은 사진 촬영에 있어서의 카메라의 프레이밍이나 렌즈의 선택에 상당하는 부분이라고 할 수 있다. 이러한 일련의 처리를 뒤집어 「투시 변환 처리」라고 한다.

그런데, 3D 그래픽스는 시야로 포착한 영상을 묘화하면 좋기 때문에, [5]의 처리가 끝나면, 시야 주체의 생각으로 이행해 온다.

[6]은 묘화하지 않아도 된다고 판단되는 폴리곤을, 실제의 묘화 처리를 실시하는 픽셀 파이프라인에 돌입하기 전 단계에서 파기해 가는 프로세스이다(컬링 처리라고도 한다).

「클리핑 처리」는, 시야로부터 완전하게 밖에 있는 3D 모델의 폴리곤을 파기하고, 3D 모델의 폴리곤 중 시야로부터 빼내어지는 것과 같은 폴리곤에 대해서는, 시야의 범위 내의 폴리곤으로 잘라내는 처리도 실시한다.

「은면 처리」는 시점 방향으로 향하고 있지 않다, 이론상은, 시점에서는 보이지 않을 것이다 폴리곤을 파기하는 처리를 말한다. 투명 오브젝트가 얽혀 왔을 경우에는, 이 처리를 행하면 결함이 나오는 경우도 있다.

픽셀 단위의 작업으로 분해 주문하는 래스터 라이저

시야 본위로 변환도 끝나, 불필요한 폴리곤도 파기한 후, [7]에서 실시하는 것은, 지금까지 실태가 없었던 폴리곤을, 지금부터 묘화하는 화면상의 픽셀(픽셀)에 대응 붙이는 처리다. 또한, 최신의 3D 그래픽스에서는 표시 프레임의 묘화로 뿐만이 아니라, 씬을 텍스처에 렌더링 하는 경우도 있어, 그 때에는 [7]에서는 폴리곤과 텍스처 픽셀(텍셀)에의 대응부를 실시하게 된다.

이 [7]에서의 처리는, 실질적으로는, 버텍스 파이프라인에서 버텍스 단위(폴리곤 단위)의 출력이 되고 있는 계산 결과를, 픽셀 단위의 일로 분해해, 계속되는 픽셀 파이프라인을 향해 발주하는, 이른바 중개업적인 역할이 되고 있다.

이 [7]의 처리는 「트라이앵글 셋업」, 또는 「래스터라이즈 처리」라고 불려, 정해진 처리계이기 때문에, 1990년대의 초기의 GPU로부터 계속 고정 기능으로서 GPU에 실장되고 있어, 지금도 큰 진화는 없다.

일반적으로 하나의 폴리곤은 여러 픽셀로 그려지기 때문에 폴리곤은 래스터 라이저에 의해 많은 양의 픽셀 작업으로 분해됩니다. GPU에 있어서 픽셀 셰이더의 개수가 압도적으로 많은 것은 아무래도 픽셀 쉐이더의 일이 늘어나 버리기 때문이다(계속한다).

그림 5: 래스터라이저는 픽셀 셰이더에 주문서를 만드는 곳……이라고도 할 수 있다. 또한 하나의 폴리곤에서 여러 픽셀 작업이 생성됩니다.그림 5: 래스터라이저는 픽셀 셰이더에 주문서를 만드는 곳……이라고도 할 수 있다. 또한 하나의 폴리곤에서 여러 픽셀 작업이 생성됩니다.

🔍 [인포그래픽 도해 한국어 번역: 래스터라이저와 픽셀 셰이더 주문서 발주 구조]

  • 정점 데이터 (A, B, C 정점): 각 정점의 3D 좌표, 노멀, UV 텍스처 좌표
  • 래스터라이저의 무게중심 보간 (Barycentric Interpolation): 삼각형 내부를 채우는 각 픽셀 프래그먼트에 대해 정점 속성을 가중 보간
  • 픽셀 셰이더 '주문서': 각 픽셀마다 정확히 보간된 UV와 법선 벡터를 픽셀 셰이더 코어로 전달

(트라이Z 니시카와 젠지)


🔗 연관 지식 베이스 (Wiki)

Based on Zenji Nishikawa's 3D Graphics Maniax series. Translated & Knowledge-Based for Korean Game Developers.