동적 배칭
유니티에서의 동적 배칭(Dynamic Batching)은 성능 최적화의 한 방법으로, 유사한 그래픽 요소를 하나의 그룹으로 묶어서 처리하는 기술입니다.
이 과정은 렌더링 시간을 단축시키기 위해 사용됩니다. 동적 배칭의 주요 목적은 여러 개의 작은 메시를 한 번에 묶어서 GPU에 전송하는 것으로, 이를 통해 드로우 콜의 수를 줄일 수 있습니다.
다만 이 묶는 작업은 CPU가 매 프레임 정점을 변환해서 합치는 방식입니다. 즉, 정점이 많아지면 드로우 콜은 줄어들어도 CPU 비용이 더 커질 수 있습니다.
동적 배칭 전제조건
1.
동일한 Material : 배치되는 모든 객체들은 동일한 머티리얼을 공유해야 합니다. 동일한 머티리얼이라 함은 같은 셰이더, 텍스처, 컬러 등을 사용하는 머티리얼을 의미합니다.
a.
완전히 동일한 속성 값을 가진 머티리얼을 사용해야 한다는 뜻입니다.
2.
정점 수 제한 : 동적 배칭은 정점 수에 제한이 있습니다. 동적 배칭은 개별 메시가 일정 정점 수 이하일 때 효과적으로 작동합니다
1.
정점 속성 900개 이하, 정점 225개 이하의 메시에서 동적 배칭이 적용됩니다.
1.
여기서 900은 정점 개수가 아니라 정점 속성의 개수입니다. 셰이더가 위치, 노멀, UV를 쓰면 최대 225 정점, 여기에 UV1과 탄젠트까지 쓰면 180 정점 정도로 더 줄어들죠.
3.
게임 오브젝트의 활성 상태 : 비활성화된(Disabled) 게임 오브젝트는 배칭 대상에서 제외됩니다.
4.
GPU 인스턴싱과의 호환성 : 동적 배칭과 GPU 인스턴싱은 서로 다른 최적화 기법이며, 때때로 상호 배타적일 수 있습니다. GPU 인스턴싱을 사용하는 경우 동적 배칭이 적용되지 않을 수 있으므로, 두 기법 간의 호환성을 고려해야 합니다.
동적 배칭과 MPB
여기서 반드시 짚고 가야 할 부분이 있습니다.
MPB는 이전에 GPU Instancing에서 언급했듯이 머티리얼을 새로 인스턴스화하지 않는다는 장점이 있지만, MPB를 적용한 렌더러는 동적 배칭과 SRP 배처의 대상에서 빠져버립니다.
한 마디로, 동적 배칭을 노리고 MPB를 쓰는 건 오히려 배칭을 깨는 선택인 거죠.
MPB가 제 역할을 하는 건 GPU 인스턴싱 쪽입니다. 인스턴싱은 오브젝트마다 다른 값을 넘겨야 하는데, 그 통로가 바로 MPB거든요.
단, 배칭이 깨지는 걸 감수하고 쓰는 경우에 한합니다.
MPB를 굳이 사용할 필요 없이 몇 개의 머티리얼의 속성을 변경하는 경우에도 MPB를 동적 배칭에서도 사용하면 좋다고 생각합니다.
그에 대한 제 개인적인 의견은 아래 링크에 있습니다.




