Статическое освещение в Unreal Engine 4
Разрешение лайтмап/Качество теней
Каждый проект уникален и имеет собственные цели, поэтому этот раздел даст вам основные концепции и базисы для познания того, что вы хотите получить от статического освещения.
Представленные настройки ни в коем случае не будут работать всегда и для всех проектов.
Простенькая сцена с 3 статическими мешами.
В данной сцене 3 объекта: 2 стены и пол. Каждый объект имеет собственную тень, которая запечена в текстуру именуемую — лайтмапой (lightmap). Данная лайтмапа хранит в себе информацию о тенях/освещении, которые проецируются на эту текстуру. Она, как правило, создаётся художником в процессе создания ассета.
Что нужно знать про лайтмапы и как их эффективно создавать?
Другими словами, если я хочу увеличить разрешение тени отбрасываемой стеной с дверным проёмом, я буду настраивать не стену с дверным проёмом, а увеличу разрешение лайтмапы пола. Там куда проецируется тень и запекается в лайтмапу.
Теперь нам надо увеличить разрешение лайтмапы для некоторых мешей. Каждый меш имеет свою собственную лайтмапу, разрешение которой можно установить в details panel, когда наш меш выбран в mesh editor.
В данном примере рассматриваем разрешение лайпмапы пола, и только его.
Когда изменяете разрешение лайтмапы, используйте значения только кратные двум (32(по умолчанию),64,128,и т.д.) за исключением BSP представленных ниже.
Качество разрешения лайтмапы зависит от двух факторов : размер меша и размер UV шела на развёртке лайтмапы.

Разрешение = 64

Разрешение = 128

Разрешение = 256

Разрешение = 512
Разница лайтмапы BSP от статического меша в том, что значение лайтмапы BSP уменьшается в пользу лучшего качества.

Разрешение = 32

Разрешение= 24

Разрешение = 16

Разрешение= 8
Как и везде, при настройке лайтмапы есть свои ухищрения. Использование маленького меша позволит вам добиться лучшего качества для пола с низким разрешением лайтмапы, в то время как для большего меша вам понадобится увеличить разрешение лайтмапы, что в свою очередь затребует больше ресурсов.
Разрешение лайтмап для ландшафта

Разрешение = 1.0

Разрешение= 2.0
Лайтмапы ландшафта отличаются также как и в BSP и в Static Meshes. Landscape Lightmap Resolution использует множитель, который увеличивает разрешение, а соответственно и качество запекаемых теней. Большие ландшафты могут потребовать более высокое значение данного множителя, в отличии от небольших.
На панели Details вы найдёте параметр Static Lighting Resolution, который по умолчанию равен 1. Увеличивайте данный параметр пока не получите нужный результат.
Швы на тенях / разница затенения при непрямом освещении
Часто, когда вы запекаете освещение для своего проекта и в областях с непрямым освещением, вы можете заметить, что иногда возникает разница оттенков между модульными плоскими поверхностями, обычно стенами, полами и потолками. Это неприятный побочный эффект того, как статическое непрямое освещение обрабатывается в данный момент и на данный момент такое никак не исправить, увы.
Если вы с таким не сталкивались, то вот пример:
Свет попадает на поверхность, затем распространяется на окружающие поверхности. Данный тип освещения называется непрямым (Indirect). Некоторые поверхности будут освещены напрямую, а также принимать вторичные световые отскоки, на пример стена, которая частично освещена полностью, но при этом имеет артефакт в затенённом углу от непрямого освещения.
Если поверхности, принимающие непрямое освещение, являются плоскими поверхностями, они генерируют такое несоответствие в затенении между ними следующим образом:
Происходит тут следующая ситуация — каждый из этих объектов отправляется в процессор для обработки в том порядке, в котором они получены, и на разных потоках процессора. Это означает, что хоть и каждый объект имеет освещение созданное lightmass’ом, другие объекты не знают об этом, и поэтому освещение строиться до того, как будет указано, что эти объекты стыкуются друг с другом. В итоге это приводит к таким вот артефактам.
Рекомендации по исправлению данной проблемы.
Для исправления ситуации идём в World Settings, в раздел Lightmass и крутим-вертим следующие параметры:
Indirect Lighting Quality устанавливаем = 2 или выше.
Indirect Lighting Smoothness указываем в диапазоне 0.65-0.75. Чем ниже значение, тем больше артефактов вы можете получить в итоге.
Static Lighting Level Scale можем указать поменьше, для лучшего смешивания. НО! это значение меняет масштаб просчёта освещения для всего уровня. Это приведёт к увеличению времени запекания. Данная манипуляция целесообразна при архитектурной визуализации нежели для игрового уровня.
Когда вы настраиваете качество косвенного освещения, всегда лучше понизить гладкость освещения, чтобы добиться лучших результатов. Это помогает лучше сочетаться между этими поверхностями, но это не обязательно полностью устраняет проблему и может иметь и другие побочные эффекты. Вы должны действительно проверить его в проекте или на тестовой карте, чтобы полностью понять, что вы настраиваете здесь и почему.
Когда вы настраиваете непрямое освещение, всегда лучше понизить сглаживание освещения для получения лучшего результата. Это помогает лучше сочетаться поверхностям, но это не обязательно полностью устраняет проблему и может иметь и другие побочные эффекты. Прежде чем применять такие параметры к всему уровню, лучше протестируйте их на тестовой сцене, дабы лучше понимать, что и зачем вы делаете.
Также не забывайте:
Не стоит переусердствовать с модульность. Модули это конечно хорошо, то они также и повышают количество dc, плюс имеют такие вот нюансы. К примеру, вместо того чтобы городить прямую стену из нескольких модулей целесообразнее будет иметь отдельный меш стены для таких целей.
Если есть возможность, вы можете скрывать подобные артефакты посредством декора, к примеру, колонны или прочие декоративные элементы.
Что такое Overlapping UV
Когда используете статическое или стационарное освещение, необходимо использовать 2 развёртки, иначе вы получите такое сообщение:
Лог после запекания освещения
В данном случае вам надо установить 2й канал развёртки для вашей лайтмапы. В противном случае редактор будет использовать имеющуюся развёртку со всеми имеющимися ошибками.
Вы можете сделать это прямо в редакторе (картинка ниже) либо же с вашем 3d редакторе.
Оригинальные UV и результаты

Перекрывающиеся UVs

Результат в редакторе
Правильные UV и результаты

Правильные UVs

Результат в редакторе
Заметьте, что финальные UV не имеют перекрытий что даёт теням/свету правильно запечся в текстуру.
Как сгенерировать UV в редакторе
Откройте меш, лайтмапу которого ваш нужно отредактировать.
Найдите панельку похожую на эту:

Static Mesh Editor Details Panel
Данная панелька позволяет вам создать свой канал лайтмапы, но назначение разрешение лайтмапы и индекса координат происходит не здесь, а чуть ниже.
Настройки вкладки “Build Settings” на которых мы сфокусируемся:
✔ Generate Lightmap UVs = удостоверьтесь в том, что данная галочка стоит.
✔ Min Lightmap Resolution =Минимальный размер разрешения лайтмапы которое вы хотите.
✔ Source Lightmap Index = Источник с которого генерируем лайтмапу
✔ Destination Lightmap Index = Индекс развёртки которую мы хотим использовать в качестве лайтмапы.
Для большинства ассетов это достаточно хорошие настройки. Ключевой момент тут — выбор нужного индекса источника лайтмапы. Это UV который обычной используют для текстур. UV шелы в этой UV будут перепакованы, и не будут образовывать перекрытия поверхностей. Разрешение лайтмапы не влияет на качество развёртки, этот параметр влияет лишь на качество теней которые будут запекаться на эту развёртку.
Если вы хотите проверить, какая у вас получилась развёртка после генерации, выберите UV channel 1 (показано на картинке):
Теперь, после генерации лайтмап UV, осталось выбрать нужный id в настройках самого меша. В редакторе меша перейдите в details panel, во вкладку “Static Mesh Settings”.
В этой вкладке нужно установить разрешение лайтмапы которое нам нужно.
32 — дефолтное разрешение.для маленьких объектов оно вполне подходит, но чем больше объект, тем больше разрешение нужно указывать.
Удостоверьтесь, что значение кратно 2 (пример: 32, 64, 128, 256, и тд.)
В следующем параметре, удостоверьтесь, что индекс координат лайтмапы установлен на правильный канал.
Обычно для лайтмапы стоит значение 1.

Static Mesh Editor Details, Настройки лайтмапы
После использования данных настроек у вас есть правильное разрешение лайтмапы.
А вообще, лайтмапы лучше создавать прямо в 3d редакторе который вы используете, там вы сможете сделать идеальную развёртку для лайтмапы. Какой бы автогенерация не была, но ошибки будут всегда.
Если вы используете в своём пайплайне 3ds max или maya, посмотрите видео ниже, на них человек доступным языком объясняет как сделать отличную развёртку для лайтмапы.
Сказать автору видео «Спасибо» можете в виде like’ов и подписки на канал (там ещё много полезного видео на РУССКОМ языке (всё как вы любите)).
Как контролировать глобальное освещение при использовании статического освещения
Когда вы используете статическое освещение, вам необходимо сбилдить освещение чтобы увидеть результаты. Лайтмасс (Lightmass) используют для генерации и компиляции текстур, которые будут хранить информацию об освещении и тенях запечённую в лайтмапы.
По умолчанию, значение лайтмасс = 3 световых отскока, дабы получить GI (глобальное освещение) используя статическое освещение. Если необходимо изменить данное значение, то его можно найти во вкладке World Settings.
Здесь вы можете видеть множество настроек того, как освещение будет реагировать в вашей сцене. Для GI мы сфокусируемся лишь на “Num of Indirect Lighting Bounces”. Ползунок ограничен в пределах от 1 до 4. Но вы можете установить любое значение просто вписав его туда.

Lightmass World Settings по умолчанию
Global Illumination пример сцены.Одинарный источник света в 250 единиц (15w примерно)

Настройки сцены

0 отскоков

1 отскок

2 отскока

3 отскока

100 отскоков
Первый отскок занимает наибольшее время просчёта. Последующие отскоки будут меньше влиять на время просчёта, но и их влияние будет меньше заметно.
Почему тени пятнистые или как избавится от загрязнения лайтмап?
Пятна, загрязнения, ну или как вы там это называете, не суть; данная ошибка часто возникает при использовании статического освещения в ue4.
Не стоит паниковать, ведь исправить это можно через настройки лайтмасс.
Первое что приходит на ум — это то, что это связанно с непрямым освещением от отскоков GI при построении лайтмасс.
Что бы показать как это наиболее эффективно исправить, будем использовать 2 комнаты в качестве примера.
Дата размещения: 5-11-2019, 09:52
- Раздел: Советы на все случаи жизни