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

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

От иммерсивных приложений до игровых миров и 3D-сцен

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

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Оптимизация текстурных атласов для мобильных игр
Средняя
~2 рабочих дня
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    671
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • 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 недели

Стоимость рассчитывается индивидуально после аудита ассетов и целевых платформ.