Post

[ STUDY/유니티 ] 2022. 6. 16. 11:15

- Texture 또는 Material이 다를 경우 별도의 Draw call이 된다. 

유니티는 씬의 Texture 또는 Material에 대해 별도의 Draw call을 발행합니다.

 

참고로 Draw call은 실시간으로 카메라를 통해 한 프레임의 화면을 만들어 내는 동안에 CPU가 GPU에게 오브젝트를 그려라 라는 명령을 내리는 것입니다. 이 DrawCall이 늘어나게되면 자동으로 GPU가 할 일이 늘어나게되며 성능이 떨어지게됩니다.

 

이런 경우에는 스프라이트 아틀라스를 써서 줄이는 방법이 있습니다. (2D 프로젝트에만 적용가능)

 

스프라이트 아틀라스(Sprite Atlas) 는 여러 개의 텍스처를 단일 텍스처로 결합하는 에셋입니다. Unity는 여러 개의 드로우 콜을 발행하는 대신 이러한 단일 텍스처를 호출함으로써 하나의 드로우 콜을 발행할 수 있습니다. 

 

 

먼저 아틀라스를 만들기위해서는 ProjectSetting에 들어가서 SpritePacker의 Mode를 disable이 아닌 always Enabled로 바꿔줍니다.

 

 

그리고 프로젝트 창에서 Create- 2D-Sprite Atlas를 눌러줍니다. ( 왜인지는 모르겠지만 Sprite Atlas를 생성하는 버튼의 위치가 바꼈습니다.)

 

그리고 해당 material(image)가 있는 폴더를 Objects for Packing에 추가 후 Pack Preview 를 해줍니다.

Pack Preview를 하게되면 오른쪽과 같은 화면이 나오게됩니다.

 

Sprite Atlas를 하기 전
Sprite Atlas를 하고난 후

다시 플레이를 해보면 Batches(Draw call + SetPass call)가 폴더안에 있는 이미지들을 하나로 묶어 표현한만큼 기존 4에서 1이 되었습니다.

 

 

현재 3D프로젝트를 하고있는입장에서.. 2D프로젝트에서만 쓰이는게 너무 아쉽긴하지만 Batches의 중요성을 깨닫게되면서 만약 제가 2D프로젝트를 하게된다면 최적화할때 유용하게 써먹을것같습니다.

 

▲ top