호우동의 개발일지

Today :

article thumbnail

Draw Call(Batches)

배치 예시
Batches 예시

  • Batches(Draw Call) : CPU가 GPU에게 렌더링 할 항목(텍스처)들을 미리 알려주는 것
  • 어떤 값을 넘겨주냐에 따라서 Draw Call이 결정

 


Draw Call 관리가 중요한 이유

  • Draw Call이 쌓일수록 전체적인 성능이 급격히 저하
    • 모바일은 최대 100개 이하의 Draw Call을 유지해야 함
  • Draw Call을 줄이기 위해 Packing을 사용

 

 


Packing

  • Sprite를 하나로 묶는 것
  • 원하는 텍스처들을 가지고 있는 텍스처 뭉치를 만드는 것

 


Packing 원리

  1. 텍스처 하나를 Draw Call을 보냄
  2. 하나의 Draw Call 안에서 두 개의 스프라이트를 Render
  3. CPU가 GPU에게 텍스쳐를 요청하는 명령을 한 번만 처리할 수 있게 만듦
    → 여러 개의 Draw Call이 하나의 Draw Call로 줄어듦

 


Legacy Sprite Packer

Sprite Packer

  • 좌측 상단 Window → 2D → Sprite Packer

 

경로

  • 현재 Sprite Packer 모드가 Disabled이기 때문에 위 화면이 뜬다.
  • Open Project Editor Settings를 클릭하여 아래 화면으로 넘어감

 

Always Enabled

  • Always Enabled(Legacy Sprite Packer) Mode로 전환

 

Packing Tag

  • 해당 모드로 전환 시 프로젝트에 있는 Sprite 파일에 Packing Tag 속성이 추가된다.

 

임의로 이름

  • 서로 다른 두 Sprite에 같은 Packing Tag “test”를 추가
  • 다시 Sprite Packer로 들어가 Pack을 클릭하면 아래와 같이 두 Sprite가 한 공간에 모인다.

모인 모습
모인 모습

  • 위는 Packing을 하지 않았을 때, 아래는 Packing을 하고 실행 시 상태이다.

Batches 5
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를 클릭

pack Preview

  • 실행했을 때 Legacy와 마찬가지로 Batches가 4로 줄어든 것을 확인 가능하다.

 


Legacy vs Atlas

  • 현업에서는 Altas를 더 많이 씀
    • 파일로 나와있기 때문에 더 직관적이다.
    • Legacy에 비해 Atlas는 자유도가 높다.
    • Atlas는 에셋 번들로 빼기 쉽다.
  • 현업 팀 투입 시 패킹에 Altas를 사용한다면?
    • 해당 에셋의 위치, 패킹 방식, 어떤 스프라이트들을 묶어야 하는지 파악
  • 현업 투입 시 packing에 Legacy를 사용한다면?
    • Packing Tag의 이름을 어떤 식으로 지을지 파악