Как настроить освещение для игровой локации в Unreal Engine: Часть 1
Старший художник по свету Юрий Воробьёв, поделился подробным гайдом по настройке освещения для игровой локации.
Введение
Привет, меня зовут Юрий Воробьёв, и я работаю в Sperasoft, a Keywords studio, в качестве старшего художника по свету. За время работы в Sperasoft я успел принять участие в нескольких известных проектах, таких как The Walking Dead от Overkill, Saint's Row The Third Remastered и Halo Infinite. Помимо этого, у меня есть опыт работы с освещением для синглплеерных и мультиплеерных карт, а также сцен используемых в синематиках.
В этой статье я хотел бы продемонстрировать свой подход к освещению игровых уровней и рассмотреть наиболее распространенные ошибки в освещении. Будьте осторожны, и имейте в виду, что это моё личное мнение, и вам нужно подумать, соответствует ли данный подход художественному направлению вашего проекта, техническим ограничениям и т.д.
Первые шаги
В качестве примера для переаботки освещения (relight) я выбрал «Underground Facility» Владимира Степанюка. Прежде всего, вам нужно собрать референсы, создать мудборд (доска настроения) и определиться с условиями освещения. Я хотел сделать освещение бирюзового цвета, поэтому выбрал сразу несколько палитр, которые лучше всего соответствуют моей идее.
Кроме того я подобрал несколько концептов для пещер, туннелей и лабораторных помещений.
Я всегда стараюсь выбирать концепты с «интересным» освещением, а не с плоским, тёмным и скучным светом.
На данном этапе важно учитывать условия освещения. Будет ли это многопользовательский (MP) или однопользовательский (SP) уровень. Вы не можете позволить себе быть излишне драматичным на мультиплеерной карте. Всё должно быть видно и хорошо считываться игроком. Технические ограничения мультиплеера следует принимать во внимание с самого начала.
SP карты в этом плане менее ограничены, и по сравнению с MP, имеют больший запас по производительности (а следовательно и качеству освещения), поэтому вы можете подумать о более мрачном и тёмном настроении. Определитесь с тем, какой тип освещения будет использоваться в сцене: Подвижный (Movable), Статичный(Static) или Стационарный (Stationary). Больше информации о типах освещения вы можете найти во второй части руководства или в документации по UE. Сцена которую я выбрал — это SP карта с освещением стационарного типа.
Технические настройки
Обычно я начинаю с создания отдельного уровня, только для настройки освещения. Это позволяет мне быть уверенным в том, что я случайно не сломаю или передвину какой-нибудь элемент окружения.
Затем я добавляю стандартный Directional Light (если нужно), Skylight, ExponentialHeight Fog, Post Process Volume (с активным Infinite Extend), и Lightmass Importance Volume (если я планирую что-то запечь).
Черновая настройка отражений
Следующий шаг — предварительная настройка локальных отражений (local reflections) на ооснове кубических карт (cubemaps). Я рекомендую отключить SSR в Post Process Volume, поскольку, когда работаю отражения в экранном пространстве (Screen Space Reflections), увидеть отражения на основе кубических карт намного сложней.
Для удобства настройки, обычно я помещаю какую-нибудь яркую стандартную кубическую карту в слот для SkyLight Cubemap и выставляю ей интенсивность около 20.
В таком случае, вы можете отчётливо видеть локальные кубические карты (с помощью «Reflection view») когда размещаете их на уровне.
Для искусственных/рукотворных структур, таких как коридоры и комнаты, я предпочитаю использовать прямоугольные отражения (box reflections). Поскольку они более управляемы, чем сферические отражения (sphere reflections) — они могут предотвратить нежелательное проникновение/просачивание в другие комнаты и пробивание стен . Для чернового сетапа достаточно разместить по 1-2 кубмапы в каждом помещении.
"Box Transition Distance"(или Influence radius для Sphere Reflections) и "Capture Offset" — это единственные параметры локальных отражений которые я затрагиваю на данном этапе.
Убедитесь, что дистанция перехода (transition distance):
- не слишком короткая, чтобы увидеть разницу между двумя кубическими картами.
- не слишком длинная, чтобы предотвратить утечку между двумя соединяющимися комнатами.
Для разных игровых жанров (имеется в виду положение камеры) я рекомендую сместить точку захвата таким образом чтобы она находилась ближе к уровню зрения игрока. В игре, мы видим всё именно с этой точки зрения, и будет отлично если мы будем видеть правильные отражения. Например, в шутере с видом от первого лица, эта точка будет находится на высоте 1,8 метра (примерно) от уровня пола/земли.
Также, постарайтесь переместить точку захвата как можно ближе к центру комнаты. В этом случае, внутри отражения у вас будет больше ценных данных.
Постарайтесь по максимуму (насколько это возможно) распространить влияние кубических карт на стены, так чтобы они имели правильные отражения.
Также убедитесь, что отражения не просачиваются сквозь стены.
Постарайтесь отодвинуть точку захвата достаточно далеко от объектов. В противном случае, в текстуре будет слишком много информации об одном конкретном объекте и слишком мало данных о других частях комнаты.
В основном, этот пункт актуален для сильно отражающих или металлических поверхностей. Не заканчивайте кубические карты посередине поверхности, в противном случае может получиться очень заметный шов. Вместо этого вам стоит расширить их до логичного, геометрического перехода. На картинке ниже приведён весьма преувеличенный пример.
Настройка плотности черновой карты освещения.
Если вы планируете запекать освещение в дальнейшем.
Чтобы отрегулировать плотность карт освещения (lightmaps) я использую режим "Lightmap Density". Здесь я стараюсь сохранить потолок на уровне соответствующем синему цвету. В любом случае,тут вряд ли будет очень много света, так что потребность в высоком разрешении отсутствует. Стенам я даю немного больше разрешения, в то время как самое высокое разрешение (зеленый цвет) достается полу.
Я просматриваю все активы и настраиваю их параметр "Light Map Resolution", выставляя значение равное степени двойки или сумме степеней двойки, так чтобы они лучше «вписались» в текстурный атлас в котором хранится информация о тенях (shadow texture atlas).
Иногда, в сцене может быть несколько экземпляров одного и того же ассета, с разным масштабом. При этом, одно разрешение карты освещения может быть слишком большим, а другое — слишком маленьким. В таких случаях я устанавливаю разрешение карты освещения вручную, для каждого ассета на уровне.
Например, в этом уровне, потолок и пол — это один и тот же ассет. Но я не хочу, чтобы у потолка было такое же высокое разрешение как и у пола.
Чтобы уменьшить разрешение потолка, я использовал опцию "Overridden Light Map Resolution".
В большинстве случаев, вам не следует выходить за пределы зелёного цвета и, уж тем более, красного. Это только увеличит время запекания и размер кеша текстур без существенной разницы в качестве теней. Позже вы сможете вручную увеличить разрешение некоторых ассетов, если увидите, что они в этом нуждаются.
Настройка SkyLight
Я использую SkyLight, чтобы обеспечить равномерное освещение в затенённых областях пола и стен. Я выбрал эту карту HDRI, поскольку нахожу её подходящей для данного окружения. Кроме того, я подправил настройки яркости и насыщенности, для лучшего соответствия окружению.
Затем я подключил её к слоту SkyLight Cubemap и выставил параметру "Intensity Scale" наиболее подходящее значение (0,16).
На мой вкус, потолок на данном этапе выглядел слишком тёмным, поэтому я дополнительно осветил его. Для "Lower Hemisphere Color" я установил цвет чуть светлее чёрного.
Настройка тумана
Я хочу, чтобы экспоненциальный туман (Exponential Fog) был виден только на дальних стенах комнат, поэтому я установил "Start Distance" на 1500. Я не хотел, чтобы туман бесконечно расширялся за пределы геометрии уровня, поэтому я установил для параметра “Fog Cutoff Distance” значение 5000. Теперь осталось только выбрать цвет тумана и его плотность. Я выбрал светло-голубой оттенок и сделал его не слишком густым.
Настройка Post Process Volume
Чтобы в процессе работы избежать странных/неожиданных изменений экспозиции и сделать отражения лучше, в Post Process Volume я заблокировал экспозицию (Exposure) и установил качество SSR на 75.
Первый (черновой) пасс освещения
На данном этапе я задаю тему для каждой отдельной комнаты. Например, я определяю чем они отличаются друг от друга, какие цвета и яркость следует использовать и как будет работать направление игрока. Важно направлять игрока светом и с его помощью, делать дальнейшие шаги интуитивно понятными. Например, если вы знаете, что какая-либо область важна для игрового процесса, вы должны иметь возможность чётко видеть её с очень большого расстояния, и она должна сразу же привлекать ваше внимание.
Укажите правильный путь с помощью контраста света и тени.
Важно не освещать тупики или маловажные объекты. В противном случае, игрок будет расстроен тем, что этот «неважный» объект или путь был сильно выделен.
Чтобы упростить процесс прототипирования, в основном, я использовал Point Lights с включенной опцией «Cast Shadows». Имейте в виду, что эти тени предназначены только для прототипирования и не должны включаться для подвижных (Movable) или стационарных точечных источников света (Stationary Point Lights) на более поздних этапах. Отключите "Use Inverse Squared Falloff" и установите значение равное 1 для параметра "Light Falloff Exponent". У источников света не будет градиента, и они будут равномерно заполнять поверхность. Вы можете легко заполнить пространство светом, управляя Attenuation Radius and Intensity. Кроме того, я рекомендую добавить свои цвета в "Color Picker" для быстрого доступа к ним.
Я начал с этой комнаты, в конце длинного коридора. Зона №1 освещена ярко-бирюзовыи светом. Интуитивно, это похоже на какую-то лабораторную зону и её видно из коридора. Цель состоит в том, чтобы привлечь внимание игрока к этой области, и он отлично справляется с этой задачей.
Для Зоны №2 я использовал очень тонкий, еле уловимый синий свет. Она освещается фальшивым отраженным светом идущим из Зоны 1 и даёт глазам немного отдохнуть.
Для Зоны №3 я выбрал зелёный свет Он создаёт аналогичную цветовую гармонию с остальными цветами и не даёт слишком много визуального шума.
Для коридоров, которые в основном состоят из камней, я решил использовать пурпурный цвет. Таким образом, они будут выглядеть достаточно тёмным и вместе с тем освещенными, а также дадут приятную разницу в ощущении между пространствами.
Лестница между двумя коридорами оформлена в синем цвете. Без использования других цветов, это создаст область визуального отдыха/покоя и привлечёт больше внимания к самой лестнице и второму этажу.
Кроме того, это придаст хорошую читаемость стенам между комнатами.
Эта большая комната была самой сложной задачей. Поскольку здесь нужно заполнить много открытого пространства, мне нужно было действовать стратегически и удержать точку фокуса/интереса игрока. Сохранение баланса между цветами является ключом, в противном случае вы можете получить освещение в виде «рождественской ёлки».
Зона №3 — это точка интереса, с синим светом исходящем от мониторов. Её видно, когда вы входите в комнату через вход «а».
Зона №1 обрамляет центральную часть зеленым светом. А ещё это дает дополнительное зонирование, ведь второй этаж будет иметь свой цвет.
Зона №2 заполняет остальную часть пространства тёплым светом. Это позволяет нам ходить из теплых областей в холодные. Также с точки зрения игрока: выход "b" виден из точки входа "a".
Автор оригинала: Юрий Воробьёв
Текст перевёл и подготовил Константин Пономарёв