Мы часто видим, как неправильно упакованные текстуры превращают игру в «тяжеловес»: 300 МБ вместо 80 МБ, а на старых Android-устройствах вылетает с SIGKILL из-за OOM. При этом в редакторе всё работает нормально — Unity хранит текстуры в несжатом виде, и реальный размер VRAM становится очевиден только при профилировании на девайсе. Наша команда за 5+ лет работы накопила опыт на более чем 30 проектах, где мы добивались снижения потребления памяти на 50-70%.
Оптимизация текстурных атласов: ключевые методы
Первая и самая частая причина перерасхода памяти — формат по умолчанию RGBA32. Если не задать Override для каждой платформы, Unity упакует текстуры в несжатый RGBA32. 1024×1024 в RGBA32 — 4 МБ VRAM. Те же данные в ASTC 6×6 — около 250 КБ. Разница в 16 раз. Сразу проверяйте настройки сжатия под каждую платформу.
Вторая типичная ошибка — размер атласа не кратен степени двойки. GPU неэффективно обрабатывает текстуры 700×900. Unity выдаёт предупреждение, но не исправляет автоматически. Не-POT текстуры не сжимаются большинством форматов и занимают больше памяти, чем ближайший POT. Мы гарантируем приведение всех атласов к POT.
Третья проблема — прозрачность там, где она не нужна. Если спрайт непрозрачный, используйте RGB вместо RGBA. Это легко настраивается в импорте.
Таблица сравнения форматов сжатия
| Платформа | Формат | Качество | Применение | Экономия памяти (vs RGBA32) |
|---|---|---|---|---|
| Android (современные) | ASTC 6×6 | высокое | все текстуры | до 16 раз |
| Android (legacy, API < 23) | ETC2 | среднее | непрозрачные; ETC2 RGB для alpha | до 8 раз |
| iOS (A8+) | ASTC 6×6 | высокое | все текстуры | до 16 раз |
| iOS (fallback) | PVRTC | низкое | только при крайней нехватке памяти | до 6 раз |
ASTC — адаптивный, поддерживает любое соотношение сторон. Доступен на всех устройствах с Android 5.0+ и iOS A8+. Для игровых спрайтов 6×6 даёт оптимальное качество/размер. Для UI с мелким текстом — 4×4. По качеству ASTC 6×6 в 2-3 раза превосходит PVRTC при том же размере.
ETC2 на Android нужен только для устройств старше пяти лет. Если аналитика показывает долю таких устройств > 5%, учитывайте это.
Как правильно выбрать формат сжатия?
Выбор зависит от целевых устройств. Для большинства современных проектов оптимален ASTC 6×6. Если проект ориентирован на старые устройства, используйте ETC2 для Android и PVRTC для старых iOS. Важно задать Overrides в настройках импорта для каждой платформы.
Почему важно разбивать атласы по контексту?
Правильная стратегия — разбивка по контексту использования, а не по типу объекта:
- ui-hud: элементы HUD, отображаемые постоянно
- ui-menus: кнопки, фоны, иконки для меню (выгружаются во время геймплея)
- gameplay-player: спрайты игрока и анимации
- gameplay-enemies-tier1: враги первого уровня
- gameplay-vfx: частицы, взрывы, эффекты
Такая разбивка позволяет выгружать неиспользуемые атласы через Resources.UnloadUnusedAssets() или Addressables с явным Release. С единым атласом это невозможно. Один наш клиент после реструктуризации 12 атласов сократил пиковую память на 35%.
Влияние пустого пространства
Unity SpriteAtlas оставляет padding между спрайтами (по умолчанию 4 px) для предотвращения bleeding. На атласе 1024×1024 потери площади могут достигать 15-20%. Уменьшите padding до 2 px для спрайтов без субпиксельного рендеринга — это улучшит упаковку. Смотрите заполнение в Preview атласа. Если менее 70% — переработайте разбивку.
Процесс работы и сроки
Этапы работ (под ключ, 3-6 дней)
- Аналитика: профилирование на реальном девайсе через Memory Profiler, выявление топ-10 тяжёлых текстур.
- Проектирование: настройка Overrides для Android/iOS, реструктуризация по контексту, отключение Mip Maps для 2D-спрайтов.
- Реализация: изменение атласов, проверка POT-размеров, уменьшение padding.
- Тестирование: финальная проверка на Android GPU Inspector или Xcode Metal System Trace, сравнение VRAM до и после.
- Документация: отчёт с результатами и рекомендации по поддержке.
Таблица типичных результатов
| Параметр | До оптимизации | После оптимизации | Снижение |
|---|---|---|---|
| VRAM под текстуры | ~300 МБ | ~90 МБ | 70% |
| Количество текстур | 120 | 120 | без изменений |
| Draw Calls на сцену | ~200 | ~150 | 25% |
Цифры приведены для среднестатистического проекта. Ваш результат может отличаться.
Что входит в работу
- Полный аудит текущих текстур и атласов с помощью Memory Profiler.
- Настройка Overrides сжатия для каждой целевой платформы.
- Реструктуризация атласов по контексту использования.
- Оптимизация padding, Mip Maps и POT-размеров.
- Проверка на реальных устройствах (Android и iOS).
- Документация с рекомендациями.
Стоимость рассчитывается индивидуально после предварительного аудита. Получите консультацию — мы оценим ваш проект бесплатно.
Результат
После оптимизации вы получите снижение используемой текстурами памяти на 50-70%, уменьшение Draw Calls за счёт правильной упаковки и стабильную работу на устройствах с 2-3 ГБ ОЗУ. Визуальное качество останется на прежнем уровне. Свяжитесь с нами, чтобы обсудить детали.







