참치김밥은 최고의 한식이다

[유니티] 유니티 그래픽스 최적화 : 라이팅 본문

Unity/최적화

[유니티] 유니티 그래픽스 최적화 : 라이팅

l__j__h 2024. 2. 26. 13:57

포워드 렌더링 VS 디퍼드 렌더링

포워드 렌더링 (Forward Rendering)

전통적인 방식의 렌더링으로 모바일 기기에서는 아직 포워드 렌더링이 주로 사용된다.

Mesh 하나를 그릴 때마다 모든 계산을 한 번에 시행하기 때문에, 라이팅의 계산 수가 Mesh의 수에 비례한다.

따라서 동적(리얼타임) 라이트가 많거나, 동적 라이트에 영향받는 오브젝트가 많아지면 성능에 그만큼 부담이 된다.

하지만 포워드 렌더링은 Mesh를 하나씩 처리하므로 반투명 처리 시 유용하다. 또, 오랫동안 사용된 렌더링 방식이기 때문에 해결책이 만들어져 있는 경우가 많다.

 

디퍼드 렌더링 (Deferred Rendering)

디퍼드 렌더링은 많은 양의 리얼타임 라이트를 효율적으로 처리할 수 있다. 여러 개의 지오메트리 버퍼(G-Buffer)에 불투명(Opaque)한 오브젝트들의 정보를 렌더링하는 멀티 렌더 타겟(MRT, Multi-Render Target) 방식을 이용한다. 모든 오브젝트들을 G버퍼에 렌더링하면, 라이팅 프래그먼트 셰이더에서 한꺼번에 처리하고 최종적으로 프레임 버퍼에 출력해서 씬을 렌더링한다. 이처럼 라이팅 처리를 마지막까지 지연시킨 후 처리한다고 하여 디퍼드(Defferred, 지연된) 렌더링이라는 이름이 붙었다.

디퍼드 렌더링은 라이팅 처리가 오브젝트 단위로 일어나지 않기 때문에, 포워드 렌더링과 달리 리얼타임 라이트의 수가 늘어나도, 성능적으로 큰 부담은 되지 않는다.

 

+)

G-Buffer ?

G Buffer에는 디퓨즈(Diffuse),  스크린 스페이스 노멀, 스크린 스페이스 뎁스, 스페큘러(Specular), Smoothness 등의 정보가 기록된다. 이 G Buffer에는 오브젝트들을 렌더링하는 지오메트리 패스라이팅을 처리하는 라이팅 패스가 분리되어 있다.

지오메트리 처리와 라이팅 처리가 분리되어있다는 말은, 지오메트리 처리가 끝난 후 화면에 보이는 부분에 대해서만 라이팅 연산을 할 수 있다는 말이다. 따라서, 비싼 쉐이딩 연산으로 화면에 보이는 픽셀만 처리할 수 있기 때문에 불필요한 쉐이딩 연산을 절약할 수 있다. 또한, 많은 수의 리얼타임 라이트에 대해서 드로우콜 부담을 줄일 수 있다.

하지만 아무래도 여러 개의 버퍼가 필요하기 때문에 기본적인 메모리 스펙이 받쳐주어야 한다. 때문에 PC나 콘솔 게임에서는 널리 사용되지만, 모바일 기기에서는 아직 무리가 있다. (G버퍼를 처리하기 위해 높은 메모리 대역폭이 필요)

또한 멀티 렌더 타켓 지원 사항도 디바이스마다 다르기 때문에 작동을 보장하긴 어렵다고 한다.

 

   

728x90