Запекание карт освещения (Lightmaps) для графики
Lightmap-запекание — это технология, которую принято считать «устаревшей» на фоне Lumen и real-time GI. На практике она остаётся основным способом получить качественное, производительное освещение на мобильных платформах и бюджетных PC. Даже в Unreal Engine 5-проектах многие студии используют baked lighting для статичных интерьеров, потому что Lumen при всех преимуществах не даёт той же чёткости теней и той же производительности на слабом железе.
Качество запечённого освещения зависит от десятка параметров, и большинство проблем с «плохими» lightmaps — следствие неправильно выставленных именно этих параметров.
Главная причина артефактов: UV2 и texel density
Lightmap в Unity или Unreal запекается в отдельный UV-канал — UV2 (или Lightmap UV в Unreal). Это не та же развёртка, что используется для albedo. Lightmap UV имеет жёсткие требования:
- Никаких перекрытий (overlapping): каждый треугольник меша — на своём уникальном месте в UV2
- Минимальный отступ между островами (padding): не менее 2 texels при целевом разрешении lightmap. Если lightmap 512px и padding 2px — это ~0.4% от текстуры на каждый шов. При 2048px — 0.1%. Недостаточный padding = bleeding светлых зон в тёмные через смежные острова UV
- Все острова должны быть развёрнуты без зеркальных отражений (no mirrored UVs): зеркалирование даёт корректный albedo, но в lightmap вызывает двойное освещение на симметричных частях
Unity автоматически генерирует Lightmap UV при импорте (Generate Lightmap UVs в Import Settings). Для простой геометрии это работает. Для сложных мешей с острыми углами или тонкими деталями — автогенерация создаёт некорректные острова, которые при запекании дают видимые seams на lightmap. В таких случаях UV2 делается вручную в DCC-инструменте (Blender, Maya, 3ds Max) и импортируется уже готовым.
Texel density в Lightmap UV — это сколько пикселей lightmap приходится на единицу площади поверхности. Для больших плоских поверхностей (пол, стены) — нужен больший участок в UV2. Для мелких деталей (плинтус, дверная ручка) — меньший. Unity и Unreal позволяют контролировать это через Scale in Lightmap (Unity) и Lightmap Resolution Scale (Unreal) на каждом объекте отдельно. Одинаковый Scale для всех объектов сцены — типичная ошибка: мелкие объекты получают избыточное разрешение, крупные — недостаточное.
Progressive Lightmapper: параметры, которые действительно важны
В Unity главный инструмент для запекания — Progressive Lightmapper (с версии 2018.3, GPU-ускоренная версия с 2020.1). Это путь к пониманию большинства проблем с качеством.
Indirect Bounces. Количество переотражений света. При Bounces=0 — только прямое освещение, без GI. При Bounces=2 — свет отражается от поверхностей дважды, заполняя тени мягким ambient. Для тёмных помещений Bounces=2–3 — минимум для достоверного вида. Для ярких outdoor часто достаточно 1–2.
Indirect Intensity и Albedo Boost. Indirect Intensity масштабирует яркость GI глобально. Albedo Boost усиливает влияние цвета поверхностей на переотражённый свет — при значении 1.0 поверхность с ярко-красным albedo создаёт красноватый ambient на соседних поверхностях (colour bleeding). При Albedo Boost > 1 эффект усиливается, при < 1 — цвета поверхностей меньше влияют на GI. Для реалистичного рендера Albedo Boost = 1, для менее «грязного» ambient — 0.5–0.8.
Prioritize View и Progressive Updates. При запекании Progressive Lightmapper начинает с пикселей, видимых в Scene View — это удобно для итеративной работы, но при финальном запекании лучше отключить для равномерного качества по всей сцене.
Типичная проблема на крупных сценах — light leaking: свет проникает сквозь тонкие стены. Причина — shadow rays в path-tracer проходят через геометрию тоньше определённого порога. Решение: сделать стены и полы не менее 0.2–0.3 unit толщиной (зависит от масштаба сцены) и убедиться, что нет дыр в геометрии. Альтернатива — Shadow Bias в настройках источника света, но он решает проблему только частично.
Unreal Engine: Lightmass и его специфика
В Unreal для запекания используется Lightmass — Global Illumination система со своими параметрами в World Settings → Lightmass.
Static Lighting Level Scale. Глобальный масштаб для качества запекания — чем меньше значение, тем выше детализация lightmaps, но дольше запекание. По умолчанию 1.0 — для production-качества снижают до 0.5–0.75.
Num Indirect Lighting Bounces. Аналог Bounces в Unity. Для тёмных интерьеров — 4–6, для outdoor — 3–4.
Indirect Lighting Quality. Множитель количества семплов для indirect lighting. Default = 1.0, для чистого production — 2.0–4.0. При высоком значении резко возрастает время запекания.
В Unreal Lightmass запекание происходит через Swarm — распределённую систему, которая может использовать несколько компьютеров в сети одновременно. Для больших уровней с большим разрешением lightmaps (4096+) без Swarm запекание может занимать 8–24 часа; с несколькими машинами в Swarm — в 4–8 раз быстрее.
Volumetric Lightmap в Unreal — аналог Light Probes в Unity. Автоматически строится при запекании и обеспечивает ambient для динамических объектов. Параметр Volumetric Lightmap Detail Cell Size в World Settings контролирует плотность решётки. Меньше значение — точнее ambient для динамических объектов, больше объём данных.
Распространённые проблемы при запекании
Seams на lightmap. Видимые границы между UV-островами на освещённой поверхности. Причина: недостаточный padding в UV2. Решение — увеличить padding или пересмотреть разбивку UV-островов.
Тёмные пятна в углах. Не всегда artistically correct AO — иногда это недостаточное количество Indirect Samples. Проверить: увеличить Indirect Samples вдвое и посмотреть, изменились ли тёмные зоны. Если шум уменьшился — samples были занижены.
Жёлтый или красный tint на серых поверхностях. Colour bleeding от соседних окрашенных поверхностей с высоким Albedo Boost. Снизить Albedo Boost или проверить, нет ли соседних ярко окрашенных объектов без Cast Shadows = Off.
Lightmap слишком размыт. Слишком низкий Scale in Lightmap для данного объекта — не хватает texels. Увеличить Scale или пересмотреть приоритеты распределения texel density по сцене.
| Масштаб задачи | Ориентировочный срок |
|---|---|
| Запекание одного небольшого помещения (до 20 объектов) | 1–2 дня |
| Interior-уровень среднего размера | 3–6 дней |
| Outdoor-уровень с лесом, terrain и prop-ами | 5–12 дней |
| Исправление артефактов в готовом проекте | 2–4 дня |
| Настройка UV2 + запекание с нуля (весь уровень) | 2–6 недель |
Сначала аудит UV2-развёрток и настроек Import Settings, потом проектирование распределения texel density, итеративное запекание с увеличением качества, финальная проверка артефактов и сдача.
Стоимость рассчитывается индивидуально после анализа проекта: размер сцены, количество источников, целевая платформа и существующее состояние UV2.





