# 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 строит изображение программно:

  1. Вертикальный градиент из SKY_BOTTOM и SKY_TOP с показателем степени 0.92, как в шейдере (mix(sky_bottom, sky_top, pow(uv.y, 0.92)) по смыслу).

  2. Слой «туманности»: несколько полупрозрачных эллипсов в фиолетово-бирюзовой гамме (mw_* из шейдера), затем GaussianBlur — имитация мягкой полосы без тяжёлого процедурного кода на CPU.

  3. Звёзды: псевдослучайные точки с разной яркостью и альфой, часть слегка увеличена (ellipse 2×2), чтобы напомнить крупные звёзды первого слоя шейдера.

  4. Текст по центру с лёгкой тенью для читаемости на светлых участках размытого слоя.

Зафиксирован 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, затем выполнить:

Terminal window
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

Next: 19. Стилизация иконки приложения
Аватар автора

Спасибо, что прочитали статью. Посмотрите другие материалы в архиве, там много практических разборов по разным технологиям.


godot Series

# 16. Тени

godot 16 / 19
4 min read

Тени через StyleBoxFlat у ячеек, HUD, слота баннера и карточки результата; стили кнопок на титуле и поле; лёгкий контактный затемнённый слой на шарах-планетах.

Read