반응형

 

 

 

"스프라이트 아틀라스(Sprite Atlas)"

 

 

개발을 하다보면 UI 아이콘, 캐릭터 파츠, 이펙트 같은 스프라이트가 점점 늘어나고, 

어느 순간부터 프로젝트에 텍스처 파일이 우르르 쌓이기 시작한다. 

 

 

처음엔 티가 안 나지만, 씬에 오브젝트가 많아질수록 드로우콜(draw call) 이 늘고 모바일에서는 특히 프레임이 흔들리기도 한다.

이럴 때 자주 등장하는 해결책이 스프라이트 아틀라스(Sprite Atlas)다. 

 

 

 


 

 

 

1) 스프라이트 아틀라스(Sprite Atlas)란?



스프라이트 아틀라스는 여러 스프라이트 텍스처를 하나의 큰 텍스처(Atlas)

패킹(packing)해 관리/렌더링하기 쉽게 만든 에셋이다.

 

(즉, 스프라이트들을 한 장의 스프라이트 시트로 합쳐서 성능 최적화에 도움을 주는 기능이다.)

 

 

 

 


 

 

 

2) 스프라이트 아틀라스를 왜 쓰는가?


스프라이트가 서로 다른 텍스처를 쓰면 렌더링 과정에서 상태 변경이 자주 일어나고,

결과적으로 *드로우콜이 증가할 수 있다.


아틀라스로 묶으면 여러 스프라이트가 같은 텍스처를 공유하게 되어, 

상황에 따라 드로우콜을 줄이고 성능을 개선하는 데 도움이 된다.

 

 

 

*드로우콜(Draw Call): GPU에게 화면에 무언가를 그려 달라고 요청하는 호출

 

 

 


 

 

 

3) Sprite Atlas 만드는 방법은?

 

 

Window - Package Manager - Unity Registry - 2D 검색 및 인스톨

 

 

 

Create → 2D → Sprite Atlas 로 아틀라스 에셋 생성

 

 

생성된 아틀라스 에셋의 모습

 

그런데 Packing 옵션이 disabled 되어있는데 

 

 

Edit - Project Settings - Editor - Sprite Packer - V2 (Enabled)로 체크

 

 

그러면 Pack Preview 버튼이 생긴다.

 



Objects for Packing에 패킹할 스프라이트 드래그&드롭 후, Pack Preview 클릭

 

 

 

 

다음과 같이 패킹된 스프라이트들을 볼 수 있다.

 

 


아틀라스의 패킹된 이미지가 이상한 방향으로 돌아가 있을 수가 있는데, 

그럴 때는 위에서 *Allow Rotation 옵션을 꺼주면된다. 

 

 

 

*Allow Rotation

패킹 효율을 위해 회전 허용(일부 UI에서 주의)

 

 

*Tight packing

스프라이트의 실제 알파 영역만 기준으로 경계(Rect)를 잡아서 아틀라스에 최대한 촘촘하게 배치하는 방식 

 

Tight packing On: 실제 픽셀이 있는 부분만 사용하여 더 촘촘히 배치

Tight packing Off: 이미지 외곽 전체를 네모로 잘라서 배열

 

 

 


 

 

4) Atlas 예시 코드

using UnityEngine;
using UnityEngine.U2D;

public class AtlasEx : MonoBehaviour
{
	// 검사하고자 하는 아틀라스
    [SerializeField] private SpriteAtlas atlas;

	// 찾고자 하는 스프라이트 이름
    [SerializeField] private string spriteName;


    void Start()
    {
        if (atlas == null)
        {
            Debug.LogError("SpriteAtlas가 비어있습니다.");
            return;
        }

        var sprite = atlas.GetSprite(spriteName);
        if (sprite == null)
        {
            // 스프라이트가 없을 때
             Debug.Log("스프라이트가 없습니다!");
             return;
        }
		
        //스프라이트를 찾았을 때
        Debug.Log("스프라이트를 찾았습니다!");
    }
}

 

 

 


 

 

 

5) 사용시 주의사항



Include in Build를 꺼두면 빌드에서 아틀라스가 빠져 보이지 않는 상황이 생길 수 있다.

 


같은 스프라이트가 서로 다른 아틀라스에 중복 포함되면 선택이 꼬일 수 있다.

 


번들/배포 환경에서는 스프라이트 분산으로 인해 아틀라스 중복이 발생할 수 있다.

 

 

 


 

 

 


6) 오늘의 한 줄 요약

 

  Sprite Atlas는 여러 스프라이트를 하나의 아틀라스 텍스처로 패킹해

텍스처 전환(바인딩)을 줄이고 배칭을 유리하게 만들어 2D 렌더링 효율을 높이는 최적화 에셋이다.

반응형

+ Recent posts