Настройка динамического и статического освещения в играх
Выбор между динамическим и статическим освещением — одно из первых технических решений, которое принимается при проектировании уровня. Это решение определяет бюджет производительности, качество теней, возможности геймплея и объём работы по световому пайплайну. Откатить его в середине производства дорого.
Статическое освещение даёт лучшее качество теней и ambient, но не реагирует на изменения в сцене. Динамическое — реагирует на всё, но стоит дороже по GPU. На практике в большинстве проектов используется гибридная схема, и именно правильная настройка этой гибридной схемы — основная техническая задача.
Статическое освещение: Progressive Lightmapper и его параметры
В Unity статическое освещение запекается через Progressive Lightmapper (GPU или CPU). Это path-tracing решение, которое рассчитывает indirect lighting, soft shadows и ambient occlusion для статичных объектов, сохраняя результат в Lightmap Textures.
Ключевые параметры, которые напрямую влияют на результат:
Lightmap Resolution. Измеряется в texels per unit. Для внешних поверхностей стандарт — 4–8 texels/unit, для hero-поверхностей (полы, стены в важных локациях) — 16–32. Выше — дольше запекание и больше VRAM для хранения lightmap. Ниже — видимая пикселизация теней. Типичная ошибка: ставить одинаковое значение для всей сцены, вместо того чтобы контролировать через Scale in Lightmap на каждом объекте.
Samples (Direct/Indirect/Environment). Direct Samples — количество семплов для прямых источников. 512–1024 для production, меньше только для быстрых preview-запеканий. Indirect Samples — глубина расчёта переотражений, 512–2048 в зависимости от сложности сцены. Environment Samples — влияет на качество ambient от skybox. Занижение Indirect Samples — главная причина шума на потолках и в углах.
Denoising. Встроенный деноизер Unity (OptiX для Nvidia, OIDN для CPU) убирает шум от path-tracing. Важно понимать: деноизинг сглаживает, а не улучшает качество. При слишком малом количестве семплов деноизер размывает тени до потери деталей. Правило: семплов должно быть достаточно, чтобы шум был мелким — тогда деноизер его аккуратно убирает.
Lightmap Compression. Unity по умолчанию сжимает lightmaps в BC6H (HDR). Если сцена требует точных цветовых данных в освещении — например, coloured light leaking через окна — BC6H правильный выбор. Для simple outdoor без цветных источников можно снизить до BC4 для экономии VRAM.
Динамическое освещение: Shadow Cascades и производительность
Динамические тени — это shadow map rendering: сцена рендерится с точки зрения источника света в depth texture, которая потом используется при основном рендере для определения затенённых зон.
Shadow Cascades — критический параметр для Directional Light (солнце, луна). Один shadow map на всю сцену означает компромисс: либо мелкие, но охватывающие, либо детальные, но только для ближней зоны. Cascaded Shadow Maps делят дистанцию на 2–4 зоны с разным разрешением shadow map: ближняя зона — высокое разрешение, дальняя — низкое.
Правильная настройка Cascade Distances — баланс между качеством и производительностью. Если First Cascade слишком большой — тени ближних объектов размыты (pixelated shadowmap). Если слишком маленький — видна резкая граница перехода между каскадами. Граница перехода сглаживается через Shadow Cascade Blend в Unity или Dynamic Shadow Distance Fadeout в Unreal.
В Unreal Engine 5 с Lumen динамическое global illumination вычисляется в Screen Space + Signed Distance Fields, что кардинально меняет подход к освещению. Shadow Cascades для Directional Light остаются (Virtual Shadow Maps в UE5 — значительное улучшение качества при контролируемом бюджете), но indirect lighting от Lumen не требует Light Probes и Lightmaps — это real-time GI.
Light Probes и смешанное освещение
Light Probes в Unity — сферические гармоники (Spherical Harmonics, L2), хранящие ambient lighting для конкретной точки пространства. Динамические объекты (персонажи, частицы, транспорт) не могут использовать lightmaps — они берут освещение из Light Probes.
Ошибка, которая встречается почти на каждом проекте: Light Probes расставлены слишком редко или только по периметру уровня, а не по зонам с разным освещением. Персонаж, входящий из освещённой улицы в тёмное здание, получает одинаковый ambient в обоих местах — освещение не меняется. Решение: плотная сетка Probes в переходных зонах (дверные проёмы, арки, под навесами), разреженная — в однородно освещённых областях.
Light Probe Proxy Volume (LPPV) — для крупных динамических объектов (транспорт, большие существа): вместо одного Probe в центре объекта, LPPV строит объёмную решётку Probes по габаритам объекта. Разница заметна: без LPPV большой грузовик освещён равномерно как сплошной объект, с LPPV — правая сторона темнее, если она в тени здания.
Enlighten — система real-time GI в Unity (доступна в HDRP). Рассчитывает переотражения от динамически меняющегося Directional Light — day/night cycle с Enlighten означает, что ambient меняется вместе с положением солнца без перезапекания lightmaps. Стоит CPU времени при каждом изменении источника, поэтому используется избирательно: только для Directional Light, остальные источники — статические или baked.
Гибридная схема: что запекать, что оставлять динамическим
Практическая схема для большинства проектов:
- Directional Light (солнце) — Mixed mode: статические тени в lightmap, динамические тени для персонажей через Cascades
- Крупные Point Lights (фонари, костры) — Baked, если статичные. Динамические только если горят/гаснут по геймплею
- Мелкие accent lights (свечи, экраны) — Baked, часто как Emissive в lightmap
- Light Probes — расставить вручную по зонам, не полагаться на Auto Generate
| Масштаб задачи | Ориентировочный срок |
|---|---|
| Настройка освещения одной небольшой локации | 2–4 дня |
| Interior с full GI и baked lightmaps | 4–8 дней |
| Open-world уровень с day/night cycle | 2–4 недели |
| Оптимизация и исправление существующего освещения | по согласованию |
Начинаем с технического аудита: платформа, целевой framerate, pipeline (URP/HDRP/Lumen). Дальше — проектирование схемы освещения, расстановка источников, настройка shadow cascades, запекание lightmaps и проверка на целевом железе.
Стоимость рассчитывается индивидуально после анализа требований к проекту.





