2015년 2월 28일 토요일

Unity Sprite Packer

스프라이트 패커 정리


스프라이트 그래픽작업을 위한 아틀라스 관리


기존의 아틀라스 관리 플러그인과는 개념이 다릅니다.

NGUI의 경우 아틀라스 메이커를 통해 다양한 스프라이트를 하나의 아틀라스에 넣어, 만들어진 아틀라스를 직접 관리 및 적용 했다면,

스프라이트 패커는 아틀라스를 만들긴 하는데 해당 아틀라스를 직접 관리 및 적용을 하진 못합니다.

즉 만들어진 아틀라스를 통해 관리하는 것이 아닌

해당 텍스처를 직접 관리 한 부분이 아틀라스에 적용되며, 이 적용된 아틀라스는 에디터 모드에서 작동하지 않고 플레이 모드에서 작동하게 됩니다.

(그래서 스프라이트 패커로 만들어도 에디터 모드의 Draw Call은 감소하지 않습니다. 플레이 버튼을 눌러야 감소한 Draw Call을 확인할 수 있습니다.)

약간 생소한 개념인데

Unity Docmentation을 참조하면

Atlases are cached in Project\Library\AtlasCache.

즉 아래의 이미지처럼 아틀라스를 만들어도 NGUI 처럼 Assets 안에 존재하지 않으며 에디터 상에서 파일을 확인할 수 없습니다.


하지만 AtlasCache 폴더안에 저장되기 때문에 실제로는 파일이 존재하게 되며, 유니티를 실행하게 되면 아틀라스를 쓰는 가장 큰 이유인


  • 메모리 절약
  • Drawo Call 감소


의 장점을 동일하게 사용할 수 있습니다.

아틀라스 만들기



선택한 텍스처의 Inspector창에서
Packing Tag에 Tag를 넣습니다.

이 Tag는 아틀라스의 이름역할을 합니다.



좌측 위의 Pack 버튼을 누르면 위에서 입력했던 같은 Tag 이름으로 묶인 아틀라스를 생성합니다.

단 해당 텍스처의 파일포멧에 따라 다른 그룹(같은 이름인데 그룹이 분리되는)이 생성되며 다른 그룹일 경우 Draw Call이 증가합니다.

만약 2048*2048의 해상도가 넘어가게 된다면 페이지(Page 1, Page 2 등)생성되며 생성된 페이지는 스프라이트 패커의 상단에서 선택할 수 있습니다.

(PC에서 테스트해본 결과 Page에 따른 DrawCall은 증가하지 않았습니다)

만들어진 아틀라스 사용?


개발단에서는 위에서 만든 아틀라스를 사용하지 않습니다.

이 부분에서 저도 많이 헷갈렸는데요;;

중요한 부분은

개발과 최적화가 분리되어 있다는 겁니다.

즉 개발은 Sprite로 변환시킨 텍스처를 드래그앤 드랍이나 코드를 통해 사용하고

이 Sprite를 단지 스프라이트 패커를 통해 Pack 만 시킨다면

유니티의 빽단에서 최적화 하는 방식입니다.

그냥 임포트한 Sprite를 사용하면 됩니다.

다만 메로리 및 Draw Call 최적화를 하기 위해 스프라이트 패커를 통해 아틀라스를 만들어야 하는 것이지요

댓글 2개:

  1. 아아... 에디터 상에서만 드로우콜 감소가 적용되지 않는 거였군요...
    하, 이거 때문에 한참 찾았네 ㅠㅠ
    근데 리소스 폴더에 넣으면 안 된다는게 너무 타격이 크네요;

    답글삭제
    답글
    1. 여기저기서 자주 보이네...요.ㅋ(최)

      삭제