--- title: Оптимизация размера игры в Defold brief: В этом руководстве описывается, как оптимизировать размер игры на Defold. --- # Оптимизация размера игры Размер вашей игры может быть критически важным фактором успеха на таких платформах, как веб и мобильные устройства, в то время как на ПК и консолях это менее важно из-за доступности и дешевизны дискового пространства. ### iOS и Android Apple и Google установили ограничения на размер приложений при загрузке через мобильные сети (в отличие от Wi-Fi). Для Android это ограничение составляет 200 МБ для приложений, опубликованных с использованием [app bundles](https://developer.android.com/guide/app-bundle#size_restrictions). Для iOS пользователи получат предупреждение, если размер приложения превышает 200 МБ, но они всё равно смогут его загрузить. ::: sidenote Согласно исследованию 2017 года: «Каждое увеличение APK на 6 МБ снижает коэффициент конверсии установки на 1%.» ([источник](https://medium.com/googleplaydev/shrinking-apks-growing-installs-5d3fcba23ce2)) ::: ### HTML5 Poki и многие другие веб-платформы рекомендуют, чтобы начальная загрузка не превышала 5 МБ. Facebook рекомендует, чтобы Facebook Instant Game запускалась менее чем за 5 секунд, желательно — за 3 секунды. Это не означает строго заданный размер, но речь идёт об объёмах до ~20 МБ. Игровые рекламы с демо-геймплеем обычно ограничены объёмом от 2 до 5 МБ в зависимости от рекламной сети. ## Стратегии оптимизации размера Оптимизировать размер приложения можно двумя способами: уменьшив размер самого движка и/или уменьшив размер игровых ресурсов. Чтобы лучше понять, из чего складывается размер вашего приложения, вы можете [сгенерировать отчёт о сборке](/manuals/bundling/#build-reports). Обычно основной объём занимают звуки и графика. ::: important Defold создаёт дерево зависимостей при сборке и упаковке приложения. Система сборки начинает с коллекции начальной загрузки, указанной в *game.project*, и просматривает все связанные коллекции, игровые объекты и компоненты, чтобы определить список используемых ресурсов. В итоговый пакет попадут только эти ресурсы. Всё, что не связано напрямую, будет исключено. Несмотря на это, как разработчику вам следует учитывать, какие ресурсы включаются в итоговое приложение и каков их размер — как по отдельности, так и в совокупности. ::: ## Оптимизация размера движка Быстрый способ уменьшить размер движка — исключить из него функциональность, которая вам не нужна. Это можно сделать с помощью [файла манифеста приложения](https://defold.com/manuals/app-manifest/), в котором можно отключить ненужные компоненты движка. Примеры: * Physics — если вы не используете физику Box2D или Bullet3D, рекомендуется исключить соответствующие модули * LiveUpdate — если не используется, его можно отключить * Image load — если вы не загружаете изображения вручную через `image.load()` * BasisU — если в игре немного текстур, попробуйте собрать игру без BasisU и без сжатия текстур, и сравните размер. В таких случаях может быть выгоднее отказаться от транскодера и сжатия, чтобы уменьшить размер бинарника и снизить использование памяти. ## Оптимизация ресурсов Наибольший эффект даёт уменьшение размера звуков и текстур. ### Оптимизация звуков Defold поддерживает форматы: * .wav * .ogg * .opus Файлы звуков должны использовать 16-битные сэмплы. Декодеры Defold масштабируют частоту дискретизации под устройство воспроизведения. Короткие звуки, например эффекты, обычно сильнее сжимаются. Музыкальные треки — меньше. Defold не сжимает аудио, разработчик должен оптимизировать звуки самостоятельно. Вы можете использовать аудиоредакторы или консольные инструменты (например, [ffmpeg](https://ffmpeg.org)) для снижения качества или конвертации. Также рассмотрите возможность перевода стерео в моно, чтобы уменьшить размер. ### Оптимизация текстур Начните с проверки размеров изображений, добавляемых в атлас или используемых как tilesource. Изображения не должны быть больше, чем это действительно необходимо. Импорт больших картинок и масштабирование внутри игры — пустая трата памяти. Используйте редакторы изображений, чтобы уменьшить размеры до нужных. Для фонов допустимо использовать маленькие изображения с масштабированием вверх. Также проверьте итоговый размер атласов — он зависит от платформы и GPU: ::: sidenote [Этот пост на форуме](https://forum.defold.com/t/texture-management-in-defold/8921/17?u=britzl) содержит советы по пакетному изменению размеров изображений. ::: * HTML5: [Web3D Survey](https://web3dsurvey.com/webgl/parameters/MAX_TEXTURE_SIZE) * iOS: * iPad: 2048x2048 * iPhone 4: 2048x2048 * iPad 2, 3, Mini, Air, Pro: 4096x4096 * iPhone 4s, 5, 6+, 6s: 4096x4096 * Android: максимальный размер текстур сильно варьируется, но в целом все современные устройства поддерживают минимум 4096x4096 Если атлас слишком велик, его можно разбить на несколько меньших, использовать мультистраничные атласы или масштабировать весь атлас с помощью профиля текстур. Система профилей в Defold позволяет не только масштабировать атласы, но и применять алгоритмы сжатия для уменьшения их размера на диске. Подробнее о профилях текстур читайте в [руководстве](/manuals/texture-profiles/). Если вы не уверены, с чего начать, используйте следующие настройки в качестве отправной точки: * mipmaps: false * premultiply_alpha: true * format: TEXTURE_FORMAT_RGBA * compression_level: NORMAL * compression_type: COMPRESSION_TYPE_BASIS_UASTC ::: sidenote Дополнительные советы по оптимизации текстур можно найти в [этом форуме](https://forum.defold.com/t/texture-management-in-defold/8921). ::: ### Оптимизация шрифтов Размер шрифта будет меньше, если явно указать нужные символы в поле [Characters](/manuals/font/#properties) вместо использования опции All Chars. ### Исключение контента для загрузки по требованию Другой способ уменьшения начального размера приложения — это исключение части контента из основного пакета и его загрузка по требованию. Для этого используйте систему Live Update. Вы можете исключить целые уровни, скины, персонажей и т.п. Организуйте загрузку так, чтобы в начальном наборе ресурсов были только те, что нужны для запуска и первого уровня. Используйте collection proxies или factories с включённой галочкой "Exclude". Делите ресурсы по прогрессу игрока. Подробнее читайте в [руководстве по Live Update](/manuals/live-update/). ## Оптимизация размера на Android Сборки для Android должны поддерживать 32-битные и 64-битные архитектуры. При [создании сборки для Android](/manuals/android) можно указать, какие архитектуры включать: ![Подпись Android сборки](images/android/sign_bundle.png) Google Play поддерживает [несколько APK](https://developer.android.com/google/play/publishing/multiple-apks) на выпуск, что позволяет разделить сборку по архитектурам и уменьшить итоговый размер каждого APK. Также вы можете использовать [дополнительные файлы APK Expansion](https://developer.android.com/google/play/expansion-files) в сочетании с [контентом Live Update](/manuals/live-update), используя [расширение APKX](https://defold.com/assets/apkx/).