Оптимизация размера дистрибутива VR игр для быстрой загрузки
Meta Horizon Store и Steam имеют ограничения и рекомендации по размеру пакета, но главная причина оптимизировать дистрибутив — пользовательский опыт. Игра на 4 GB против игры на 1.2 GB при одинаковом визуальном качестве — это разница в 20 минут ожидания на стандартном домашнем интернете. Для Quest standalone, где пользователь не привык к долгим загрузкам мобильных игр, это прямая потеря установок.
Где живёт раздутый размер пакета
В большинстве VR-проектов 70–80% размера пакета — это текстуры. Типичная картина при аудите: в проекте 2 GB текстур, из которых 600 MB — это несжатые или слабосжатые PNG/PSD-файлы, импортированные напрямую без настройки Texture Compression в Import Settings.
Quest 2/3 — это ARM-чип с Adreno GPU, нативный формат сжатия — ASTC. Текстура 2048×2048 в RGBA32 занимает 16 MB. Та же текстура в ASTC 6×6 — 1.5 MB, в ASTC 8×8 — 0.9 MB. Разница в 17 раз при незначительной потере качества для диффузных карт.
Настройка в Unity: Platform-specific overrides в Texture Import Settings → Android → Format: ASTC 6×6 (для диффузных и roughness карт), ASTC 4×4 (для нормалей, где качество критичнее). При этом стандартный Texture Compression в Project Settings недостаточен — нужно явно настраивать каждую текстуру или использовать Texture Compression Groups через Addressables.
Второй крупный источник — аудио. Unity по умолчанию импортирует аудио без агрессивного сжатия. Фоновые треки в WAV по 50–100 MB каждый — не редкость. Настройка: Load Type Streaming, Compression Format Vorbis, Quality 70–80% для фоновой музыки. Короткие звуковые эффекты — Decompress on Load с Vorbis. Итого с аудио можно сократить ещё 30–60%.
Инструменты анализа размера билда
Unity Build Report — первый шаг. Window → Open Last Build Report показывает, что и сколько весит в финальном пакете. Сортировка по размеру сразу выявляет аномалии: текстуры, которые почему-то занимают 20 MB вместо ожидаемых 2 MB.
Asset Bundle Analyzer (открытый инструмент от Unity Technologies) — для проектов с Addressables. Показывает дублирование ассетов между бандлами: одна текстура, включённая в три разных bundle, занимает место трижды.
Сканирование через AssetDatabase.GetAllAssetPaths() с кастомным скриптом-аудитором: находит текстуры без ASTC override, аудиофайлы без streaming, меши с избыточными вершинами для их LOD-уровня.
Addressables и отложенная загрузка
Для VR-игр с несколькими уровнями — обязательное разделение на base package (код + первый уровень) и remote assets (остальные уровни через CDN). Unity Addressables с Remote Load Path на Cloudflare R2 или AWS S3. Пользователь устанавливает 400 MB, запускает игру и видит первый уровень сразу. Остальное догружается в фоне.
Meta Horizon Store поддерживает разделение на base APK + expansion files. Базовый APK должен быть меньше 4 GB (ограничение Android APK format), expansion — до 4 GB каждый. На практике — лучше держать базовый APK до 1 GB для быстрой загрузки первого контента.
Shader stripping — отдельная точка экономии. Unity включает в билд шейдеры для всех возможных keyword combinations. В VR-проекте с URP после настройки Shader Stripping в Graphics Settings (включить Strip Unused Shader Variants) размер нередко сокращается на 50–150 MB только за счёт удаления неиспользуемых шейдерных вариантов.
| Тип оптимизации | Типичное сокращение размера |
|---|---|
| ASTC-компрессия текстур | 40–70% от объёма текстур |
| Оптимизация аудио (Vorbis + Streaming) | 30–60% от объёма аудио |
| Shader stripping | 50–200 MB |
| Addressables + remote assets | 50–80% от базового пакета |
Сроки работы: аудит и базовая оптимизация — 2–5 рабочих дней. Полная реструктуризация с переходом на Addressables — 2–4 недели в зависимости от размера проекта.
Стоимость рассчитывается индивидуально после анализа текущего состояния билда.





