Draw Call(Batches)
- Batches(Draw Call) : CPU가 GPU에게 렌더링 할 항목(텍스처)들을 미리 알려주는 것
- 어떤 값을 넘겨주냐에 따라서 Draw Call이 결정
Draw Call 관리가 중요한 이유
- Draw Call이 쌓일수록 전체적인 성능이 급격히 저하
- 모바일은 최대 100개 이하의 Draw Call을 유지해야 함
- Draw Call을 줄이기 위해 Packing을 사용
Packing
- Sprite를 하나로 묶는 것
- 원하는 텍스처들을 가지고 있는 텍스처 뭉치를 만드는 것
Packing 원리
- 텍스처 하나를 Draw Call을 보냄
- 하나의 Draw Call 안에서 두 개의 스프라이트를 Render
- CPU가 GPU에게 텍스쳐를 요청하는 명령을 한 번만 처리할 수 있게 만듦
→ 여러 개의 Draw Call이 하나의 Draw Call로 줄어듦
Legacy Sprite Packer
- 좌측 상단 Window → 2D → Sprite Packer
- 현재 Sprite Packer 모드가 Disabled이기 때문에 위 화면이 뜬다.
- Open Project Editor Settings를 클릭하여 아래 화면으로 넘어감
- Always Enabled(Legacy Sprite Packer) Mode로 전환
- 해당 모드로 전환 시 프로젝트에 있는 Sprite 파일에 Packing Tag 속성이 추가된다.
- 서로 다른 두 Sprite에 같은 Packing Tag “test”를 추가
- 다시 Sprite Packer로 들어가 Pack을 클릭하면 아래와 같이 두 Sprite가 한 공간에 모인다.
- 위는 Packing을 하지 않았을 때, 아래는 Packing을 하고 실행 시 상태이다.
- Batches(Draw Call)이 5였던 것이 Packing을 진행하면 4로 줄어드는 것을 확인할 수 있다.
Sprite Atlas
- Edit → Project Settings → Editor → Always Enabled로 Atlas 기능을 활성화
- 프로젝트에서 Sprite Altas를 생성
- Objects for Packing에 Packing 하고자 하는 Sprite들을 모두 넣은 후 Pack Preview를 클릭
- 실행했을 때 Legacy와 마찬가지로 Batches가 4로 줄어든 것을 확인 가능하다.
Legacy vs Atlas
- 현업에서는 Altas를 더 많이 씀
- 파일로 나와있기 때문에 더 직관적이다.
- Legacy에 비해 Atlas는 자유도가 높다.
- Atlas는 에셋 번들로 빼기 쉽다.
- 현업 팀 투입 시 패킹에 Altas를 사용한다면?
- 해당 에셋의 위치, 패킹 방식, 어떤 스프라이트들을 묶어야 하는지 파악
- 현업 투입 시 packing에 Legacy를 사용한다면?
- Packing Tag의 이름을 어떤 식으로 지을지 파악