Forward Rendering vs Deferred Rendering

김민오·2022년 7월 20일
0

참고
https://docs.unity3d.com/Packages/com.unity.render-pipelines.high-definition@6.5/manual/Forward-And-Deferred-Rendering.html

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

Forward Rendering

FS는 Fragment Shader

Forward Rendering은 이름에서도 유추할 수 있듯이 그래픽 파이프라인을 따라 선형적으로 화면에 그릴 Geometry의 정보를 전달하여 타겟을 렌더링한다.

Deferred Rendering

그러나 Forward Rendering 방식에는 단점이 존재하는데 Light를 적용하는 과정에서 Forward Rnedering은 빛을 가장 마지막에 계산하기 때문이다.

최근에 출시되는 게임들의 경우 플레이 중에 다양한 형태로 빛이 변화하는 연출이 많은데 빛의 양상이 바뀔때마다 순방향으로 모든 Shader들을 일일이 계산해주는 것은 비용적으로 큰 부담이 들 수 밖에 없다.

그래서 Deferred Rendering의 경우 타겟을 렌더링하기위해 사용되는 모든 요소를(유니티 문서에서는 Material로 표현) GBuffer라고 부르는 버퍼에 저장한다.

Forward Rendering에서는 이와같은 정보들이 유실되기때문에 빛의 변화를 적용하려면 오브젝트를 처음부터 다시 렌더링해야하지만 Deferred Rendering에서는 GBuffer에 각 렌더링 요소들이 저장되어있기때문에 이를 재활용하여 빛의 변화만 다시 적용할 수 있기 때문에 효율적이다.

여담

  • 최신 게임들은 Deferred Rendering을 대부분 적용하기에 마치 Deferred 방식이 Forward Rendering 방식보다 좋은가? 라고 생각할 수도 있지만 꼭 그렇지는 않다, Deferred Rendering 방식의 경우 렌더링 요소들을 GBuffer에 저장을 해야하기때문에 그만큼 더욱 좋은 성능의 하드웨어를 요구하게된다(=사양이 올라간다..)

  • 언리얼 엔진의 경우 3버전 까지는 Forward Rendering을 사용하고 있었지만 4버전부터 Deferred Rendering을 사용한다. 물론 그렇다고해서 Forward Rendering 방식을 폐기한것은 아니고 5에서도 기능상으로 지원은 하고 있다.
    (참고 : https://docs.unrealengine.com/5.0/ko/forward-shading-renderer-in-unreal-engine/)

profile
https://github.com/gimhema, https://gimhema.tistory.com/

0개의 댓글