Unity Sprite Atlas 이해와 리소스 구성
Sprite Atlas 이해하기
개요
게임 빌드에서 가장 큰 용량 비중을 차지하는 요소는 텍스처입니다. 텍스처 용량이 증가하면 빌드 크기뿐만 아니라 런타임 메모리 사용량과 로딩 성능에도 직접적인 영향을 미칩니다. 이를 효율적으로 관리하기 위해 Unity는 여러 스프라이트를 하나의 텍스처로 묶어 최적화할 수 있는 SpriteAtlas 기능을 제공합니다.
Sprite Atlas란
Sprite Atlas 란 여러 개의 텍스처(Sprite)를 하나의 큰 POT (Power Of Two) 텍스처로 묶는 에셋을 뜻합니다.
그럼 POT (Power Of Two) 는 무엇일까요? 쉽게 말해서 2의 거듭제곱을 의미합니다.
2¹ = 2
2² = 4
2³ = 8
2⁴ = 16
2⁵ = 32
2⁶ = 64
2⁷ = 128
2⁸ = 256
2⁹ = 512
2¹⁰ = 1024
POT 사이즈가 중요한 이유
유니티는 이 GPU에게 아틀라스를 건내주면서 이것을 인식하여 화면에 그려달라는 요청을 보냅니다.
GPU는 POT 텍스쳐를 가장 효율적으로 읽음
POT가 아니면:
- GPU가 내부적으로 POT로 변환 후 처리
- → 성능 손실 + 불필요한 연산 발생
![]()
Sprite Atlas의 패킹 원리
![]()
위처럼 여러 개의 작은 스프라이트를 “가장 낭비 없이” 하나의 큰 텍스처(POT 크기)에 테트리스처럼 배치하는 과정입니다.
패킹 알고리즘에 의해 Atlas 크기 결정되는데
Unity는 먼저:
“이걸 다 넣으려면 최소 몇 픽셀짜리 텍스처가 필요하지?”
그래서:
- 가장 가까운 POT 크기를 선택함
- 여기선 → 256 × 256
이게 오른쪽 점선 박스입니다.
Sprite Atlas를 사용하는 이유
![]()
메모리 최적화
GPU는 텍스처를 2의 제곱(Power of Two) 크기로 처리하므로, 작은 이미지 여러 개를 하나로 묶으면 낭비되는 메모리를 줄일 수 있습니다.
Draw Call 감소
개별 스프라이트마다 렌더링 요청을 보내는 대신, Atlas 하나로 묶으면 한 번의 Draw Call로 처리 가능하며 성능 향상에 효과적입니다.
항상 아틀라스를 사용하는 것이 정답은 아닙니다. 배경 텍스쳐같은 경우에는 사이즈가 크기 때문에 아틀라스로 묶는 것보다는 원본 텍스쳐 그대로 사용하는 것이 더 나을 수 있습니다.
이유는 한 화면에서 여러 배경을 동시에 렌더링하진 않기 때문입니다.
Sprite Atlas는 메모리 절약 + Draw Call 감소에 효과적이지만, 동시에 화면에 등장하는 리소스끼리 묶는 것이 중요하며 모든 상황에서 해법이 되지 않으니 POT 를 이해하고 사용해야 합니다.
그렇다면 실제 프로젝트에서는 어떤 리소스를 함께 묶고, 어떻게 관리하면 좋을까요? 앞서 살펴본 내용을 바탕으로 폴더 구조와 네이밍, 아틀라스 분리 기준을 살펴보겠습니다.
리소스 구성 가이드
아래에서는 Sprite Atlas 리소스를 구성할 때 참고할 핵심 원칙을 정리합니다. 세부 설정은 Unity 공식 문서를 참고하시기 바랍니다.
SpriteAtlas 생성 및 설정
- SpriteAtlas 생성
- 스프라이트 추가
- 기본 옵션 설정
![]()
스프라이트 폴더 구조
권장 구조는 원본(Sprites)과 Atlas(에셋)를 분리하고, Atlas와 1:1로 매칭되게 구성하는 것입니다.
Assets/
└─ UI/
├─ Sprites/
│ ├─ Common/
│ ├─ Lobby/
│ └─ HUD/
│
└─ Atlases/
├─ UI_Common.spriteatlas
├─ UI_Lobby.spriteatlas
└─ UI_HUD.spriteatlas
Sprites/: 원본 PNG 관리Atlases/: SpriteAtlas 에셋만 관리
![]()
네이밍 규칙
본 가이드는 권장 규칙을 제시하는 것이므로, 각 프로젝트의 특성과 운영 환경에 맞게 유연하게 적용하시기 바랍니다.
Atlas 이름 규칙
UI_{Category}_Atlas
UI_{Screen}_Atlas
예:
- UI_Common_Atlas
- UI_Lobby_Atlas
- UI_BattleHUD_Atlas
Sprite 이름 규칙
{type}_{name}_{state}
예:
- btn_play_normal
- btn_play_pressed
- icon_gold
- icon_gold_small
- bg_lobby_main
- bg_popup_dark
![]()
Atlas 분리 전략
SpriteAtlas는 기능 단위와 로딩 단위 기준으로 분리하는 것이 성능과 유지보수 측면에서 유리합니다.
권장 분리 기준
- UI 화면 단위
UI_Lobby_AtlasUI_Shop_AtlasUI_Inventory_Atlas
- 기능 단위
UI_Common_AtlasUI_Popup_AtlasUI_Icons_Atlas
운영 원칙
- 항상 로드되는 UI는
UI_Common_Atlas으로 분리 - 특정 화면에서만 쓰는 리소스는 전용 Atlas로 분리
- 너무 큰 Atlas는 메모리 사용량 증가 및 패킹 비효율을 유발하므로 분할 권장
- 애니메이션용 스프라이트는 별도 Atlas로 관리
중복 리소스 관리
중복 스프라이트는 메모리 낭비, 빌드 용량 증가, 관리 복잡도 상승의 주요 원인입니다.
관리 전략
- 공용 리소스는 반드시
UI_Common_Atlas또는Sprites/Common경로에만 배치 - 동일한 이미지가 여러 폴더에 존재하지 않도록 정기 점검
- SpriteAtlas 기반 Sprite Picker를 사용해 어떤 스프라이트가 어떤 Atlas에 포함되어 있는지 시각적으로 확인
- 네이밍 기준이 같은 파일이 여러 개 발견되면 단일 리소스로 통합
권장 워크플로우
- 신규 스프라이트 추가 시 기존 Atlas 검색
- 유사 이미지 존재 여부 확인
- 공용 가능 리소스는 Common Atlas로 이동
- 화면 전용 리소스만 전용 Atlas에 유지
이 방식을 유지하면 중복 리소스 검출이 쉬워지고, 메모리와 빌드 용량을 안정적으로 관리할 수 있습니다.
