[ 개발 공부 ] Dynamic / Static Batching 최적화

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

 

Batching을 통해 최적화를 할 때 사용하는 방법들인

Dynamic / Static Batching에 대해 알아보자

 

! 3D 기준으로 설명한다. !

2D 스프라이트 Batching은 Static/Dynamic 설정이 안 되어있더라도 자동으로 Batching된다.

 

Static Batching

정적인 오브젝트를 대상으로 하는 배칭 기법이다.

위치, 회전, 스케일 등의 변화가 없는 오브젝트

 

스태틱 배칭은 폴리곤 수와 상관없이 같은 메테리얼을 사용하는 오브젝트들하나의 메시로 묶어준다.

단, 메테리얼이 1개라고 해서 무조건 1개의 배치로 합쳐지지는 않는다. 빛 같은 요소로 인해 배칭이 나뉠 수 있다.

 

주의할 점

메테리얼을 메모리에 올려놓고 사용하기 때문에 적은 메모리, 과도하게 많은 메모리를 사용할 때는 피해야 한다.

 

Dynamic Batching

동적으로 움직이는 오브젝트끼리 Batch + Static 플래그가 체크되어 있지 않은 오브젝트 대상으로 유니티가 알아서 해줌.

OtherSettings 설정에서 Dynamic Batching 플래그를 켜주어야 한다.

 

다이나믹 배칭작은 메시들 몇 개하나의 큰 메시로 합쳐서 드로우콜을 줄이는 방법이다.

 

알아야하는 사실

1. 버텍스가 너무 많은 메시는 버텍스를 수집하면서 오버헤드가 드로우콜보다 높아져서 제외된다.

( 버텍스 갯수가 180 ~ 300개 미만인 메시이며 같은 메테리얼일 경우만 배치해준다. )

 

2. CPU를 이용해 World Space로 Transform을 할 때 걸리는 시간 < GPU를 이용해 World Space로 Transform을 할 때 걸리는 시간 + Render State를 바꿔 Draw하는데 걸리는 시간인 경우 사용한다.

 

알아본 결과, 옛날에는 괜찮았던 것 같으나 현재로서는 Dynamic Batching이 유리하지 않을 경우가 많다.

메시를 하나로 합치는 과정을 CPU에서 하는데, 이 작업이 GPU에서 그냥 드로우 콜을 수행하는 것보다 비용이 더 적을 경우에만 유리하다.

 

요즘 GPU가 좋아져서..