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.