유니티에서 정적배칭(static batching) 사용하기

유니티에서 정적배칭(static batching) 사용하기

정적배칭을 사용하면 움직이지않고(static) 동일한 재질을 공유하는 오브젝트들을 일괄 처리함으로써 드로우콜을 줄일수있다.

정적배칭을 활성화하면 씬을 시작할때 동일한 재질을 공유하는 정적 오브젝트들(static objects)을 결합하여 하나의 공유된 버텍스와 이를 위한 인덱스 버퍼를 구축한다. 오브젝트들은 공유된 지오메트리와 재질을 사용하기때문에 드로우콜 사이의 상태변경을 거의 일으키지않으며 결과적으로 batches 및 드로우콜의 개수를 줄일수있다.

docs.unity3d.com/Manual/DrawCallBatching.html

1)새로운 씬에서 라이트를 제거하고 카메라의 clear flags를 solid color로 변경하였다(batches:1)

 

2)씬에 10개의 기본 오브젝트를 생성하고 동일한 재질을 할당하였다. 현재 프로젝트에서 배칭(static batching, dynamic batching)을 비활성화하였기때문에 동일한 재질을 사용하는 10개의 오브젝트에 대해 모두 드로우콜을 호출한다.(batches:11)

 

3)정적배칭을 사용하려면 오브젝트가 정적이고 변형되지않는다는것을 명시해야한다. 모든 오브젝트에 대해서 batching static을 설정한다.

 

4)정적배칭을 활성화하려면 project settings에서 player의 static batching에 체크한다.

 

5)게임플레이 버튼을 클릭하여 씬을 로딩하면 변화를 확인할수있다. 모든 오브젝트가 동일한 재질을 공유하고있기 때문에 10개의 오브젝트를 일괄적으로 처리한다(batches:2)

 

6)오브젝트의 mesh filter 컴포넌트에서 결합된 하나의 메시가 할당되어있는것을 확인할수있다(combined mesh)

결합된 메시는 씬을 시작할때 생성되며 런타임에서 추가적인 버텍스 연산을 하지않는다. 그래서 정적배칭은 동적배칭과 달리 단위 오브젝트의 버텍스 개수에 제한이 없다는 장점이있다. 

 

batches:3

 

batches:4

 

 

7)결합한 메시를 사용하여도 게임 오브젝트들이 독립적으로 컬링될수있다.

 

 

8)정적배칭의 사용은 새로 결합된 지오메트리를 저장하기위한 추가적인 메모리를 요구한다. 만약 씬의 수많은 나무 오브젝트들에 대하여 정적배칭을 사용한다면 심각한 메모리 과부하를 유빌할것이다.

static batching 비활성화

batches의 수치는 오브젝트의 개수와 동일하지만 모든 오브젝트가 한개의 나무 메시를 공유한다.

 

static batching 활성화

batches의 수치가 낮아지지만 다수의 메시를 결합한 하나의 메시를 추가로 저장하여 메모리 사용량이 증가한다.

 

9)결합한 메시의 최대 버텍스 개수는 64k이다(batch limits) 

아래에서 카메라에서 렌더링되는 오브젝트의 버텍스 개수는 300k 이상이다.

 

10)결합한 메시의 버텍스 개수가 64k를 초과하면 추가적인 combined mesh를 생성한다(combined mesh, combined mesh2, combined mesh3, combined mesh4.combined mesh5)

 

댓글

Designed by JB FACTORY