Освещение и тени
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_mode—Light3D.BAKE_DISABLED/BAKE_STATIC(baked) /BAKE_DYNAMIC(real-time GI). В Inspector показано как Disabled/Static/Dynamic, но в коде — с префиксомBAKE_.
Realtime, baked, mixed
Как и в Unity, три режима использования:
| Bake Mode | Где вычисляется | Применение |
|---|---|---|
| DISABLED | Realtime каждый кадр | Динамические источники (взрыв, ракета) |
| STATIC | Запекается один раз | Статичная архитектура |
| DYNAMIC | Реалтайм + участвует в GI (SDFGI/VoxelGI) | Главный сценический свет, не двигается |
Запекание GI
В Godot есть три системы глобального освещения, разные по цене:
1. LightmapGI — запечённые лайтмапы
Самый эффективный по runtime, но требует запекания. Для статичной геометрии.
- Пометьте объекты как “static” (через флаг
gi_mode = STATICв Inspector у MeshInstance3D). - Добавьте узел LightmapGI на сцену.
- 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_mode—ORTHOGONAL/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_mode—ONCE(одна запечённая) /ALWAYS(каждый кадр, дорого).
Для металлических материалов это критично — без probe отражают только sky.
Что обычно ломается у новичков
- Все объекты dynamic, GI не работает. Помечайте
gi_mode = STATICна не двигающейся геометрии перед запеканием. - Слишком много realtime теневых источников. OmniLight3D с тенями в Forward — дорого. Ограничьте 4–6 видимых одновременно.
- Compatibility-рендер и SDFGI / VoxelGI. Не работают вместе — используйте LightmapGI.
- Forgetting WorldEnvironment. Без него сцена будет рендериться с дефолтным environment (часто чёрный фон, без ambient’а).
В следующей главе — анимация.