optimization-size.md 11 KB


title: Оптимизация размера игры в Defold

brief: В этом руководстве описывается, как оптимизировать размер игры на Defold.

Оптимизация размера игры

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

iOS и Android

Apple и Google установили ограничения на размер приложений при загрузке через мобильные сети (в отличие от Wi-Fi). Для Android это ограничение составляет 200 МБ для приложений, опубликованных с использованием app bundles. Для iOS пользователи получат предупреждение, если размер приложения превышает 200 МБ, но они всё равно смогут его загрузить.

::: sidenote Согласно исследованию 2017 года: «Каждое увеличение APK на 6 МБ снижает коэффициент конверсии установки на 1%.» (источник) :::

HTML5

Poki и многие другие веб-платформы рекомендуют, чтобы начальная загрузка не превышала 5 МБ.

Facebook рекомендует, чтобы Facebook Instant Game запускалась менее чем за 5 секунд, желательно — за 3 секунды. Это не означает строго заданный размер, но речь идёт об объёмах до ~20 МБ.

Игровые рекламы с демо-геймплеем обычно ограничены объёмом от 2 до 5 МБ в зависимости от рекламной сети.

Стратегии оптимизации размера

Оптимизировать размер приложения можно двумя способами: уменьшив размер самого движка и/или уменьшив размер игровых ресурсов.

Чтобы лучше понять, из чего складывается размер вашего приложения, вы можете сгенерировать отчёт о сборке. Обычно основной объём занимают звуки и графика.

::: important Defold создаёт дерево зависимостей при сборке и упаковке приложения. Система сборки начинает с коллекции начальной загрузки, указанной в game.project, и просматривает все связанные коллекции, игровые объекты и компоненты, чтобы определить список используемых ресурсов. В итоговый пакет попадут только эти ресурсы. Всё, что не связано напрямую, будет исключено. Несмотря на это, как разработчику вам следует учитывать, какие ресурсы включаются в итоговое приложение и каков их размер — как по отдельности, так и в совокупности. :::

Оптимизация размера движка

Быстрый способ уменьшить размер движка — исключить из него функциональность, которая вам не нужна. Это можно сделать с помощью файла манифеста приложения, в котором можно отключить ненужные компоненты движка. Примеры:

  • Physics — если вы не используете физику Box2D или Bullet3D, рекомендуется исключить соответствующие модули
  • LiveUpdate — если не используется, его можно отключить
  • Image load — если вы не загружаете изображения вручную через image.load()
  • BasisU — если в игре немного текстур, попробуйте собрать игру без BasisU и без сжатия текстур, и сравните размер. В таких случаях может быть выгоднее отказаться от транскодера и сжатия, чтобы уменьшить размер бинарника и снизить использование памяти.

Оптимизация ресурсов

Наибольший эффект даёт уменьшение размера звуков и текстур.

Оптимизация звуков

Defold поддерживает форматы:

  • .wav
  • .ogg
  • .opus

Файлы звуков должны использовать 16-битные сэмплы. Декодеры Defold масштабируют частоту дискретизации под устройство воспроизведения.

Короткие звуки, например эффекты, обычно сильнее сжимаются. Музыкальные треки — меньше. Defold не сжимает аудио, разработчик должен оптимизировать звуки самостоятельно.

Вы можете использовать аудиоредакторы или консольные инструменты (например, ffmpeg) для снижения качества или конвертации. Также рассмотрите возможность перевода стерео в моно, чтобы уменьшить размер.

Оптимизация текстур

Начните с проверки размеров изображений, добавляемых в атлас или используемых как tilesource. Изображения не должны быть больше, чем это действительно необходимо. Импорт больших картинок и масштабирование внутри игры — пустая трата памяти. Используйте редакторы изображений, чтобы уменьшить размеры до нужных. Для фонов допустимо использовать маленькие изображения с масштабированием вверх. Также проверьте итоговый размер атласов — он зависит от платформы и GPU:

::: sidenote Этот пост на форуме содержит советы по пакетному изменению размеров изображений. :::

  • HTML5: Web3D Survey
  • iOS:
    • iPad: 2048x2048
    • iPhone 4: 2048x2048
    • iPad 2, 3, Mini, Air, Pro: 4096x4096
    • iPhone 4s, 5, 6+, 6s: 4096x4096
  • Android: максимальный размер текстур сильно варьируется, но в целом все современные устройства поддерживают минимум 4096x4096

Если атлас слишком велик, его можно разбить на несколько меньших, использовать мультистраничные атласы или масштабировать весь атлас с помощью профиля текстур. Система профилей в Defold позволяет не только масштабировать атласы, но и применять алгоритмы сжатия для уменьшения их размера на диске. Подробнее о профилях текстур читайте в руководстве. Если вы не уверены, с чего начать, используйте следующие настройки в качестве отправной точки:

  • mipmaps: false
  • premultiply_alpha: true
  • format: TEXTURE_FORMAT_RGBA
  • compression_level: NORMAL
  • compression_type: COMPRESSION_TYPE_BASIS_UASTC

::: sidenote Дополнительные советы по оптимизации текстур можно найти в этом форуме. :::

Оптимизация шрифтов

Размер шрифта будет меньше, если явно указать нужные символы в поле Characters вместо использования опции All Chars.

Исключение контента для загрузки по требованию

Другой способ уменьшения начального размера приложения — это исключение части контента из основного пакета и его загрузка по требованию. Для этого используйте систему Live Update.

Вы можете исключить целые уровни, скины, персонажей и т.п. Организуйте загрузку так, чтобы в начальном наборе ресурсов были только те, что нужны для запуска и первого уровня. Используйте collection proxies или factories с включённой галочкой "Exclude". Делите ресурсы по прогрессу игрока. Подробнее читайте в руководстве по Live Update.

Оптимизация размера на Android

Сборки для Android должны поддерживать 32-битные и 64-битные архитектуры. При создании сборки для Android можно указать, какие архитектуры включать:

Подпись Android сборки

Google Play поддерживает несколько APK на выпуск, что позволяет разделить сборку по архитектурам и уменьшить итоговый размер каждого APK.

Также вы можете использовать дополнительные файлы APK Expansion в сочетании с контентом Live Update, используя расширение APKX.