3D Graphics

Deferred Render

hunhun4949 2024. 9. 9. 14:12

Deferred Rendering이란?

Deferred Rendering은 조명 계산을 효율적으로 처리하기 위해 사용하는 렌더링 기법이다.

 

Forward Rendering의 경우 오브젝트가 100개가 있고 빛이 100개가 있으면 100*100, 총 1만번의 연산이 필요하다.

하지만 Deferred Rendering의 경우 모든 오브젝트에 대해 빛 연산을 하지 않는다. 대신 화면에 출력된 렌더타겟에 대해서만 빛처리를 해주는거다. 

 

예시를 들면 선화만 있는 그림에 색, 명암을 넣어주는거다. 오브젝트 100개가 있든 1000개가 있든 화면에 비춰진 도화지(RenderTarget)에 대한 빛처리만 하면되서 빛의 개수만큼만 연산하면 된다.

 

그럼 카메라에 비춰진 이미지만 있으면 되는거냐? 그것은 아니다.

우선 Deferred Rendering 방식으로 빛연산을 하기 위해서는 카메라에 비춰진 물체의 기하 정보를 받아와야한다. 기하정보에는 위치, 법선, 색상, 깊이 등의 정보들이 담겨져 있고 이것을 보통 G-Buffer에 담아서 보내준다.

 

정리하면 Deferred Render는 기하정보를 받는 기하단계랑 수집된 기하 정보를 바탕으로 조명계산을 하는 조명 단계, 이렇게 두 단계로 렌더링이 이루어 진다.

 

 

Deferred Rendering의 장점

  • 다중 조명 처리의 효율성
    • forward rendering에서는 각 물체마다 모든 조명에 대해 조명 계산을 반복하지만, Deferred Rndering은 조명 계산식이 픽셀 단위로 한번만 수행된다.
    • 수십 개 이상의 조명이 존재하는 장명에서도 성능이 크게 떨어지지 않는다.
  • 복잡한 조명 효과 구현 가능
    • G-buffer에 있는 다양한 정보를 토대로 복잡한 조명 효과를 쉽게 추가할 수 있다.
  • 조명과 기하 정보의 분리
    • 조명과 기하 정보를 완전히 분리함으로써 다양한 조명 효과를 쉽게 조정하거나 추가할 수 있다.

Defferred Rendering의 단점

  • 메모리 사용량 증가
    • G-buffer에 여러 정보를 저장하기 때문에 메모리 사용량이 크게 증가한다.
  • 투명도 처리 어려움
    • 투명한 물체를 여러 픽셀이 겹쳐 보이는데, Deferred Rendering은 G-buffer에 단일 픽셀 정보만 저장하기 때문에 투명도 처리가 까다롭다.
    • 이 문제를 해결하기 위해 forward rendering과 혼합하여 사용하는 hybrid 방식을 채택할 수 있다. 즉, 투명한 물체만 forward 방식으로 처리하는 방법이다.
  • MSAA(멀티 샘플링 안티앨리어싱) 처리 어려움
    • Deferred Rendering은 G-buffer를 사용하기 때문에 멀티 샘플링 안티앨리어신 처리가 복잡하고, 성능이 떨어진다.
    • MSAA 대신 FXAA나 TAA같은 포스트 프로세싱 기반의 안티앨리어싱을 사용하는 것이 일반적이다.

 

Deferred Rendering의 활용 사례

Deferred Rendering은 다수의 동적 조명을 사용하는 씬에서 매우 유용합니다. 많은 수의 조명이 있는 장면에서도 성능이 유지되기 때문에, 게임이나 대규모 실시간 시뮬레이션에서 자주 사용됩니다.

  • 실시간 조명이 많은 게임: FPS, 액션 게임 등에서 많이 사용됩니다. 예를 들어, Battlefield 시리즈는 Deferred Rendering을 사용하여 다수의 조명을 처리합니다.
  • 후처리 효과가 중요한 게임: SSAO, Bloom, Screen-Space Reflections(SSR) 같은 화려한 후처리가 필요한 게임

 

결론

Deferred Rendering은 다중 조명이 필요한 복잡한 장면에서는 매우 유용하다. 단 메모리 사용량투명도 처리에 대한 제약이 있으니, 프로젝트 요구 사항에 맞게 적절히 사용하자.

'3D Graphics' 카테고리의 다른 글

Geometry Shader  (0) 2024.09.12
그림자 생성  (2) 2024.09.09
DirectX11 TEXTURE2D DESC  (3) 2024.09.07
DirectX11 RTV, SRV등등 View의 역할  (1) 2024.09.07
Skinning Animation  (4) 2024.08.28