"스프라이트 아틀라스(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 렌더링 효율을 높이는 최적화 에셋이다. 』
'1일 1 cs' 카테고리의 다른 글
| 26. 프로세스(Process)와 스레드(Thread)란? (0) | 2026.02.15 |
|---|---|
| 25. 짐벌락(Gimbal Lock) 이란? (0) | 2026.02.14 |
| 23. 스크립터블 오브젝트(ScriptalbeObject) 란? (0) | 2026.02.09 |
| 22. 박싱(Boxing)과 언박싱(Unboxing)이란? (0) | 2026.02.08 |
| 21. namespace와 partial 이란? (0) | 2026.02.07 |