При экспорте своей первой простой аркадной игры в Godot 4.1 я столкнулся с проблемой. Не смотря на простоту проекта и присутствие лишь небольшого количества содержимого: несколько спрайтов и небольшого разрешения фонов, игра весила 67мб. Я полез гуглить в чем проблема и как можно ужать итоговый exe файл.

Результаты поиска способов по уменьшению итогового файла
Результаты поиска способов по уменьшению итогового файла

На моё удивление быстрый поиск ответа, на такой, как мне казалось, очевидный вопрос не привёл почти ни к чему. Погуглив тоже самое на английском, информации нашлось больше, однако её пришлось собирать по кускам, т.к. она не давала общего представления, для человека недавно открывшего для себя как этот движок, так и создание игр в целом.

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

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

К сожалению настройка

Короче говоря, в официальной документации описана "Optimizing a build for size" - оптимизация билда по размеру. Поскольку я использую качал уже скомпилированный экзешник Godot, я не сразу понял, про какие исходные файлы там говориться. В итоге спустя просмотр роликов на ютубе и попытки чтения официальной документации я разобрался что делать для получения необходимых уменьшенных шаблонов экспорта. Исходники Godot используются как для компиляции самого движка (с возможность вырезать ненужные функции), так и компиляции шаблонов экспорта. Для этого необходимо иметь:

  • Компилятор C++ (я использовал GNU)

  • Интерпретатор Python

  • Библиотеку scons для Python

  • Сами исходные файлы

Компилятор GNU для Windows можно установить через MSYS2. То, как это сделать подробно описано в мануале Microsoft Visual Studio Code.

Интерпретатор Python можно скачать с официального сайта. Не забудьте добавить путь (в PATH) к интерпретатору при установке (можете посмотреть какие нибудь видео по установке интерпретатора, там всё проще чем с MSYS2). Для установки библиотеки scons нужно прописать в командную строку pip install scons.

Для получения файлов идём на официальный Github Godot engine, выбираем версию, которую вы использовали для своей игры (у меня это Godot 4.1).

Нажимаем на выбор ветки (master) и выбираем нужную версию
Нажимаем на выбор ветки (master) и выбираем нужную версию

После этого нажимаем на Code и либо клонируем репозиторий Git (если умеете), либо просто качаем архив zip архив (кнопка Download ZIP).

Я выбрал скачать zip архив
Я выбрал скачать zip архив
Сжатая папка должна выглядеть как то так
Сжатая папка должна выглядеть как то так

Распаковываем архив и переносим файлы в удобное место (я создал папку Godot 4.1 на диске C и переместил файлы туда)

Далее открываем командную строку (win + R, вводим cmd). Прописываем путь к папке: cd C:\Godot 4.1 (вставьте путь к той папке, в которую вы закинули файлы). Идём в документацию Godot и выбираем те флаги компиляции, которые не нужны в вашем проекте (например, если вы не используете 3d движок, можете отключить его). При этом вы должны быть уверены, что эти функции не используются в вашей игре. Я выбрал следующие:

scons platform=windows target=template_release module_text_server_adv_enabled=no module_text_server_fb_enabled=yes disable_3d=yes disable_advanced_gui=yes module_basis_universal_enabled=no module_bmp_enabled=no module_camera_enabled=no module_csg_enabled=no module_dds_enabled=no module_enet_enabled=no module_gridmap_enabled=no module_hdr_enabled=no module_jsonrpc_enabled=no module_ktx_enabled=no module_mbedtls_enabled=no module_meshoptimizer_enabled=no module_minimp3_enabled=no module_mobile_vr_enabled=no module_msdfgen_enabled=no module_multiplayer_enabled=no module_noise_enabled=no module_navigation_enabled=no module_ogg_enabled=no module_openxr_enabled=no module_raycast_enabled=no module_regex_enabled=no module_squish_enabled=no module_svg_enabled=no module_tga_enabled=no module_theora_enabled=no module_tinyexr_enabled=no module_upnp_enabled=no module_vhacd_enabled=no module_vorbis_enabled=no module_webrtc_enabled=no module_websocket_enabled=no module_webxr_enabled=no module_zip_enabled=no optimize=size tools=no -j12

platform=windows означает, что мы создаём шаблон экспорта под Windows (exe файлы). Остальные флаги можете посмотреть в той же документации и выбрать те, что вам точно не нужны.

Через флаг -j8 устанавливаем количество процессов, которые могут быть одновременно (если я правильно понял, зависит от количества потоков процессора).

После этого запускается нудный процесс компиляции, который может продлиться достаточно долго (при значении -j4 она заняла 17 минут, при значение -j14 заняла 9 минут), в зависимости от вашего устройства и флага -j, которого вы поставили.

В итоге создаётся папка bin, в которой вы найдёте exe файл шаблона экспорта, который будет весить значительно меньше установленного через меню экспорта в Godot.

В этой папке находятся exe файлы шаблона экспорта
В этой папке находятся exe файлы шаблона экспорта
Нам нужен этот
Нам нужен этот

Чтобы использовать для компиляции именно его, я переместил файл в папку с шаблонами экспорта (обычно она должна быть в папке AppData\Roaming\Godot\export_templates\версия вашего движка. Далее при экспорте проекта в пользовательском шаблоне указал ссылку на скомпилированный exe файл:

Возможно в будущем добавят функциональность кнопке Проекты --> Настроить конфигурацию сборки движка (Project --> Customize Engine Build Configuration), но пока, согласно посту одного из разработчиков движка, эта функция не работает должным образом, поэтому приходится обходиться этими костылями.

Комментарии (9)


  1. PrinceKorwin
    16.12.2023 11:30

    Не нашел а статье так в итоге на сколько удалось уменьшить размер файла?


    1. Arendentum
      16.12.2023 11:30

      Так в предпоследнем скрине видно - 35 867 Кб


      1. PrinceKorwin
        16.12.2023 11:30

        С телефона не особо там видно. А каждый открывать и искать не стал. Спасибо за информацию.


      1. furior
        16.12.2023 11:30

        Как я понял из текста, это файл кастомного компилятора, а не игры. Возможно не прав.


        1. Simplast Автор
          16.12.2023 11:30

          Это не компилятор, файл экспорта по сути содержит сам движок. При экспорте файлы игры (ваши спрайты, звуки, музыка и тд) как бы совмещаются с ним в итоговый исполняемый файл и игра работает за счёт этого. Те файлы экспорта, которые Godot предлагает скачать автоматически, содержат движок со всеми функциями (3d движок, все виды нод и тд). Скомпилировав файл экспорта самому, можно выключить те части движка, которые не нужны вашей игре (условно 3d движок в 2d игре) и снизить за счёт этого размер итогового файла с игрой


  1. MrBuzzy
    16.12.2023 11:30

    Разве в документации нет статьи по этому поводу, точно видел. Или она не дала достаточно информации?


    1. Simplast Автор
      16.12.2023 11:30

      Я написал в начале, что как новичку мне было сложно разобраться со всеми шагами в начале. В документации есть флаги компиляции, про них написано понятно и подробно и я ссылаюсь на документацию ближе к концу, но разъяснения про то, как сделать все это пошагово нет, статьи разделены и неинтуитивно связаны друг с другом (по крайней мере мне так кажется). Плюсом я качал уже готовый движок Godot, не компилировав его (а сам движок можно скомпилировать из исходных файлов также, как и шаблоны экспорта, указав другие флаги компиляции), что помогло бы мне сообразить быстрее, поэтому я не понимал что конкретно нужно компилировать


  1. Martianov
    16.12.2023 11:30

    Если экспортировать под веб, то wasm файл с помощью gzip сжатия можно уменьшить ещё до 5-7мб если память не изменяет ????


    1. Simplast Автор
      16.12.2023 11:30

      Под веб не пробовал, спасибо, буду знать:)