URP는 Built-In과 뭐가 다른가? (1) : SRP Batcher
최근 Unity 2022 LTS 버전을 사용해보면서 URP도 겸사겸사 사용해보게 되었다.
대체 Built-In과 뭐가 다른가 싶어서 유니티 공식 문서를 받아 공부해보고 있는데, 정리가 필요하다고 느꼈다.
다만 이론적인 것 말고, 실무에서 무엇이 달랐는지 하나씩 정리해보려 한다.
SRP Batcher가 뭔지 요약해서 알려달라
간단하게 말하면, 같은 쉐이더를 쓰는 오브젝트를 그릴 때 렌더링 성능을 개선해주는 녀석이다.
'같은 머티리얼을 쓰면 Draw Call이 하나'라는 게 '같은 쉐이더를 쓰면 SetPass Call이 하나'가 된 것이다.
즉, 같은 쉐이더를 쓰는 것만 신경쓰면 성능 개선을 이뤄낼 수 있는 개꿀 기능이라는 것이다.
다만, 파티클 시스템과 UI에는 적용되지 않는다.
뭘 어떻게 성능 개선을 한다는거냐
URP로 변경하는 과정에서, 유니티는 엔진의 로우레벨 부분을 수정했다고 한다.
그 과정에서 다른 머티리얼을 사용하더라도 쉐이더가 같을 때 속도를 높일 수 있도록 개발했다고 한다.
Built-In에서는 머티리얼이 다를 때마다 SetPass Call이 일어났다. 즉, 원래는 머티리얼 데이터를 GPU에 전달해줘야만 했다.
그러나 SRP Batcher를 사용하면 GPU 버퍼에 머티리얼 데이터가 유지되고, SetPass Call을 줄일 수 있게 된다.
왼쪽과 오른쪽을 비교하면, GPU에 데이터를 업로드하는 부분이 사라지고, 저장되어 있던 머티리얼 데이터를 바인드하는 부분만 남아있는 것을 볼 수 있다.
주의할 점은 없냐
쉐이더가 SRP Batcher를 지원하는지, 오브젝트가 메쉬가 맞는지 확인하기만 하면 된다.
프레임 디버거에서 배칭 상태를 확인해볼 수 있는데,
스크린샷에서는 23개의 드로우 콜이 호출되었지만 SRP Batch로 인해 하나로 묶여 있는 것을 확인할 수 있다.
'프로그래밍 > Unity' 카테고리의 다른 글
[알쓸유잡 : 모바일 최적화] 영상 정리하기 (0) | 2024.01.20 |
---|---|
유니티 빌드 중 겪은 문제 정리 (0) | 2023.08.24 |
Unity 인스펙터 꿀팁 알아보기 (0) | 2023.08.03 |
언어권에 따른 String 변환에 주의하자 (0) | 2023.02.20 |
is null 연산은 유니티의 ==를 사용하지 않는다 (0) | 2023.02.09 |
댓글
이 글 공유하기
다른 글
-
[알쓸유잡 : 모바일 최적화] 영상 정리하기
[알쓸유잡 : 모바일 최적화] 영상 정리하기
2024.01.20 -
유니티 빌드 중 겪은 문제 정리
유니티 빌드 중 겪은 문제 정리
2023.08.24 -
Unity 인스펙터 꿀팁 알아보기
Unity 인스펙터 꿀팁 알아보기
2023.08.03 -
언어권에 따른 String 변환에 주의하자
언어권에 따른 String 변환에 주의하자
2023.02.20