Как за выходные уменьшить сборку и ускорить первую загрузку (Unity/UE)

Как заставить билд скинуть вес без магии: аудит → ассеты → лёгкий старт → пакеты
Как заставить билд скинуть вес без магии: аудит → ассеты → лёгкий старт → пакеты

Если в кратце

Сначала поймите, что реально попадает в билд.

Потом заставьте ассеты похудеть: форматы, размеры, дубли.

Разделите стартовый пакет и всё остальное.

Проверьте, что первый экран тянет только нужное.

Замерьте «до/после».

История из цеха

Однажды мы ловили жалобы «игра грузится вечность».

Код не трогали вовсе. За вечер выкинули из стартовой сцены кат-сцену на 300 МБ, уменьшили пару «монументальных» текстур для дальнего фона и перевели музыку на потоковую загрузку.

На завтра билд стал легче на ~600 МБ, до меню — на 18 секунд быстрее.

Магии нет: просто не тянем то, что не нужно в первые минуты.

AIQ

Зачем этим вообще заниматься?

У игрока есть одно право, которым он охотно пользуется: закрыть игру, если она долго стартует. Первые минуты — это предвкушение, если затянуть - rage quit или просто завершение задачи (учитывая нетерпеливость нынешних геймеров).

Если в загрузке мы подтягиваем целый биом, который понадобится через полчаса, мы сами себе ставим подножку.

Мы предлагаем идти от простого к сложному: сначала навести порядок в том, что попадает в первую сцену, затем — в форматах и размерах, и только после этого — в паковке и стриминге.

Шаг 1. Разобраться, что действительно попало в билд

  1. Соберите обычный билд и откройте отчёт по содержимому.
  2. Выпишите топ-10 тяжёлых позиций: текстуры, аудио, скелетные меши.
  3. Задайте вопрос относительно каждой позиции: видно в первые 10 минут? можно сжать/отложить?

Шаг 2. Привести ассеты в порядок — от общего к частному

Текстуры

С текстурами чаще всего теряем сотни мегабайт. Здесь работает простое правило: формат — по платформе, размер — по роли в кадре. То, что крупно и близко (герои, важные объекты), держим в более высоком разрешении; то, что формирует фон, уменьшаем.

Спрайты интерфейса собираем в атласы, чтобы игра не подгружала десятки мелких файлов.

Исходники вроде TIFF и PSD храним отдельно от путей, которые попадают в сборку: «сырьё» в релизе нам не нужно.

Аудио

Музыка и голос должны звучать достойно, но избыточный битрейт редко кто заметит.

Смысл простой: для речи оставляем битрейт повыше, для коротких эффектов — поскромнее. Длинные треки удобнее не хранить целиком в памяти, а подтягивать потоково.

Микроэкономия на десятках эффектов в сумме даёт минуты жизни загрузке и десятки мегабайт размеру.

Модели и анимации

Тут чаще всего помогают две вещи: нормальные уровни детализации и разумное количество материалов на объект.

Переходы между LOD-ами стоит настроить под реальную камеру, а не «как получилось». В скелетах полезно убрать неиспользуемые кости и шейпы, а в наборах анимаций — клипы, которые давно не вызываются.

Что не должно оказаться в первом экране

Кат-сцены, редкие облики, дальние локации — хороший контент, но не для старта. Их место — в отложенной подгрузке или во вторичных пакетах, когда игрок уже в игре.

Что делать в Unity

С Unity логика проста: разделите проект на базовый пакет и всё остальное.

Базовый — это меню, обучение, то, что точно увидят все. Остальное уходит в пакеты, которые подгружаются по событию или в фоне.

Для текстур задайте разные профили импорта по категориям: персонажи, окружение, интерфейс.

Для интерфейса используйте атласы — это ускорит открытие экранов.

С аудио поступаем так же: важное в приличном качестве, длинные треки потоково, повторы — через вариации, чтобы не хранить десятки почти одинаковых файлов.

И отдельно — стартовая сцена: выделите «bootstrap» без тяжёлых зависимостей, чтобы игрок быстрее увидел первый экран.

Что делать в Unreal Engine

Подход тот же, только инструментов больше для упаковки.

Сначала размечаем, что является первичным контентом, а что — вторичным.

Первому — дорога в начальные пакеты, второму — в отдельные архивы.

Сжатие на уровне паков включаем так, чтобы не выиграть мегабайты ценой слишком долгой распаковки; здесь важен баланс.

Для текстур используем разные профили для персонажей, мира и интерфейса; для аудио — кодирование и потоковую подгрузку длинных дорожек.

И, как в Unity, делаем лёгкую стартовую карту без лишнего груза.

План работ

За 1 час

  1. Сборка → отчёт → топ-10 тяжёлых элементов.
  2. Для каждого — решение: уменьшить / отложить / оставить.
  3. Убрать из стартовой сцены всё, что не нужно для меню и начала игры.
  4. Пересобрать и замерить время до меню.

За выходные

День 1: профили импорта текстур/аудио по категориям, ревизия LOD/материалов.

День 2: базовый/отложенные пакеты (Addressables/PAK), лёгкий bootstrap, документ с правилами.

Короткий чек-лист контроля

Контрольный лист перед релизом: от Top-10 до метрик
Контрольный лист перед релизом: от Top-10 до метрик
  • Определены и обработаны 10 самых крупных ассетов.
  • Стартовая сцена не тянет лишние зависимости.
  • Текстуры: платформенные форматы и размеры по роли; UI — в атласах.
  • Аудио: длинные дорожки — streaming; битрейт по назначению.
  • Разделение на базовый и отложенные пакеты настроено.
  • Зафиксированы метрики «до/после».

Типовые причины лишнего веса и решения

  • Завышенные текстуры дальнего плана — уменьшить размер; визуально разница не заметна.
  • Музыка целиком в памяти — включить потоковую загрузку.
  • Много материалов на объект — сократить, если нет визуальной необходимости.

Итог

Эффект дают не редкие «секретные настройки», а последовательные шаги:

Аудит → корректировка ассетов → лёгкий старт → пакеты.

Такой порядок даёт результат быстро и он легко воспроизводим.

Если было интересно, ставьте реакции.

Есть что предложить или сказать? Ждём в комментах.

Миру — мир, ДЕВу — легкого билда.

6
Начать дискуссию