본문 바로가기

Graphics

[Renderer] Graphics Pipeline (Rendering Pipeline) / RenderPass / Rendering Path

렌더 패스(RenderPass)란 하나의 그래픽스 파이프라인을 실행하는 것이다.
렌더 패스는 렌더링 엔진 (e.g. 게임 엔진) 의 구조에 따라 다양한 종류가 있다.

그래픽스 파이프라인(Graphics pipeline)이란 3D scene 을 2D screen 으로 렌더링하기 위해서 CPU/GPU 가 수행하는 단계들이다.
렌더링 파이프라인(Rendering pipeline) 이라고도 한다.
그래픽스 파이프라인은 그래픽스 API (e.g. DirectX, OpenGL, Vulkan, Metal .. ) 에 따라 조금씩 다르지만, 구조는 비슷하다.

Graphics Pipeline (Rendering Pipeline)


크게 3단계로 나눌 수 있다:

https://en.m.wikipedia.org/wiki/Graphics_pipeline

1. Application
CPU는 이번 프레임에 렌더링 할 3D scene 을 업데이트 한다.
그 다음, 렌더링에 필요한 데이터(primitive, vertex, matrix ..) 를 모아 GPU 로 전달한다.
e.g. Input Assembler(IA)

2. Geometry
GPU 는 polygon, vertex 등 3D scene 의 데이터를 사용해 다양한 연산을 수행한다.
그 결과로 2D screen 에 실제로 그려질 vertex 만 남긴다. (= Clipping)
e.g. Vertex Shader(VS), Hull Shader(HS), Tesselator, Domain Shader(DS), Geometry Shader(GS)

3. Rasterization
Geometry 연산이 끝나면 GPU 는 3D vertex data 를 2d screen data 로 바꾼다.(= Rasterizing)
그 후 2d screen data (pixel, fragment) 를 사용해 연산을 수행한다.
모든 연산이 끝나면, 각 screen data 의 값을 적용할지의 여부를 판별하고 output render target 을 업데이트 한다.

e.g. Rasterizer(RS), Pixel Shader(PS), Fragment Shader(FS), Output Merger(OM)


DX12 의 그래픽스 파이프라인
: IA - VS - HS - TS- DS - GS - RS - PS - OM

https://docs.microsoft.com/ko-kr/windows/win32/direct3d12/pipelines-and-shaders-with-directx-12


OpenGL 의 그래픽스 파이프라인

https://www.khronos.org/opengl/wiki/Rendering_Pipeline_Overview

RenderPass 와 Rendering Path


가장 간단한 렌더러(렌더링 엔진)는 한 종류의 렌더링 파이프라인만 사용해서 2D screen 을 그린다.

하지만 렌더러의 구조에 따라서 여러 종류의 렌더링 파이프라인을 사용할 수도 있다.
이때 렌더링 파이프라인 각각을 RenderPass, RenderPass 들이 이루는 렌더러의 구조를 Rendering Path 라고 한다.
게임 엔진의 렌더러는 Rendering Path 중에서 이번 프레임에 필요한 RenderPass 만 골라 실행하도록 최적화 되어 있다.

Unity3D 의 Forward Rendering Path
2개 이상의 렌더패스가 있다: BasePass, Additional Passes 등

https://docs.unity3d.com/2019.3/Documentation/Manual/RenderTech-ForwardRendering.html

Unity - Manual: Forward rendering path

Rendering paths in the Built-in Render Pipeline Deferred Shading rendering path Forward rendering path This page describes the Forward rendering pathThe technique Unity uses to render graphics. Choosing a different path affects the performance of your game

docs.unity3d.com

1. BasePass : 1개의 directional light 와 SH/vertex light 를 사용하여, 오브젝트 각각에 빛과 그림자 연산을 적용해 렌더링 한다.
2. Additional Passes : 오브젝트에 영향을 주는 per-pixel light 의 개수만큼 렌더패스가 호출된다. 빛 연산만을 수행한다.


UnrealEngine 의 Deferred Rendering Path
10개 이상의 렌더패스가 있다 : PrePass, BasePass, OcclusionQueries, Lighting, Fog, Translucency 등

https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Rendering/Overview/