Оптимизация текстурных атласов для мобильных игр
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 недели |
Стоимость рассчитывается индивидуально после аудита ассетов и целевых платформ.





