이론/그래픽스

(기초) 포워드 VS 디퍼드 렌더링

tsyang 2022. 7. 13. 00:48

렌더링 방식


 

유니티에서 지원하는 렌더링 방식

 

언리얼이나 유니티같은 상용 엔진은 기본적으로 포워드(Forward) 렌더링디퍼드 (Deferred) 렌더링 방식을 지원한다. 이거 두개가 젤 유명한데 뭔 차이일까?

 

디퍼드 렌더링 (Deferred Rendering)


 

디퍼드 랜더링은 많은 수의 동적 라이트를 괜찮은 성능으로 처리할 수 있다. 따라서 PC 및 콘솔 게임에서 널리 쓰인다. 

 

그러나 기기의 성능이 어느 정도 받쳐주어야 하며, 한 번에 여러 개의 버퍼에 한꺼번에 렌더링 하는 멀티 렌더 타겟 기능이 필요하다.

 

멀티 렌더 타겟을 이용해서 여러 개의 지오메트리 버퍼(G버퍼)에 불투명(Opaque)한 오브젝트들의 정보를 렌더링한다. 이때 버퍼에는 다양한 정보가 기록되고, 모든 오브젝트들을 버퍼에 렌더링 한 후 이 정보들을 토대로 라이팅을 처리한다. 최종적으로 프레임 버퍼에 이를 출력하여 씬의 렌더링이 완성된다.  이를 위해 디퍼드 렌더링은 G버퍼에 오브젝트들을 렌더링하는 지오메트리 패스와 라잉을 처리하는 라이트 패스가 분리되어 있다. 

 

이렇게 픽셀정보를 메모리에 저장하기 때문에 유연성이 높고 다양한 렌더링 기능(특수효과)를 쓸 수 있다는 장점이 있다.

 

그러나, 투명 오브젝트를 처리할 수 없고 후처리가 어렵기 때문에 이를 위해 포워드 패스와 포스트 프로세싱 패스 등이 더 존재한다. (어쨋든 이것저것 섞어서 처리할 수는 있다는 말)

 

반면 비싼 쉐이딩 연산으로 화면에 보이는 픽셀만 처리하기 때문에 불필요한 쉐이딩 연산을 줄일 수 있고, 여러 실시간 라이트들로 인한 드로우콜에 대한 부담을 줄일 수 있다는 장점이 있다. (어쨋든 빠르다는 말)

 

이렇게 씬이 바로 렌더링 되는 것이 아니라 여러 과정을 거치면서 지연되기 때문에 Deffered(지연된)라는 이름이 붙었다.

 

그러나 이런 방식은 메모리 대역폭이 뒷받침 되어야 하는데 모바일 디바이스에서는 아직 좀 그렇다. 그래서 모바일 디바이스에서는 다음에 다룰 포워드 렌더링을 주로 사용한다.  (고해상도 모니터를 사용할 때도 이런 문제 발생)

 

 

 

 

포워드 렌더링 (Forward Rendering)


이 방식은 모바일 환경에서 주로 쓰인다. 오브젝트와 동적 라이팅이 적으면 성능 부하도 그만큼 적어진다. 그러나 동적 라이트의 갯수나 동적 라이트에 영향받는 오브젝트가 많아지면 성능 저하가 기하급수적으로 커진다.

 

포워드 렌더링은 포워드 라이팅, 포워드 쉐이딩이라고도 부르는데, 사실 디퍼드 이전에 사용되던 전통적인 오브젝트 렌더링 기법이다. 

 

포워드 렌더링은 오브젝트들을 픽셀화 하여 각 픽셀마다 쉐이딩과 라이팅 연산을 더하는 방식으로 렌더링이 진행된다.

 

포워드 렌더링은 일반적으로 디퍼드 렌더링보다 더 나은 퍼포먼스를 보일 수 있으며 디퍼드 렌더링보다 더 나은 안티에일리어싱을 기대할 수 있다. 

 

 


참고

https://docs.unrealengine.com/5.0/ko/forward-shading-renderer-in-unreal-engine/

 

'이론 > 그래픽스' 카테고리의 다른 글

텍스처  (0) 2022.01.22
컬링(Culling)  (0) 2021.12.14
배칭(Batching)  (2) 2021.11.15
드로우콜(Draw Call)  (3) 2021.11.13
병목(Bottleneck)  (0) 2021.11.03