~2 мин чтения

Освещение и тени

DirectionalLight3D, OmniLight3D, SpotLight3D, lightmaps и SDFGI.

Иллюстрация: Освещение и тени

Узлы света

Три встроенных типа света (плюс грядущий AreaLight3D в 4.7):

  • DirectionalLight3D — солнце. Параллельные лучи, бесконечно далёкие. Один на сцену обычно.
  • OmniLight3D — точечный (Unity Point Light). От точки во все стороны с радиусом затухания.
  • SpotLight3D — конус из точки с углом и радиусом.
  • AreaLight3D — area-light (с 4.7). Прямоугольный/дисковый источник.
$DirectionalLight3D.light_energy = 1.5
$DirectionalLight3D.light_color = Color(1.0, 0.95, 0.85)  # тёплое утро
$DirectionalLight3D.shadow_enabled = true

Главные свойства каждого:

  • light_energy — яркость.
  • light_color — цвет.
  • light_indirect_energy — множитель для непрямого света от этого источника (в GI).
  • shadow_enabled — рисовать тени.
  • shadow_bias, shadow_normal_bias — настройки артефактов теней.
  • light_bake_modeLight3D.BAKE_DISABLED / BAKE_STATIC (baked) / BAKE_DYNAMIC (real-time GI). В Inspector показано как Disabled/Static/Dynamic, но в коде — с префиксом BAKE_.

Realtime, baked, mixed

Как и в Unity, три режима использования:

Bake ModeГде вычисляетсяПрименение
DISABLEDRealtime каждый кадрДинамические источники (взрыв, ракета)
STATICЗапекается один разСтатичная архитектура
DYNAMICРеалтайм + участвует в GI (SDFGI/VoxelGI)Главный сценический свет, не двигается

Запекание GI

В Godot есть три системы глобального освещения, разные по цене:

1. LightmapGI — запечённые лайтмапы

Самый эффективный по runtime, но требует запекания. Для статичной геометрии.

  1. Пометьте объекты как “static” (через флаг gi_mode = STATIC в Inspector у MeshInstance3D).
  2. Добавьте узел LightmapGI на сцену.
  3. Bake Lightmaps кнопкой в редакторе.

Для динамических объектов в зоне lightmap’а — используйте LightmapProbe (как Unity Light Probes).

2. VoxelGI — voxel-based realtime GI

Делит сцену на 3D-сетку вокселей, рассчитывает GI в realtime. Дорого, но красиво. Узел VoxelGI, кнопка Bake создаёт начальные данные. Подходит для интерьеров.

3. SDFGI — Signed Distance Field GI

Самый мощный — динамический GI без запекания. Включается в Environment ресурсе:

env.sdfgi_enabled = true
env.sdfgi_cascades = 6
env.sdfgi_min_cell_size = 0.5

Минусы: только Forward+, дорого, заметная “пелена” вблизи граничек каскадов.

Рецепт большинства проектов

Forward+ desktop: главный свет — DirectionalLight3D в DYNAMIC bake mode, sky/world environment с SDFGI или LightmapGI. Mobile: LightmapGI + DirectionalLight3D в STATIC.

Тени — каскады для DirectionalLight3D

DirectionalLight (солнце) рисует тени через shadow cascades — несколько разрешений теневой карты с разной дистанцией:

  • directional_shadow_modeORTHOGONAL / PARALLEL_2_SPLITS / PARALLEL_4_SPLITS.
  • directional_shadow_max_distance — до какой дистанции рисуем тени.
  • directional_shadow_split_1/2/3 — пропорции каскадов.

Чем больше каскадов — тем плавнее переход, но дороже. PARALLEL_4_SPLITS — стандарт.

Skybox и Environment

WorldEnvironment + Environment ресурс — глобальные настройки сцены. Environment.background_mode принимает значения с префиксом BG_:

  • Environment.BG_CLEAR_COLOR — один цвет.
  • Environment.BG_COLOR — другой цвет.
  • Environment.BG_SKY — Sky-ресурс (procedural или panorama HDR).
  • Environment.BG_CANVAS — 2D-фон.
  • Environment.BG_KEEP — не очищать (для split-screen).
  • Environment.BG_CAMERA_FEED — AR/камера устройства.

Для HDRI:

var sky_mat = PanoramaSkyMaterial.new()
sky_mat.panorama = preload("res://hdri/sunset_4k.exr")
var sky = Sky.new()
sky.sky_material = sky_mat
env.sky = sky
env.background_mode = Environment.BG_SKY
env.ambient_light_source = Environment.AMBIENT_SOURCE_SKY

Panorama (equirectangular) HDR работает из коробки — берите с PolyHaven, ставите, освещение “пропитывается” этим небом.

Reflection Probes

Узел ReflectionProbe — сферическая карта окружения для отражений в материале. Размещайте в центре комнаты:

  • box_projection — проектировать отражение на box, чтобы отражения не “плыли” в углах.
  • update_modeONCE (одна запечённая) / ALWAYS (каждый кадр, дорого).

Для металлических материалов это критично — без probe отражают только sky.

Что обычно ломается у новичков

  1. Все объекты dynamic, GI не работает. Помечайте gi_mode = STATIC на не двигающейся геометрии перед запеканием.
  2. Слишком много realtime теневых источников. OmniLight3D с тенями в Forward — дорого. Ограничьте 4–6 видимых одновременно.
  3. Compatibility-рендер и SDFGI / VoxelGI. Не работают вместе — используйте LightmapGI.
  4. Forgetting WorldEnvironment. Без него сцена будет рендериться с дефолтным environment (часто чёрный фон, без ambient’а).

В следующей главе — анимация.