털털한 개발자, 긔저기의 개발공간

모바일 플랫폼으로 개발을 하다보면 최적화에 신경쓰게 되는 경우가 많다.

 

여러 최적화 방법중에 중요한 한가지 방법이 Draw Call을 줄이는 것인데

 

가장 기본적인 최적화라고 말하자면 Batching 이라고 할 수 있을 것 같다.

 

Prifiler에 랜더링 부분, Draw Call과 Batches 를 볼수 있다.

 

Batching 이란 간단하게 설명해서 비슷한 오브젝트 끼리 한번에 드로우 되는것이라고 보면 된다.

 

즉 같은 오브젝트 10개가 있으면 보통 10번의 Draw Call이 불려지는데

 

이를 한번에 묶어 랜더링 함으로써 1번의 Draw Call로 10개의 오브젝트를 불리는 것이다

 

배칭 기법과 배칭 설정 등은 링크로...

 

https://docs.unity3d.com/kr/2018.1/Manual/DrawCallBatching.html

 

 

 

본론으로 넘어가서 Batching 작업 중 같은 오브젝트, Material을 사용하고 있는데 Batch가 묶이지 않는 경우가 있다.

 

Profiler - Rendering - Open Frame Debugger

 

Batching이 되었을 경우 Dynamic Batch로 묶여서 랜더링이 되야하는데 묶이지 않는경우...

 

Batching이 안된 오브젝트를 선택하면?

 

이렇게 Objects have different materials 인 상태라면 Batching이 안된 경우라고 볼수 있다.

 

내 경우에는 Renderer 컴포넌트의 Material에 직접 접근함으로써 발생하는 문제 였다.

 

요런 코드....

 

Material에 접근해서 값을 바꿔주면 오브젝트가 사용하고 있던 Material의 instance를 만들어 넣어준다.

 

이렇게 말이쥬

 

그렇기에 다른 Material을 사용하는 상황이 되는것이고 Batching 이 되지 않는 것!

 

Material을 직접 접근하지 말고 다른 방법을 사용해보자.