Ми часто бачимо проекти, де текстурні атласи налаштовані за замовчуванням. Результат — 40–100 МБ зайвої пам'яті та зруйнований batching. В одному з проектів казуальної гри UI-атлас у RGBA32 займав 64 МБ тільки на одній сцені. Після нашої оптимізації — 8 МБ. Економія склала 56 МБ, що при вартості 1 ГБ RAM у $0.01 за 1 ГБ/год дає $0.56 економії на годину роботи пристрою. У цій статті ми розповімо, як правильно оптимізувати текстурні атласи для мобільних ігор.
Чому атласи — вузьке місце мобільної оптимізації?
Sprite Atlas в Unity — інструмент зрозумілий, але його неправильне налаштування стабільно додає десятки мегабайт до пам'яті застосунку та вбиває batching. Типова помилка: розробник увімкнув Sprite Atlas, склав усі UI-спрайти в один атлас, задоволений — Draw Calls впали з 80 до 12. Але забув увімкнути Include in Build в налаштуваннях. У результаті атлас генерується в Edit Mode, але в Release-білді кожен спрайт завантажується окремою текстурою.
Інша історія: атлас налаштований правильно, batching draw calls працює, але розмір 2048×2048 RGBA32 — це 16 МБ тільки на одну текстуру без mipmaps. На пристрої з 2 ГБ RAM сумарний UI-атлас із 4 листів з'їдає 64 МБ. При перемиканні мов — усі 4 листи в пам'яті одночасно.
Який формат стиснення обрати для атласів?
Це найнедооціненіша частина оптимізації. Розробники часто залишають RGBA32 або RGBA16 для всіх текстур, не замислюючись.
ASTC — стандарт для сучасних мобільних пристроїв. Підтримує блокове стиснення з налаштовуваною якістю: ASTC 4×4 дає високу якість при 8 bpp, ASTC 8×8 — прийнятну якість при 2 bpp. Для атласів UI використовуємо ASTC 4×4 або 6×6. Для фонових текстур без дрібних деталей — ASTC 8×8. Порівняно з RGBA32, ASTC 6×6 зменшує розмір у 6 разів при майже непомітній втраті якості — це у 6 разів краще за співвідношенням якості до розміру.
ETC2 — fallback для пристроїв без підтримки ASTC. Підтримує альфа-канал. Для старих проектів з низьким рівнем API все ще актуальний.
PVRTC — формати для iOS (PowerVR GPU). Вимагає текстур квадратної форми зі стороною в ступінь двійки. Якщо атлас 1024×512 — PVRTC застосувати не можна без зміни розміру.
Офіційна документація Unity по форматах стиснення: https://docs.unity3d.com/Manual/class-TextureImporterOverride.html
Реальний кейс: казуальна гра-пазл, Android+iOS. UI-атласи займали 128 МБ у пам'яті (RGBA32, 4 листи 2048×2048). Після перемикання на ASTC 6×6 для iOS та ETC2 для Android: 128 МБ → 22 МБ. Якість на екрані телефона — невідмінна. Час завантаження UI-сцени знизився з 1,8 с до 0,4 с (у 4,5 рази швидше).
| Формат | bpp | Якість | Сумісність |
|---|---|---|---|
| ASTC 4×4 | 8 | відмінна | iOS A7+, Android з підтримкою ASTC |
| ASTC 6×6 | 4 | хороша | та сама |
| ETC2 | 4 | хороша | Android (широко) |
| PVRTC 4bpp | 4 | середня | iOS (PowerVR) |
| RGBA32 | 32 | еталон | усі |
Приклад розрахунку економії пам'яті
Якщо атлас розміром 2048×2048 RGBA32 займає 16 МБ без mipmaps, то при перемиканні на ASTC 6×6 (4 bpp) розмір знижується до 2 МБ. Для чотирьох таких атласів економія складає 56 МБ.
Стратегія розбиття атласів
Не всі спрайти в один атлас — це шлях до проблем. Правильна стратегія:
- За сценою/екраном. Спрайти, які використовуються тільки в меню — в атлас menu_atlas. Спрайти геймплею — в gameplay_atlas. Спільні елементи (кнопки, рамки, іконки) — в common_atlas. Це дозволяє вивантажувати невикористовувані атласи при зміні сцени.
- За частотою використання. Hotpath-спрайти (HP-бар, приціл, таймер) завжди в пам'яті → core_hud_atlas. Рідкісні екрани (налаштування, магазин) — вивантажуються через Addressables при закритті.
- Обмеження розміру листа. 2048×2048 — максимум для мобільних. Частина пристроїв не підтримує 4096×4096 для стиснутих форматів. У Sprite Atlas Settings встановлюємо Max Texture Size = 2048.
- Дублікати. Unity Addressables Analyze → Check Duplicate Bundle Dependencies виявляє спрайти, що потрапили в кілька атласів. Типова причина: shared-спрайт (іконка валюти) використаний і в меню, і в геймплеї без явного вказання атласу.
Чому mipmaps шкідливі для UI?
Для UI-атласів mipmaps вимикаємо. UI рендериться в Screen Space, об'єкти не віддаляються від камери — mipmaps марні та збільшують розмір текстури на 33%. У Texture Import Settings: Generate Mipmaps = false.
Для ігрових текстур (3D-об'єкти, задній план у 2D з масштабуванням) — mipmaps обов'язкові. Без них aliasing та завищений texture fetch bandwidth.
Покрокове налаштування атласу для мобільної гри
- Імпортуйте спрайти з налаштуваннями: Max Size = 2048, Compression = ASTC 6×6 (або ETC2 для fallback), Generate Mipmaps = false.
- Створіть Sprite Atlas (V2): Assets → Create → Sprite Atlas.
- В Inspector: Type = Master, Include in Build = true, Allow Rotation = true, Tight Packing = true, Padding = 4.
- Додайте спрайти в Objects for Packing.
- Розділіть за сценами: створіть окремі атласи для menu, gameplay, common.
- Для керування пам'яттю використовуйте Addressables: позначте атласи як Addressable та вивантажуйте при зміні сцени.
- Перевірте дублікати через Addressables Analyze.
Процес роботи над оптимізацією
- Аналітика. Збираємо профілі пам'яті та draw calls на цільових пристроях. Використовуємо Unity Profiler, RenderDoc, GameAnalytics.
- Аудит атласів. Оцінюємо поточну стратегію, формати, розміри, дублікати.
- Проектування. Розробляємо нову архітектуру атласів з розбивкою за сценами та частотою використання.
- Реалізація. Переналаштовуємо атласи, стискаємо текстури, інтегруємо Addressables.
- Тестування. Перевіряємо пам'ять, продуктивність, якість на пристроях з 2 ГБ RAM та нижче.
- Деплой. Фіксуємо налаштування в Version Control, документуємо workflow.
Що входить в роботу
- Аудит поточних атласів зі звітом по пам'яті, draw calls та рекомендаціями.
- Розробка стратегії розбиття під цільову платформу.
- Налаштування стиснення (ASTC, ETC2, PVRTC) з контролем якості.
- Інтеграція Addressables для вивантаження атласів.
- Документація з підтримки атласів у проекті.
- Навчання команди роботі з новою системою.
- Пост-релізна підтримка протягом місяця.
| Масштаб задачі | Орієнтовні терміни |
|---|---|
| Аудит атласів + звіт | 1–2 дні |
| Переробка атласної стратегії (1 платформа) | 3–7 днів |
| Повна оптимізація для Android + iOS | 2–4 тижні |
| Інтеграція з Addressables | 2–3 тижні |
Ми гарантуємо якість: наш досвід — понад 10 проектів з оптимізацією під мобільні пристрої. Оцінимо ваш проект безкоштовно — зв'яжіться для аудиту. Замовте оптимізацію атласів і отримайте до 80% економії пам'яті без втрати якості.






