Запечённый свет против реального: вечная война за FPS

26 авг 2026 · 6 мин · 💬 1

Каждый, кто хоть раз оптимизировал сцену, стоит перед выбором: считать свет в реальном времени или запечь его в текстуры. Это не вопрос вкуса, а вопрос физики вашего GPU и здоровья игрока с GTX десятой серии. Разкладываю, кто где побеждает и почему компромисс почти всегда называется «лайтмапы».

Что такое лайтмап

Простая идея: вместо того чтобы каждый кадр выяснять, какая грань освещена, мы один раз считаем освещение всей сцены и записываем результат во вторую UV-развёртку — лайтмап. В шейдере вместо десятков источников света — одна выборка из текстуры. Стоимость кадра падает с «ой» до «ну ок».

В Blender это bake в Cycles: вторая UV-развёртка, выбранная Image Texture, Bake → Combined Lighting (или только Indirect, если прямое хотите оставить живым). В Godot 4 — LightmapGI: размечаете объекты как static, запускаете запекание, получаете папку с лайтмапами. В Unreal — классический baked lighting, который печалит билдом на десятки минут, но выдаёт картинку уровня AAA-игр прошлого десятилетия.

Статика, подвижность и их дети

Движки делят объекты на три касты, и здесь вся суть:

  • Static — не двигается вообще. Полноценный лайтмап, мягкие тени, полная GI. Стоит один раз, потом бесплатно.
  • Stationary / static-movable — не двигается, но отбрасывает тени и может получать динамический свет. В Unreal это отдельный режим: базовое освещение запечено, точечные источники добавляют динамику поверх. Компромисс «и волки сыты»: фонарь мигает, стена не перезапекается.
  • Movable / dynamic — двигается как хочет. Только реальный расчёт, никаких лайтмапов. Персонаж, машина, ящик, который игрок пинает.

Классическая ошибка новичка: импорт модели из Blender без проставления mobility — и движок считает её dynamic, лайтмап на неё не ложится, а сцена светится плоско. Проверьте в первую очередь.

Что теряем, запекая

  1. Время суток. Запёк рассвет — получите рассвет навсегда. Меняете Sun Angle — перепекаёте всё. Динамическое солнце и лайтмапы плохо дружат; игры с циклом дня живут либо на динамическом свете, либо на хитрых blend-лайтмапах (несколько запечённых состояний + интерполяция).
  2. Разрушаемость. Стена, которую взорвали, на лайтмапе всё ещё целая.
  3. Итерации. Правка материала = ребейк. Репейк сцены в Unreal — 20-40 минут. Половина продакшена умерла именно от этого, а не от дедлайнов.
  4. Память. Лайтмапы — это текстуры. Большая сцена на 2K-картах съедает гигабайты VRAM, и «бесплатный» свет перестаёт быть бесплатным.

Когда реальный свет уже доступен

Честно: с RTX-картами и Lumen в Unreal 5 граница сдвинулась. Рейтрейсинг теней и GI в реальном времени больше не фантастика — но он платит кадрами и только на железе помощнее. Бюджетная мобильная сборка по-прежнему живёт лайтмапами, и 60 FPS на телефоне важнее, чем идеальные мягкие тени на десктопе.

Правило большого пальца

Запекайте всё, что не шевелится и не меняется по сюжету. Держите динамическим то, что должно реагировать: выстрелы, взрывы, фонарики, время суток. Смешивайте без стыда — stationary-режим существует именно для этого. И никогда не начинайте финальный билд без пробного запекания: 40 минут на ребейк в день релиза — это не оптимизация, это экстремальный спорт.

Свет, который не пересчитывается, всегда дешевле. Вопрос только в том, какую часть правды вы готовы заморозить ради FPS.

Комментарии (1)

Форма для гостей комментариев пока не принимается — писать можно автору (expeot@outlook.com) или через владельца блога. Все записи выше настоящие, никто их не модерирует молча.