SRP Batcher

2019. 5. 27. 15:15Unity Engine/Info

LWRP가 릴리즈 되면서 알아보게 된 기능 중 하나인 SRP Batcher


소개를 보면 CPU Layer의 작업 성능을 크게 향상 시킬수 있다고 한다.
GPU가 아닌 CPU 성능 향상인걸 보고 지오메트리 레이어 전 단계인 배칭 부분의 개선 정도로 생각했는데 방식이 좀 변했다.

 

[기존 방식]

기존의 경우 마테리얼이 교체될 때 배칭이 발생한다. 
사실 유니티 엔진 뿐만 아니라 마테리얼 교체로 인한 Set Buffer나 Parameter에서 오는 오버헤드 최소화는 항상 이슈였다. 이를 위해서 렌더 루프를 들어서기전 오브젝트를 마테리얼 단위로 정렬하는 방법이 가장 많이 사용되어 왔고... 



[SRP Batcher]
유니티의 SRP Batcher는 이 마테리얼 교체 부분의 성능향상을 가져오는 새로운 방법이다.
동일한 셰이더를 쓰더라도 오브젝트를 표현하기 위해 사용되는 텍스쳐, 색상, 기타 파라미터 등에 따라 서로 다른 마테리얼들이 존재한다. 물론 스크립팅을 통해 직접 Set 할 수도 있지만 유니티에서는 주로 마테리얼을 새로 만든다. 

마테리얼 교체가 발생하면 당연히 CPU에서 GPU로 Set이 일어나게 되는데 SRP Batcher는 마테리얼의 속성이 동일하다면(Shader가 동일하다면) 속성의 변경을 GPU에서 처리해 CPU와 GPU의 연결 관계를 줄인다. 그리고 이를 위해 마테리얼의 각 속성 값은 GPU에 영구적으로 저장되는 것으로 보인다.

 

 

그리고 아래는 레가시 렌더 루프와 SRP Batcher의 렌더 루프 플로우 차트. 

왼쪽이 레가시며, 오른쪽이 SRP Batcher이다.


요약하면 GPU 메모리 더 써서 파라미터 관련 정보 영구 보관하고, Set작업을 GPU에서 처리한다.
Shader가 교체되는 경우는 당연히 예외.


[사용법]
이러한 세부적인 내용을 사용자가 직접 만들 필요는 없다.
그냥 옵션을 켜주기만 하면된다.


그리고 스크립팅용 API또한 제공한다.


[제한사항 ]

1. 파티클이나 스키닝 메쉬는 사용 불가. 위 내용보고 의문이 생길수 있는 부분이었는데 확실히 명시되어 있다. 
2. Batcher기능을 제공하는 셰이더를 사용해야 한다. 일반적으로 HDRP나 LWRP에 제공되는 기본 셰이더들이 이에 해당. 

 

아래 사진 처럼 셰이더에 표기 된것만 사용 가능하다.



직접 작성하려면 아래 내용을 준수해야 하는데...


가능하면 그냥 셰이더 그래프로 커스텀 하거나, Git 예제를 기본 Form으로 가져와서 수정해 쓰자.

물론 SRP Batcher기능이 활성화된 오브젝트와 그렇지 않은 오브젝트는 분리되어 그리기 때문에 오브젝트가 섞여있는 경우를 신경 쓸 필요는 없어보인다.

[프로파일링]

프로파일링을 위해 별도의 스크립트가 제공되며, 해당 스크립트는 Git의 예제에 포함된것으로 보인다.

 

Unity-Technologies/SRPBatcherBenchmark

various benchmark scenes for SRP batcher ( both LWRP & HDRP ) - Unity-Technologies/SRPBatcherBenchmark

github.com

 

[지원하는 플랫폼]

베타 버전인 2019.2 또한 곧 릴리즈 될 것으로 보인다.

'Unity Engine > Info' 카테고리의 다른 글

LWRP Renderer feature  (1) 2019.05.29
Unity Adaptive Performance  (0) 2019.04.26
유니티 2019.1 Release  (0) 2019.04.18
Unity FBX Exporter  (0) 2019.03.04
Unity Editor Coroutine  (1) 2019.03.03