멈추지 않고 끈질기게

[Graphics] 포워드 렌더링 vs 디퍼드 렌더링 본문

Graphics

[Graphics] 포워드 렌더링 vs 디퍼드 렌더링

sam0308 2023. 3. 2. 11:21

※ 해당 포스팅은 개인의 공부 정리용 글입니다. 틀린 내용이 있다면 추후 수정될 수 있습니다.

※ 해당 포스팅은 유니티 코리아 공식 유뷰트 계정의 영상을 참고하였습니다.

(출처: [유니티 Tips] 알쓸유잡)

 

 

 

 

이번 포스팅에서는 포워드 렌더링과 디퍼드 렌더링의 차이에 대해 알아보겠습니다.

서문

 3D 게임이 발전하면서 그에 따라 라이팅 기법도 발전해왔습니다. 최신 3D 게임들은 광원을 여러종류 사용하여 최대한 사실적인 라이팅을 표현하며, 실시간 라이팅(Realtime Lighting)을 많이 사용합니다. 다만 라이팅을 많이 사용할수록 성능적인 부담도 커지므로, 적합한 라이팅 처리를 위해 포워드 렌더링과 디퍼드 렌더링 방식으로 나뉘게 되었습니다. 

 

포워드 렌더링(Forward  Rendering)

 포워드 렌더링은 기존의 3D 게임에서 사용해 온 전통적인 렌더링 방식으로, 디퍼드 렌더링 방식이 추가되면서 별도로 포워드 렌더링으로 부르게 되었습니다. 포워드 렌더링 방식에서는 화면에 그려질 오브젝트를 골라내는 컬링 연산이 끝난 후, 오브젝트 단위로 버텍스 셰이더, 프래그먼트 셰이더를 거쳐 렌더링하며 프래그먼트 셰이더에서 라이팅 처리까지 수행합니다.

 

그림 1. 포워드 렌더링(Forward Rendering)

 다만 이 방식은 매번 오브젝트 단위로 라이팅을 처리하기 때문에, 여러개의 실시간 광원이 존재할 경우 성능 부담이 크게 증가하게 됩니다. 드로우 콜 측면에서 보면, 씬에 오브젝트가 10개 존재하고 실시간 라이팅 광원도 10개 존재할 경우 10 * 10 = 100번의 드로우 콜이 발생하게 됩니다. 따라서 실시간 광원을 여러개 사용하여 풍부한 라이팅을 보여주고 싶다면 후술할 디퍼드 렌더링이 적합합니다.

 

 

디퍼드 렌더링(DefferredRendering)

 디퍼드 렌더링은 많은 양의 실시간 라이팅을 처리하기에 좋은 방식 입니다. 멀티 렌더 타겟(MRT, Multi-Render Target) 방식을 이용하여 여러개의 지오메트리 버퍼(G-버퍼)에 오브젝트의 다양한 정보들을 한꺼번에 렌더링합니다. 대표적인 오브젝트 정보들은 다음과 같습니다.

 

- Diffuse : 광원의 난반사 -> 오브젝트의 고유 색상

- Specular : 광원의 정반사 -> 오브젝트 표면의 하이라이트

- Smoothness : 오브젝트의 표면의 평활도. 높을수록 금속처럼 표면에 주변이 비춰짐 

- Depth : 오브젝트와 카메라 간 거리

 

  이렇게 오브젝트에 대한 정보들을 모아 G 버퍼에서 렌더링한 후, 라이팅은 이후에 라이팅 프래그먼트 셰이더에서 한꺼번에 처리합니다. 라이팅 처리를 마지막까지 지연시킨 후 처리한다고 하여 디퍼드(Defferred, 지연된) 렌더링이라 합니다. 라이팅 처리가 오브젝트 단위로 일어나지 않기 때문에, 포워드 렌더링과 달리 오브젝트와 광원의 수가 늘어나도 라이팅 처리의 비용이 급격하게 증가하지 않습니다. 따라서 디퍼드 렌더링을 사용하면 라이팅 처리 비용에 큰 부담을 느끼지 않고 실시간 광원의 수를 늘릴 수 있습니다.

 

그림 2. 디퍼드 렌더링(Defferred Rendering)

 단, 디퍼드 렌더링은 멀티 렌더 타겟을 이용하기 때문에 높은 하드웨어 성능(주로 메모리 대역폭)을 요구합니다. 앞서 얘기했듯이 멀티 렌더 타겟 방식은 오브젝트 정보들을 여러개의 버퍼에 한꺼번에 렌더링하므로, 이를 처리할 수 있는 높은 대역폭이 필요합니다. 모바일 기기의 메모리는 PC나 콘솔에 비하여 대역폭이 비교적 낮기 때문에, 디퍼드 렌더링은 PC, 콘솔 게임에서 주로 사용됩니다. 다만 최근에는 모바일 기기의 메모리 대역폭도 크게 발전하는 중이기 때문에, 모바일 게임에서도 사양에 따라 디퍼드 렌더링을 사용하는 추세라고 합니다.