}

유니티 SRP Batcher, 너 어디까지 허용되니?

SRP Batcher가 “같은 셰이더 Variant(= Keyword 집합)” 만 묶어 준다는 사실은 많이 알려져 있지만, 무엇이 Variant를 갈라놓고 어디까지 다른 값을 허용하는지는 문서 곳곳에 흩어져 있습니다.

 

아래 표에 허용 범위 / 배제 범위를 정리하였 세 가지 배칭 기법의 세부 비교에 대해 알아보겠습니다!


요약(복습)

  • Shader Variant 분리 조건Pass, Shader Keywords, CBUFFER 레이아웃 3가지입니다. Texture·Color 값이 달라도 상관없지만 Keyword 플래그가 하나라도 다르면 SRP Batcher가 끊기게 됩니다.
  • Static Batching 은 머티리얼만 공유하면 메시를 통째로 합쳐 1 드로우가 가능하지만, RAM·VRAM이 상당히 늘어나게 됩니다.
  • GPU Instancing 은 같은 Mesh+Material 조합을 1023 개까지 한 번에 그릴 수 있어 드로우콜을 가장 크게 줄일 수 있습니다.
 

유니티 SRP Batch에 대해 #Draw Call #Batch #Render State

나는 문뜩 궁금해졌다. SRP Batch는 같은 Shader를 공유하는 메테리얼을 사용하면 드로우콜 비용이 줄어든다는 것 알게 된 이후 그렇다면 왜 굳이 Texture Altas를 사용하는 것인지? 너무 궁금해졌다. 

wlsdn629.tistory.com

 

유니티 GPU Instancing에 대해서 #동적 객체 최적화 방법

Instancing이란? Instancing은 주로 '복제' 또는 '반복 생성'의 개념을 뜻합니다. 특정 객체, 데이터, 또는 구조의 여러 인스턴스를 생성하고 관리하는 과정을 포함됩니다. 유니티에서 Instancing이라는 개

wlsdn629.tistory.com


SRP Batcher ― Variant 분기 조건 & 허용 범위

구분  같으면 한 배치 다르면 새 Variant
→ 배치 분리
파이프라인 Pass 동일 Pass
(예: URP Forward, HDRP GBuffer)
다른 Pass
Shader Keywords
(multi_compile / shader_feature)
전체 Keyword 집합이
완전히 동일
키워드 ON/OFF 차이
한 글자라도 → 다른 Variant
Material CBUFFER
레이아웃
타입·순서·오프셋이 동일 레이아웃 다름

 


Variant를 갈라놓는 Keyword 플래그 전부 정리

범주 대표 Keyword 예시 언제 켜지나? 영향
표면유형
블렌딩
_SURFACE_TYPE_TRANSPARENT, _ALPHATEST_ON, _BLENDMODE_ADD -Surface Type(Opaque/Transparent)
- Alpha Clip 등 토글
ON/OFF 다르면 
조명
그림자
_MAIN_LIGHT_SHADOWS, _ADDITIONAL_LIGHTS, _SHADOWS_SOFT Quality Settings의
라이트/그림자 옵션
그림자 품질·라이트 개수 차이
노말맵 사용
여부
_NORMALMAP, _DETAIL_MULX2, _PARALLAXMAP, _EMISSION 머티리얼에서 해당 맵 슬롯에 텍스처 넣을 때 자동 Enable 맵 사용 유무
더블‑사이드 _DOUBLESIDED_ON Double‑Sided GI 체크 켜고 끄면 

배치를 끊지 않는 요소

배치를 끊지 않는 요소

항목 이유
Base Map 색·텍스처·메탈릭·러프니스(스무니스) 값 값만 GPU 버퍼에 순차 업로드 
Per‑Renderer MaterialPropertyBlock 값 MPB는 머티리얼 ID를 변경하지 않음
러닝타임 EnableInstancing 체크 Instancing 플래그는 Keyword가 아님

 허용 : _BaseColor 값이 전부 달라도 OK, 서로 다른 텍스처 사용 OK. 값은 SRP Batcher가 GPU 버퍼에 순차로 써 주기 때문.
 비허용 : Emission ON/OFF, _SURFACE_TYPE_TRANSPARENT 토글, _NORMALMAP 여부 등 Keyword 변화.

 

최적화 약간의 꿀팁! ㅎㅎ 끝까지 열심히 공부한자는 볼 수 있는

 

  • Keyword 차이 : Frame Debugger → Break Reason "different shader keywords" 를 확인하고 필요 없는 맵·기능 끄기!
  • 배경 지오메트리 : Static Batching ✓ (메모리 여유) → 아니면 SRP Batcher+LOD.