~4 мин чтения

Сборка и оптимизация

Export Presets, Profiler, веб-таргет и WASM, чек-лист релиза.

В Godot сборка — это Export Preset (конфиг для платформы) + Export Template (бинарь движка без редактора). Платформы first-party: Windows, macOS, Linux, Android, iOS, Web, visionOS (с 4.5).

Export Presets

Project → Export открывает окно с конфигами. Добавьте preset для нужной платформы:

  • Platform (Windows Desktop, Android, Web, …).
  • Bundle Identifier / Package Name (для mobile/Mac/iOS).
  • Icon и Splash.
  • Permissions (Android — camera, location и т.д.).
  • Encryption — зашифровать pack-файл.
  • Export Mode — All resources / Resources from group / By files.
  • Debug / Release — release делает оптимизированный билд без debugger.

Export Templates

Это бинарники движка под все целевые платформы (без редактора). Скачайте через Editor → Manage Export Templates → Download. Один раз на версию редактора (~1 GB).

Затем при Export Project Godot собирает: ваши ресурсы + template = готовая игра.

Платформенные особенности

Windows / macOS / Linux

  • Windows.exe. Подписывать через signtool.exe (опции в Inspector preset’а).
  • macOS.app (или .dmg с автоматической упаковкой). Notarization через Apple Developer для бесшумного запуска. Требует Mac для подписи; теоретически возможна cross-compile.
  • Linux.x86_64. PIE/non-PIE опции для совместимости.

Android

  • Android SDK + JDK — нужно установить и указать пути в Editor Settings → Export → Android.
  • APK / AAB — preset выбирает.
  • 16 KB page size — поддержка с 4.5 (требование Google Play от 1 ноября 2025).
  • Architecturesarm64-v8a + x86_64 для эмуляторов.

iOS

  • Требует Mac + Xcode.
  • Export создаёт Xcode project — открываете в Xcode, собираете и шипите оттуда.
  • Подпись и provisioning profile — стандартно через Apple Developer.

Web (HTML5)

Это один из самых сложных таргетов. Особенности:

  • Compatibility renderer обязателен. Forward+/Mobile в WebGL2 — экспериментально.
  • Threading в WASM требует Cross-Origin Isolation: заголовки сервера:
    Cross-Origin-Opener-Policy: same-origin
    Cross-Origin-Embedder-Policy: require-corp
  • С Godot 4.2/4.3 есть single-threaded экспорт (без SharedArrayBuffer). Работает везде, в том числе на дефолтных хостингах (itch.io, S3). Включается флажком “Threads” → Off.
  • C# в веб не экспортируется — open issue, в работе.
  • Размер бандла: пустой проект ~25 MB (после Brotli), реальные игры — 50–150 MB.

Output веб-экспорта:

index.html        ← запускающая страница
index.js          ← JS-loader
index.wasm        ← движок и ваш код
index.pck         ← упакованные ассеты
index.icon.png

Загружать через любой web-сервер.

PWA-режим инжектит COOP/COEP

Если включите в preset “PWA → Enabled”, Godot сгенерирует Service Worker, который инжектит COOP/COEP заголовки. Тогда threads будут работать даже на хостингах без поддержки этих заголовков (itch.io, GitHub Pages).

Профайлер

Debugger → внизу редактора → вкладки:

  • Profiler — CPU-профайлер. Включить → запустить игру → собирает данные. Показывает время на каждый метод и узел.
  • Visual Profiler — GPU-профайлер. Время каждого render-pass’а.
  • Network Profiler — для мультиплеера.
  • Monitors — графики метрик в реальном времени: FPS, draw calls, objects, мемоори, video memory.
  • Remote Scene Tree — живое дерево узлов запущенной игры; можно инспектировать значения.

Бюджет кадра

  • 60 FPS = 16.6 мс
  • 30 FPS = 33.3 мс
  • 120 FPS = 8.3 мс
  • VR 90 FPS = 11.1 мс, и без права на просадки

Распределение в типовой 3D-сцене:

  • 2–4 мс — rendering на GPU.
  • 2–6 мс — physics + ваши скрипты на CPU.
  • Остаток — buffer, VSync.

Главные оптимизации

Сжатие текстур

В Import-доке для каждой текстуры — Compress Mode:

  • VRAM Compressed — для рантайма (BCn для PC, ASTC для Android/iOS).
  • VRAM Uncompressed — несжатая.
  • Basis Universal — кросс-платформенно через супер-сжатие, транскодится на GPU target.
  • Lossless — PNG.

VRAM Compressed обязателен для большинства проектов; экономит видеопамять и draw-time.

LOD — Level of Detail

В отличие от Unity LODGroup, Godot применяет Mesh-level LOD автоматически, если mesh содержит несколько уровней детализации (генерируется при импорте при включённой “Generate LODs”). MeshInstance3D имеет свойство mesh_lod_threshold (px на экране, при котором переключаться).

Occlusion Culling

Godot поддерживает OccluderInstance3D — узлы-occluder’ы (статичная геометрия), которые рассказывают рендереру “за этой стенкой ничего не видно”. Запекается через Bake Occluders в редакторе.

Static Lighting

Запекание света через LightmapGI — снимает realtime cost для статичной геометрии. См. главу про освещение.

Меньше draw calls — MultiMesh

Для повторяющихся объектов (трава, ассеты) используйте MultiMeshInstance3D — рендерит N экземпляров одним draw call’ом. Аналог Unity GPU Instancing.

Профилирование GDScript

  • Статическая типизация даёт 28–59% ускорение горячего кода. Используйте var x: int вместо просто var x.
  • Каждое обращение $Name — это get_node, не бесплатно. Кешируйте в @onready.
  • Сигналы дешевле, чем polling: вместо проверять if hp != last_hp: каждый кадр, эмитьте сигнал при изменении.

Чек-лист релиза

  • Профайлер показывает стабильные 60 FPS на целевом устройстве.
  • Память не растёт за длительный gameplay (нет утечек, Resource Monitor стабилен).
  • Текстуры сжаты (VRAM Compressed), не сырые PNG.
  • LOD на тяжёлых моделях.
  • Occlusion baked для интерьеров.
  • Lightmaps baked для статичных сцен.
  • Project Settings → Application: версия, иконка, splash настроены.
  • Билд протестирован на target-устройстве (не только на dev).
  • Print statements / отладочный код почищен или обёрнут в if OS.is_debug_build().
  • Settings меню (громкость, графика, кеи) сохраняется через ConfigFile или user://.
  • Для веба — проверены заголовки COOP/COEP или single-threaded билд.
user:// — sandbox для сохранений

Файлы в user:// — это специальное место (Roaming AppData / Library / .local) для save-файлов и пользовательских настроек. Не пишите в res:// в рантайме — это read-only после билда.


На этом главный раздел про 3D-разработку в Godot завершён. Дальше — глоссарий терминов с веб-аналогами и параллелями к Unity.