Оптимізація текстурних атласів для мобільних ігор

Ми часто бачимо проекти, де текстурні атласи налаштовані за замовчуванням. Результат — 40–100 МБ зайвої пам'яті та зруйнований batching. В одному з проектів казуальної гри UI-атлас у RGBA32 займав 64 МБ тільки на одній сцені. Після нашої оптимізації — 8 МБ. Економія склала 56 МБ, що при вартості 1 Г

Наші компетенції

Інші послуги студії

VR/AR/MR застосунки на замовлення

Вражайте клієнтів і навчайте команду у віртуальній реальності

Розробка ігор на Unity

Від ідеї до релізу — ігри, які запам'ятовуються

3D-моделювання та анімація

Оживимо ваш продукт в об'ємній графіці та анімації

VR-тренажери промислового обладнання

Тренуємо операторів на техніці без ризику і простою

AR-інструкції для виробництва

Покрокові підказки прямо на обладнанні — без паперу

Safety-тренажери

Відпрацювання НС і техніки безпеки без виходу на об'єкт

VR/AR-тренінги

Навчаємо персонал сервісу, адаптації та soft skills у VR

Навчальні вікторини

Перевірка знань у форматі гри — легко і без стресу

Корпоративні відеоінструкції

Зрозумілі ролики для навчання співробітників і клієнтів

Гейміфікація бізнес-процесів

Мотивуємо команду через ігрові механіки в KPI та HR

Застосунки для інфокіосків

Інтерактивні екрани для магазинів, стендів і офісів

VR/AR-інсталяції

Wow-ефект для брендів на виставках, івентах і в шоу-румах

Віртуальні виставки та музеї

Ваша експозиція доступна з будь-якої точки світу — 24/7

Event-квести та брендовані ігри

Незабутні ігри для конференцій та клієнтських івентів

Часті запитання

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    1504
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    1006
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    635
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    716
  • image_training-quizzes_kids_shopping_quiz_614_0.webp
    Навчальна вікторина для дітей «Покупки в магазині»
    95

Ми часто бачимо проекти, де текстурні атласи налаштовані за замовчуванням. Результат — 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.

Покрокове налаштування атласу для мобільної гри

  1. Імпортуйте спрайти з налаштуваннями: Max Size = 2048, Compression = ASTC 6×6 (або ETC2 для fallback), Generate Mipmaps = false.
  2. Створіть Sprite Atlas (V2): Assets → Create → Sprite Atlas.
  3. В Inspector: Type = Master, Include in Build = true, Allow Rotation = true, Tight Packing = true, Padding = 4.
  4. Додайте спрайти в Objects for Packing.
  5. Розділіть за сценами: створіть окремі атласи для menu, gameplay, common.
  6. Для керування пам'яттю використовуйте Addressables: позначте атласи як Addressable та вивантажуйте при зміні сцени.
  7. Перевірте дублікати через Addressables Analyze.

Процес роботи над оптимізацією

  1. Аналітика. Збираємо профілі пам'яті та draw calls на цільових пристроях. Використовуємо Unity Profiler, RenderDoc, GameAnalytics.
  2. Аудит атласів. Оцінюємо поточну стратегію, формати, розміри, дублікати.
  3. Проектування. Розробляємо нову архітектуру атласів з розбивкою за сценами та частотою використання.
  4. Реалізація. Переналаштовуємо атласи, стискаємо текстури, інтегруємо Addressables.
  5. Тестування. Перевіряємо пам'ять, продуктивність, якість на пристроях з 2 ГБ RAM та нижче.
  6. Деплой. Фіксуємо налаштування в Version Control, документуємо workflow.

Що входить в роботу

  • Аудит поточних атласів зі звітом по пам'яті, draw calls та рекомендаціями.
  • Розробка стратегії розбиття під цільову платформу.
  • Налаштування стиснення (ASTC, ETC2, PVRTC) з контролем якості.
  • Інтеграція Addressables для вивантаження атласів.
  • Документація з підтримки атласів у проекті.
  • Навчання команди роботі з новою системою.
  • Пост-релізна підтримка протягом місяця.
Масштаб задачі Орієнтовні терміни
Аудит атласів + звіт 1–2 дні
Переробка атласної стратегії (1 платформа) 3–7 днів
Повна оптимізація для Android + iOS 2–4 тижні
Інтеграція з Addressables 2–3 тижні

Ми гарантуємо якість: наш досвід — понад 10 проектів з оптимізацією під мобільні пристрої. Оцінимо ваш проект безкоштовно — зв'яжіться для аудиту. Замовте оптимізацію атласів і отримайте до 80% економії пам'яті без втрати якості.