reckfellENGINE

LightmapGI: UV2, запекание и проверка результата

Подготовка статической геометрии, режимы света, данные .lmbake и диагностика ошибок.

На этой странице

LightmapGI

LightmapGI заранее рассчитывает освещение статической геометрии и сохраняет его в текстурных атласах. Во время игры атласы читаются вместо повторного вычисления того же непрямого света. Это экономит вычисления, но занимает память и не делает освещение движущейся геометрии полностью динамическим.

Запекание требует сборки с lightmapper_rd и GPU, поддерживающего RenderingDevice. В этом проходе использован установленный редактор Forward+/Vulkan. Отрисовка уже подготовленных карт и их запекание — разные возможности: готовые карты могут использоваться и там, где GPU-запекание недоступно.

Подготовить меши

  1. Сохраните уровень .rscene. Разместите LightmapGI под общим корнем с запекаемой геометрией. Штатная команда обходит родителя LightmapGI и потомков; если сам LightmapGI — корень уровня, обходит его потомков.
  2. Для запекаемых MeshInstance3D установите GIMode = Static. Нужны видимый меш с треугольными поверхностями, нормалями и вторым набором UV.
  3. Подготовьте UV2 без перекрытия островов, с достаточными промежутками. Обычные UV для повторяющейся текстуры не заменяют UV2: разным граням нужны отдельные места в атласе освещения.
  4. Проверьте масштаб объектов, нормали и толщину стен до запекания. Увеличение числа лучей не исправит ошибочную развёртку или дырку в потолке.
Источник мешаПодготовка
Импортированная 3D-модельВ импорте выберите подготовку Static Lightmaps и выполните переимпорт. Проверьте UV2 и размер карты на результирующем меше.
Собственные UV2 из 3D-редактораПроверьте отсутствие перекрытий и достаточный Lightmap Size Hint; наличие второго канала само по себе не гарантирует пригодность.
BoxMesh и другие PrimitiveMeshВключите AddUV2 на ресурсе меша. При необходимости настройте UV2Padding.
Программно созданная геометрияПодготовьте UV2, нормали, размер карты и принадлежность уровню. Непринадлежащие сохранённому уровню служебные Entity могут быть пропущены обходом.

Ручная правка импортированного меша может быть потеряна при следующем импорте. Постоянную подготовку делайте в настройках импорта или исходной модели.

Не перепутать плотность и размер атласа

  • Lightmap Texel Size при импорте: меньшее расстояние на тексель означает большую плотность.
  • LightmapGI.TexelScale: масштабирует размеры карт мешей; большее значение увеличивает требуемую текстурную площадь.
  • GILightmapTexelScale у GeometryInstance3D: меняет плотность для отдельного экземпляра.
  • MaxTextureSize: ограничивает размер одной текстуры атласа, а не задаёт детализацию всех объектов. Текущий сеттер принимает 2048…16384. Атлас может быть меньше заданного предела.

Сначала добейтесь пригодных UV2 и разумной плотности на нужных поверхностях. Затем подбирайте предел атласа и качество.

Выбрать режимы источников

BakeMode источникаЧто попадает в карты
DisabledИсточник исключён из запекания. Подходит для света, который должен работать только во время игры.
DynamicЗапекается непрямой вклад; прямой свет и его тени остаются динамическими. Изменение источника во время игры не пересчитает сохранённый непрямой вклад.
StaticЗапекаются прямой и непрямой вклад для статических получателей. Изменение источника не обновляет уже сохранённые карты.

Скрытие Light3D не заменяет BakeMode = Disabled: текущий сборщик выбирает источники по BakeMode без проверки их Visible. Для исключения света меняйте именно режим и повторяйте запекание.

Если источник будет перемещаться или выключаться, заранее решите, допустим ли оставшийся в картах старый вклад. Название Dynamic не означает динамическую перезапись lightmap.

Запечь и сохранить

  1. Выделите LightmapGI и вызовите Bake Lightmaps — команду запекания карт освещения в 3D-редакторе. В текущем C# SDK метод LightmapGI.Bake() не опубликован; не заменяйте команду редактора выдуманным вызовом.
  2. При первом запекании выберите путь данных .lmbake. Это не тот же формат назначения, что .rbin в руководстве VoxelGI.
  3. Дождитесь завершения. Проверьте назначенный LightData, записи мешей и созданные атласы. Само сообщение о завершении или наличие пустого файла ещё не доказывает, что свет рассчитан.
  4. Сохраните уровень. Сохраняйте вместе .lmbake, сгенерированные исходные атласы и настройки их импорта; один файл данных не заменяет все зависимости.
  5. Повторно откройте сохранённый уровень и запустите его. Для итоговой проверки также запустите экспортированную игру на целевой платформе.

При переименовании или переносе запечённых мешей пути привязки могут перестать совпадать. Перезапеките и проверьте предупреждения о ненайденных получателях.

Настроить качество

ПараметрЧто проверять
Quality, число отраженийШум и достаточность света. Больше работы не исправляет UV2 и неверную геометрию.
UseDenoiserУменьшение шума и сохранение мелких теней. Проверяйте артефакты сглаживания, не только общий вид.
DirectionalДополнительная направленная информация для материалов с normal map. Меняет данные, стоимость и размер результата.
SupersamplingДополнительное разрешение во время расчёта с последующим уменьшением. Повышает требования к памяти и времени.
EnvironmentModeНужен ли вклад окружения при запекании. Для закрытого контрольного помещения можно начать с Disabled.
BiasОшибки самозатенения и утечки. Увеличение bias не заменяет толщину стены и правильные нормали.

Параметры, влияющие на расчёт, проверяйте после нового запекания. Изменение настройки без пересчёта не обновляет сохранённые текстуры.

Движущиеся объекты не получают новую UV2-карту от старого запекания. Для них отдельно настраивают lightmap-пробы и прямое освещение; это не позволяет им произвольно менять сохранённые тени и непрямой свет статического уровня. Отражения и отражённый свет в текстуре также не являются одним и тем же: проверьте небо, reflection-пробы и материалы.

Если результат неверный

  • No meshes with lightmapping support: проверьте Static, видимость, треугольные поверхности, нормали, UV2 и область обхода.
  • Нет пути сохранения: сохраните уровень и выберите .lmbake для данных. Сохранение нового Resource через ResourceSaver само по себе не обязано назначать ему ResourcePath.
  • Карта слишком мала: проверьте Lightmap Size Hint и TexelScale. Нулевой итоговый размер не исправляется большим пределом атласа.
  • Швы, светлые края, пятна: проверьте UV2, padding, плотность, нормали и компрессию; затем число лучей и denoiser.
  • Свет остался после выключения лампы: проверьте, не запечён ли её прямой или непрямой вклад. Требуется смена схемы освещения или новое запекание.
  • Изменение геометрии оставило старые тени: данные статические; пересчитайте их и сохраните обновлённый уровень.

Для этой статьи в отдельном проекте выполнены штатное GPU-запекание через плагин текущего редактора, проверка ненулевого света в атласе, сохранение, независимая загрузка .lmbake и отрисовка сохранённого уровня с выключенным прямым источником. При закрытии редактора сохранено предупреждение Scan thread aborted: прогон не отмечен как полностью чистый. Экспорт, динамические пробы, directional/shadowmask и качество всех материалов здесь не проверены.

Сравните подход с VoxelGI, SDFGI и обзором GI.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.