글 작성자: Doublsb

최근 Unity 2022 LTS 버전을 사용해보면서 URP도 겸사겸사 사용해보게 되었다.

대체 Built-In과 뭐가 다른가 싶어서 유니티 공식 문서를 받아 공부해보고 있는데, 정리가 필요하다고 느꼈다.

 

다만 이론적인 것 말고, 실무에서 무엇이 달랐는지 하나씩 정리해보려 한다.


SRP Batcher가 뭔지 요약해서 알려달라

간단하게 말하면, 같은 쉐이더를 쓰는 오브젝트를 그릴 때 렌더링 성능을 개선해주는 녀석이다.

'같은 머티리얼을 쓰면 Draw Call이 하나'라는 게 '같은 쉐이더를 쓰면 SetPass Call이 하나'가 된 것이다.

 

즉, 같은 쉐이더를 쓰는 것만 신경쓰면 성능 개선을 이뤄낼 수 있는 개꿀 기능이라는 것이다.

다만, 파티클 시스템과 UI에는 적용되지 않는다.

 

 

뭘 어떻게 성능 개선을 한다는거냐

URP로 변경하는 과정에서, 유니티는 엔진의 로우레벨 부분을 수정했다고 한다.

그 과정에서 다른 머티리얼을 사용하더라도 쉐이더가 같을 때 속도를 높일 수 있도록 개발했다고 한다.

 

Built-In에서는 머티리얼이 다를 때마다 SetPass Call이 일어났다. 즉, 원래는 머티리얼 데이터를 GPU에 전달해줘야만 했다.

그러나 SRP Batcher를 사용하면 GPU 버퍼에 머티리얼 데이터가 유지되고, SetPass Call을 줄일 수 있게 된다.

 

유니티 공식 문서 (https://docs.unity3d.com/kr/2021.1/Manual/SRPBatcher.html)

 

왼쪽과 오른쪽을 비교하면, GPU에 데이터를 업로드하는 부분이 사라지고, 저장되어 있던 머티리얼 데이터를 바인드하는 부분만 남아있는 것을 볼 수 있다.

 

 

 

주의할 점은 없냐

쉐이더가 SRP Batcher를 지원하는지, 오브젝트가 메쉬가 맞는지 확인하기만 하면 된다.

SRP Batcher에서 not compatible이면 불가능하다

 

 

프레임 디버거에서 배칭 상태를 확인해볼 수 있는데,

스크린샷에서는 23개의 드로우 콜이 호출되었지만 SRP Batch로 인해 하나로 묶여 있는 것을 확인할 수 있다.

반응형