[ 개발 공부 ] Unity Batching 개념

2024. 5. 20. 16:00게임 개발/개발 공부

최근에 최적화 공부를 하며 배운 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과 관련된 기능이다.