Ми часто бачимо, як неправильно упаковані текстури перетворюють гру на «важковаговика»: 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 ГБ ОЗУ. Візуальна якість залишиться на колишньому рівні. Зв'яжіться з нами, щоб обговорити деталі.







