# 18. Стилизация splash screen
Table of Contents
18. Стилизация splash screen
Цель
Заменить нейтральную серую заставку движка на первый кадр в визуальном ключе игры: тёмное космическое небо, мягкая «полоса» туманности в духе starfield_bg.gdshader, звёздная сетка и заголовок «Третья планета», чтобы переход к главному экрану воспринимался как единое целое с меню и партией.
Описание выполненной работы
Почему не полноценный шейдер на boot splash
Boot splash в Godot показывается до загрузки основной сцены и до полной инициализации слоя canvas_item так же, как в игре: это отдельный путь отрисовки движка. Подключать starfield_bg.gdshader «как есть» на этом этапе нельзя без собственной промежуточной сцены-загрузчика. Для шага плана достаточно статического изображения, визуально близкого к уже реализованному фону меню и поля — игрок получает узнаваемую палитру с первых миллисекунд запуска.
Файл PNG и разрешение 720×1280
Размер совпадает с window/size/viewport_ проекта и типичным портретным кадром на целевом Android. При boot_splash/fullsize=true движок растягивает картинку на окно с учётом режима stretch; использование того же базового разрешения уменьшает неприятное дополнительное масштабирование на первом экране. boot_splash/use_filter=true включает линейную фильтрацию — на OLED диагонали текст заголовка выглядит мягче, чем при «сыром» nearest.
Генератор tools/gen_boot_splash.py
Скрипт на Pillow строит изображение программно:
-
Вертикальный градиент из
SKY_BOTTOMиSKY_TOPс показателем степени0.92, как в шейдере (mix(sky_bottom, sky_top, pow(uv.y, 0.92))по смыслу). -
Слой «туманности»: несколько полупрозрачных эллипсов в фиолетово-бирюзовой гамме (
mw_*из шейдера), затемGaussianBlur— имитация мягкой полосы без тяжёлого процедурного кода на CPU. -
Звёзды: псевдослучайные точки с разной яркостью и альфой, часть слегка увеличена (ellipse
2×2), чтобы напомнить крупные звёзды первого слоя шейдера. -
Текст по центру с лёгкой тенью для читаемости на светлых участках размытого слоя.
Зафиксирован random.seed(42), чтобы повторные запуски скрипта давали одинаковый узор звёзд и положение эллипсов — это упрощает ревью диффов в репозитории, если PNG когда‑нибудь закоммитят заново после правки палитры.
Настройки в project.godot
Под секцией [application] добавлены:
-
boot_splash/bg_color— совпадает с нижним краем неба (sky_bottom), чтобы при короткой задержке или на платформах с полями по краям не вспыхивал чужой серый фон движка. -
boot_splash/show_image=trueи путьboot_splash/imageнаres://assets/splash/boot_splash.png. -
boot_splash/minimum_display_time=900(миллисекунды) — заставка не «мигает» при быстрой загрузке на десктопе и даёт время воспринять логотип на телефоне; при желании значение можно снизить до600без изменения ресурсов.
Экспорт Android в текущем export_presets.cfg отдельных полей splash не задаёт — используется общая конфигурация приложения Godot; при появлении требований магазина к отдельным density-specific картинкам их добавят в пресет экспорта или через Gradle ресурсы, не отменяя базового boot_splash.
Сопровождение и правки
Если палитру starfield_bg.gdshader сильно изменят, имеет смысл обновить константы SKY_* и RGB эллипсов в gen_boot_splash.py, затем выполнить:
python tools/gen_boot_splash.pyФайл .import для PNG редактор создаст при первом сканировании проекта — при необходимости его можно закоммитить по аналогии с icon.svg.import.
Связь с шагом 19 (иконка)
Splash задаёт полноэкранный первый кадр; иконка лаунчера (шаг 19) остаётся отдельным маленьким активом config/icon. Визуально их стоит позже свести к одной палитре (например общий акцентный цвет планеты или орбиты), но технически это независимые ресурсы.
UX и производительность
Статический PNG не нагружает GPU до входа в игру; размер файла после optimize=True при экспорте остаётся небольшим по сравнению с аудио. minimum_display_time не блокирует логику игры — только отображение splash; после истечения времени загрузки главная сцена run/main_scene открывается как обычно.
Контрольный список
На устройстве проверьте: отсутствие резкой окантовки текста при fullsize на экранах с другим соотношением сторон (expand уже включён у окна); что цвет полей по краям при системных жестах не контрастирует с bg_color; что после splash не видно «мигания» серого на один кадр — если видно, подстройте boot_splash/bg_color точнее под нижнюю строку boot_splash.png.
Ссылка на проект: Third Planet
Ссылка на игру: Google Play Rustore