[ 개발 공부 ] Unity Batching 개념
최근에 최적화 공부를 하며 배운 Unity Batching이다.
배칭( Batching )이란?
드로우 콜을 줄이기 위해 동일한 메테리얼을 공유하는 오브젝트를 묶어 한 번에 드로우 콜해주는 작업이다.
유니티 오른쪽 위 스탯창을 열어보면 Batches라는 값과 SetPass Call이 있다.
Batches라는 값이 무엇이냐면 DrawCall과 갖가지 렌더 상태 변경을 합한 값이다.
Batches = Draw Call + 갖가지 렌더 상태 변경
근데 갖가지 렌더 상태 변경 중에는 Set Pass Call이 포함된다.
Set Pass Call이 나뉘어져 Stat창에 표기되어 있는데 왜냐하면, Set Pass Call은 GPU에 부하를 주기 때문이다.
저 커맨드들은 GPU에 상태값을 전달하는 명령이라는 공통점이 있다.
그렇기 때문에 Set Pass Call은 한 번 실행된 이후 Draw Call만 실행된다. 어떠한 과정으로 실행되냐면,
같은 메테리얼을 가진 오브젝트, A를 한 번 생성한 이후 생성되는 A 오브젝트는 이전에 생성할 때 사용한 정보( Set Pass Call에 해당하는 명령들에 대한 정보 )는 맨 처음 생성할 때 전달한 값을 다시 사용한다.
하지만 다른 메테리얼을 가진 오브젝트 B를 생성할 경우 이전에 사용한 정보와 다르기 때문에 Set Pass Call에 해당하는 명령들을 GPU에 다시 전달해야 한다. 문제는 저 명령들이 GPU 입장에서 꽤나 비용이 많이 드는 작업이다.
그렇기 때문에 Set Pass Call을 줄이면 게임을 최적화하는데 도움이 될 것이다.
Set Pass Call을 최대한 적게 호출하면서 Draw Call을 수행하는 것을 유니티에서 Batching이라고 표현한다.
Sprite Atlas 같은 것도 Batching과 관련된 기능이다.