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과 관련된 기능이다.
'게임 개발 > 개발 공부' 카테고리의 다른 글
[ 개발 공부 ] 객체지향의 4대 특징 (0) | 2024.05.22 |
---|---|
[ 개발 공부 ] Dynamic / Static Batching 최적화 (0) | 2024.05.21 |
[ 개발 공부 ] Unity Coroutine의 동작 원리 및 특징 (0) | 2024.05.17 |
[ 개발 공부 ] 싱글 스레드에서 비동기 방식을 구현하는 방법 in Unity Coroutine (0) | 2024.05.16 |
[ 개발 공부 ] IEnumerator, IEnumerable (0) | 2024.05.15 |