Сборка и оптимизация
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).
- Architectures —
arm64-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-сервер.
Если включите в 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:// — это специальное место (Roaming AppData / Library / .local) для save-файлов
и пользовательских настроек. Не пишите в res:// в рантайме — это read-only после билда.
На этом главный раздел про 3D-разработку в Godot завершён. Дальше — глоссарий терминов с веб-аналогами и параллелями к Unity.