본문 바로가기
IT/Teckweek

Forward Rendering vs Deferred Rendering

by YEON-DU 2022. 12. 29.
반응형

Forward Rendering과 Deferred Rendering의 차이는 무엇일까?

...를 알아보기 전에, 먼저 Rendering의 개념부터 간단히 정리해보자.

 

Rendering이란?

렌더링 또는 이미지 합성(rendering 또는 image synthesis)은 컴퓨터 프로그램을 사용하여 모델 또는 이들을 모아놓은 장면인 씬 파일(scene file)로부터 영상을 만들어내는 과정을 말한다. 
출처 : https://ko.wikipedia.org/wiki/렌더링

 

출처 : 위키백과, 렌더링

Rendering 기술은 3D 작업에서 Graphics Pipeline을 따라 수치값들을 이용하여 3D 물체를 2D로 연출한다.

Rendering 의 기본 요소는 [형태, 음영, 색상, 공간, 재질]이 있다.

또한, Rendering 에는 다양한 기능이 속해있는데 셰이딩(Shading), 매핑(Mapping), 투명성(Transparaency) 등이 있다.

이때 Rendering 에서 '빛'이라는 요소는 공간감에 큰 요소인 것을 알 수 있다.

 

그렇다면 더욱 사실적으로 Dynamic Lighting을 처리하기 위해 Rendering Pipeline이 어떻게 발전해왔을까?

 

Forward Rendering이란?

Forward rendering: Geometry shader to vertex shader to fragment Shader

전통적인 Rendering Pipeline을 통해서 Shading 되는 방식을 말한다.

3D공간에서 존재하는 Polygon을 픽셀화하여 그 Pixel마다 Shading과 Lighting 연산을 더하는 방식이다.

화면에 Rendering하지 않아도 되는 면(Culling)도 Shading 연산을 해야만 한다.

그러다보니 Light가 증가하게 되면 계산의 복잡성이 증가한다.

(다른 Light 종류(Directional, Spot, Point ..), Object가 영향 받는 "Light List", Light 개수/종류에 따른 "Shader Explosion",  한 번에 계산할 수 있는 Light 수의 한계 등)

 

간단히 100개의 도형이 있는 Sceen에서 도형에 1000개의 정점이 있는 경우 약 10000개의 다각형이 있을 수 있다.

이 폴리곤이 Fragment Shader(이하 FS)로 전송되면 비용이 많이 드는 조명 계산이 발생하고 속도 저하가 발생할 수 있다. 실제 작업 속도는 아래와 같다.

 

O(num_geometry_fragments * num_lights)

 

따라서 Deffered 보다는 연산속도가 느리며 그림자 처리에 부적합해서 Light Map을 사용하기도 한다. 또한 여러 Object로 복잡한 화면을 구성하거나, Polygho이 많은 Model을 Rendering하기엔 불리한 방식이다.

화면의 깊이값을 이용한 Post-Processing은 따로 처리해 주어야 한다.

 

Deffered Rendering이란?

Deferred rendering: Geometry to vertex to fragment shaders. Passed to multiple render targets, then shaded with lighting.

Forward Rendering과 달리 Light 연산을 마지막에 수행한다.

많은 수의 실시간 조명(Dynamic Lighting)을 비교적 좋은 성능으로 처리할 수 있다.

Lighting Pass(조명)과 Geometry Pass(Mesh)가 분리되어있고 Lighting을 마지막에 처리하기 때문에

화면에 보이는 Pixel의 Lighting을 처리하고, 많은 수의 실시간 Light들의 Draw Call에 대한 부담을 줄일 수 있다.

각 Light는 모든 Fragment 색상에 대한 연산을 수행한다.

 

O(screen_resolution * num_lights)

 

여러 개의 Drawcall을 사용하여 Depth, Normals, Color 값을 계산하여 각기 다른 Render Target에 결과값을 저장하게 된다. 이렇게 저장된 Render Target (Framebuffer) 데이터 값을 사용하여 최종 색상을 결정하여 Final Render Target (Framebuffer)에 결과값을 저장한다.

 

 

장점과 단점

Forward Rendering Deffered Rendering
해당 Light에 영향을 받지 않아도 빛을 연산.
화면에 Rendering되지 않는 면도 Shading 연산.
(Depth 계산 이전에 연산하므로 연산 속도가 느리다)
해상도가 올라가도 요구하는 VRAM이 Deffered보다 적다.

Light 개수*Light 영향 받은 Object 수
수많은 작은 Dynamic Lighting 사용이 가능.
Light 계산이 전혀 없이 속성 값을 Rendering.
화면에 실제로 Rendering 되는 Pixel만 Light 계산을 연산.
요구하는 하드웨어 사양이 Forward Rendering보다 높고, 해상도가 올라갈수록 요구하는 VRAM이 기하급수적으로 늘어난다.

Light 개수* Light에 영향받는 Pixel 개수
O(1)의 복잡도. Object의 개수와 연관 없다.

 

 

참고

https://dawn999.tistory.com/43

https://mkblog.co.kr/gpu-forward-rendering-vs-deferred-rendering/

https://gamedevelopment.tutsplus.com/articles/forward-rendering-vs-deferred-rendering--gamedev-12342

반응형

'IT > Teckweek' 카테고리의 다른 글

GPGPU (General Purpose GPU)  (0) 2022.12.13
Rendering Pipeline  (0) 2022.11.12
BlendMode  (0) 2022.11.05
SCM (Software Configuration Management)  (0) 2022.10.26
CI/CD  (0) 2022.10.06

댓글