1 minute read

(렌더링 파이프라인)

:bulb:개요

:mag_right: 렌더링 파이프라인- 현재 가상 카메라에 비친 3차원 장면의 모습에 근거해서 2차원 이미지를 생성하는 데 필요한 일련의 단계 전체를 말함.

length

graphics_pipeline.jpg

:high_brightness: Application Stage

오브젝트 하나를 렌더링하기 위해서는 많은 데이터(정보)가 필요함.

-오브젝트의 입체적 형태를 나타내는 메시(mesh)정보

-알베도(albedo), 노멀(normal), 스페큘러(specular) 등의 텍스처 정보

-라이팅에 관한 쉐이더(shader) 정보

-위치, 회전, 스케일 정의하는 트랜스폼(transform) 정보

-기타 등등   

장면에 관한 정보를 지오메트리 단계에 제공함.

컬링 연산, 배칭 처리를 위한 연산이 이루어지는 단계이다.

:mag_right: 컬링- 렌더링될 오브젝트만 추려내는 과정.

:mag_right: **배칭**- 다른 메시를 사용하더라도 같은 머티리얼을 사용하면 하나의 배치로 구성하는 것이 가능해짐. 이를 통해 드로우콜을 줄여 최적화에 도움을 줄 수 있음.

:high_brightness: Geometry Stage

지오메트리를 구성하는 버텍스(vertex)와 폴리곤(polygon)의 처리를 담당하는 단계이다.

Input Assembler,IA stage

버텍스와 인덱스 정보를 바탕으로 기본도형을 조립하는 과정이다. 인덱스에는 정점들이 어떻게 기본도형을 형성하는지의 정보가 담겨있다. 이러한 데이터들은 GPU 메모리에 저장되어 있다.

Vertex shader stage

World-View-Projection transform(버텍스 좌표 변환), 버텍스 노멀, 버텍스 컬러를 결정하는 단계이다.

World transform, View transform, Projection Transform을 통해 버텍스의 지역 좌표가 공간 좌표로 변환되고, 카메라상에서 보이는 상대적 위치로 변환된다. 원근법을 고려한 투영을 통해 가상 공간상의 점이 화면상 2D 좌표로 변환된다. 원근법이 적용되지 않은 것을 직교투영(orthographic projection), 적용된 것을 원근 투영(perspective projection)이라고 함.

Tessellation stage

버텍스를 추가 생성하여 디테일을 주는 기법이다.

테셀레이션의 장점으로는

  1. LOD(level-of0detail) 메커니즘을 구현할 수 있다.

  2. 메모리에는 로우폴리 메시를 저장하여 메모리를 절약할 수 있다.

  3. 애니메이션, 물리 처리 연산에 로우폴리를 적용하여 연산량을 줄일 수 있다.

:mag_right: **LOD**- 오브젝트의 시각적인 디테일을 여러 단계로 나누는 기술을 의미함.

최근에는 모바일 디바이스에서 Metal, Vulkan 등 최신 그래픽스 API를 통해 테셀레이션 적용이 가능함.

:high_brightness: Rasterizer Stage

투영된 3차원 삼각형으로부터 픽셀 색상을 계산하는 단계이다.

Backface culling

관찰자에게 보이지 않는 후면 삼각형을 골라서 폐기하는 공정인 후면 선별이 이루어진다.

Fragment shader / Pixel shader

픽셀들의 최종 렌더링 색을 계산한다. 텍스처로부터 색상을 읽어와 적용, 그림자 적용하는 일을 함.

  • Depth buffer, Z buffer: 픽셀의 깊이값(카메라로부터의 거리).

Output merger

출력병합: 픽셀 셰이더가 생성한 픽셀 단편들은 후면 버퍼에 기록된다. (깊이 판정 등을 통해 불필요한 픽셀 단편은 기록하지 않음) 블렌딩(blending)이 이 단계에서 적용됨. 알파값을 적용해서 최종 출력 색상을 결정한다.

loop.jpg

:books: Reference

1)유니티 그래픽스 최적화 스타트업 - 오지현
2)유니티 쉐이더 스타트업 - 정종필
3)DirectX 12를 이용한 3D 게임 프로그래밍 입문 - 프랭크D.루나
4)The Real-Time Rendering Pipeline