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

Наша компанія з розробки відеоігор веде незалежні проекти, спільно з клієнтом створює ігри та надає додаткові операційні послуги. Досвід нашої команди дозволяє нам охопити всі ігрові платформи та розробити приголомшливий продукт, що відповідає баченню клієнта та перевагам гравців.

Від імерсивних застосунків до ігрових світів і 3D-сцен

Наша виділена команда для VR/AR/MR-розробки, Unity-продакшну і 3D-моделювання та анімації — з власними кейсами і презентаціями.

Відвідати персоналізований сайт
Показано 1 з 1 послугУсі 242 послуг
Оптимізація текстурних атласів для мобільних ігор
Середня
~2 робочих дні
Часті питання

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

Які етапи розробки гри?

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

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    862
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    491
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    533

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

Sprite Atlas у Unity — інструмент зрозумілий, але його неправильна настройка стабільно прибавляє 40–100 МБ до пам'яті мобільного додатку та ламає batching там, де його очікуєш. Типова помилка: розробник включив Sprite Atlas, складав всі UI-спрайти в один атлас, задоволений — Draw Calls упали з 80 на 12. Але забув включити Include in Build в настройках атласу. В результаті атлас генерується в Edit Mode, але в Release-білді кожен спрайт завантажується окремою текстурою.

Або інша історія: атлас настроєний правильно, batching працює, але розмір атласу 2048×2048 RGBA32 — це 16 МБ тільки на одну текстуру без mipmaps. На пристрої з 2 ГБ RAM сумарний UI-атлас з 4 листів їдає 64 МБ. При переключенні мов (різний набір символів) — всі 4 листи в пам'яті одночасно.

Формати сжиття — там теряється більше всього

Це найбільш недооцінена частина оптимізації текстур. Розробники часто залишають RGBA32 або RGBA16 для всіх текстур, не задумуючись.

ASTC — стандарт для сучасних мобільних пристроїв (iOS A7+, Android з 2015+). Підтримує блочне сжиття з настроюваною якістю: ASTC 4×4 дає високу якість при 8 bpp, ASTC 8×8 — прийнятну якість при 2 bpp. Для атласів UI використовуємо ASTC 4×4 або 6×6. Для фонових текстур без дрібних деталей — ASTC 8×8.

ETC2 — fallback для Android-пристроїв без підтримки ASTC. Підтримує альфа-канал (на відміну від ETC1). Для старих проектів з мінімальним Android API level = 19 — все ще актуальний.

PVRTC — формати для iOS (PowerVR GPU). Потребує текстури квадратної форми зі стороною в степень двойки. Якщо атлас 1024×512 — PVRTC застосувати не можна без зміни розміру.

Реальний кейс: казуальна гра-пазл, Android+iOS. UI-атласи займали 128 МБ в пам'яті (RGBA32, 4 листи 2048×2048). Після переключення на ASTC 6×6 для iOS та ETC2 для Android: 128 МБ → 22 МБ. Якість на екрані телефона — невідрізнима. Час завантаження UI-сцени знизився з 1.8 с до 0.4 с.

Стратегія розбиття атласів

Не всі спрайти в один атлас — це шлях до проблем. Правильна стратегія:

Розбиття по сцені/екрану. Спрайти, які використовуються тільки в меню — в атлас menu_atlas. Спрайти геймплею — в gameplay_atlas. Загальні елементи (кнопки, рамки, іконки) — в common_atlas. Це дозволяє виявляти невикористовувані атласи при зміні сцени.

Атласи по частоті використання. Hotpath-спрайти (HP-бар, прицільник, таймер) завжди в пам'яті → core_hud_atlas. Рідкі екрани (настройки, магазин) — виявляються через Addressables при закритті екрана.

Обмеження розміру листа атласу. 2048×2048 — максимум для мобільних. Частина пристроїв з Android 4.4 не підтримує 4096×4096 для сжатих форматів. У Sprite Atlas Settings встановлюємо Max Texture Size = 2048.

Дубликати в кількох атласах. Unity Addressables Analyze → Check Duplicate Bundle Dependencies виявляє спрайти, що потрапили в кілька атласів. Це означає, що один і той же спрайт завантажується в пам'ять двічі. Типова причина: shared-спрайт (іконка валюти) використаний і в меню, і в геймплеї без явного зазначення атласу.

Mipmaps для мобільних атласів

Для UI-атласів mipmaps вимикаємо. UI рендериться в Screen Space, об'єкти не віддаляються від камери — mipmaps бесполезні та збільшують розмір текстури на 33%. У Texture Import Settings: Generate Mipmaps = false.

Для ігрових текстур (3D-об'єкти, задній план у 2D з масштабуванням) — mipmaps обов'язкові. Без них aliasing та завищена texture fetch bandwidth.

Workflow атласування в проекті

Використовуємо Sprite Atlas V2 (Legacy V1 застарів, але все ще зустрічається в старих проектах). V2 підтримує Work with Packages та правильно працює з Addressables.

Настройки атласу для мобільного проекту:

  • Pack on Play Mode = Always Enabled (для коректного Preview в Editor)
  • Allow Rotation = true (щільніше упаковує спрайти)
  • Tight Packing = true (зменшує пусте простір)
  • Padding = 4 (запобігає texture bleeding при ASTC-сжиттю)
Масштаб задачі Орієнтовні терміни
Аудит атласів + звіт з рекомендаціями 1–2 дня
Переробка атласної стратегії (1 платформа) 3–7 днів
Повна оптимізація текстур для Android + iOS 2–4 тижні
Інтеграція з Addressables + керування пам'яттю 2–3 тижні

Вартість розраховується індивідуально після аудиту ассетів та цільових платформ.