Запікання карт освітлення (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 = light zones 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.





