먼저 배치(Batch)의 개념에 대해 알아보자.
Batch란 DrawCall에 RenderState 변경을 포함한 넓은 개념의 DrawCall이다. 즉, RenderState의 변화가 없다면, DrawCall과 Batch는 같은 의미이다.
SetPassCall은 Material의 변화를 의미한다. 다시 말해 Mesh를 제외한 RenderStateChange를 발생시키는 명령이다. 굳이 이러한 개념을 구분하는 이유는 다음과 같은 GPU의 작동 방식 때문이다.
CPU에서 DrawCall이 실행되면, Material이 변화되었는지 체크하게 된다. 그리고 만약 Material의 변화가 없다면 SetPass Call 없이 바로 렌더링을 진행한다. Batch의 갯수를 줄이기에는 현실적인 한계가 있기 때문에 보통은 SetPassCall을 줄이는 방식으로 최적화가 진행된다.


간단한 예를 들면 위쪽 그림의 경우에는 10개의 Mesh가 존재하지만, 하나의 Material을 공유한다.
따라서 SetPassCall은 맨 처음 1회만 발생하고, 나머지 Batch에서는 SetPassCall이 발생하지 않는다.
반면 아래쪽 그림의 경우에도 모든 Mesh들이 서로 다른 Material을 가지고 있다, 따라서 10개의 Batch가 발생할 때, 아래쪽 그림은 10번의 SetPassCall이 발생하게 된다.