Мастер-класс по организации освещения в игре на Unreal Engine: Часть 1

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Обширное руководство из двух частей о создании привлекательного освещения в играх на Unreal Engine, представленное старшим художником по освещению Юрием Воробьевым.

Введение

Привет, меня зовут Юрий Воробьев (Yuri Vorobiev), и я работаю в Sperasoft, a Keywords Studio, в качестве старшего художника по освещению (Senior Lighting Artist). За время работы в Sperasoft я успел поучаствовать в нескольких известных проектах, таких как The Walking Dead от Overkill, Saint's Row The Third Remastered и Halo Infinite. У меня есть профессиональный опыт работы с освещением для кинематографических, многопользовательских и однопользовательских уровней.

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

Первые шаги

В качестве кейса для переработки освещения я выбрал Underground Facility от Владимира Степанюка (Volodymyr Stepaniuk). Прежде всего, нам нужно выбрать референсы, сформировать мудборд и определиться с условиями освещения. Я хочу сделать освещение бирюзового цвета, поэтому выбрал несколько палитр, которые лучше всего сочетаются с моим замыслом.

Также я подобрал несколько концептов пещер, туннелей и лабораторных помещений.

Я всегда стараюсь выбирать концепты с интересным и проработанным освещением, а не с плоским, темным и скучным светом.

На этом этапе, также важно принять во внимание условия освещения. Будет ли это мультиплеерный (многопользовательский) или синглплеерный (однопользовательский) уровень. Мы не можем позволить себе быть слишком драматичными на мультиплеерном уровне. Все должно быть видимым и читаемым. Следует с самого начала принимать во внимание технические ограничения, которые накладывает мультиплеер. Синглплеерные уровни менее требовательны, поэтому мы можем рассматривать более мрачные и затемненные варианты, поскольку здесь мы располагаем большими ресурсами и пространством для творчестве, нежели в мультиплеере. Нам нужно определить, какой тип освещения будет использоваться: подвижный (Movable), статический (Static) или стационарный (Stationary). Больше информации о типах освещения вы найдете в третьем пункте. В этом руководстве мы рассмотрим синглплеерную сцену со стационарным освещением.

Технические приготовления

Обычно я начинаю с создания отдельного уровня только под освещение. Таким образом, я не сломаю и не перемещу какие-либо элементы окружающей среды по случайности.

Затем я размещаю дефолтный Directional Light (если необходимо), Skylight, ExponentialHeightFog, Post Process Volume (с включенным Infinite Extend) и Lightmass Importance Volume (если я планирую запечь что-нибудь).

Предварительная настройка отражений

Следующим шагом является предварительная настройка локальных отражений (кубических карт - cubemaps). Я рекомендую отключить SSR в Post Process Volume, потому что отражения кубической карты сложнее увидеть, когда включены Screen Space Reflections.

Для удобства настройки я обычно помещаю какую-нибудь яркую дефолтную кубическую карту в слот для кубической карты SkyLight и устанавливаю ее интенсивность в районе 20.

Это позволит нам четко видеть локальную кубическую карту (в "Reflection view"), когда мы размещаем ее на уровне.

Для рукотворных структур, таких как коридоры и комнаты, я предпочитаю использовать прямоугольные отражения (box reflections). Так как их куда проще контролировать, чем сферические отражения (sphere reflections) — их использование может предотвратить просачивание света через стены в другие комнаты. В рамках предварительной настройки достаточно разместить по одной-две кубические карты в каждом пространстве.

"Box Transition Distance" (или радиус влияния (“Influence radius”) для сферических отражений) и "Capture Offset" — единственные настройки локального отражения, которых я касаюсь на данном этапе. Убедитесь, что расстояние переходных участков (transition distance): 1) не слишком короткое, чтобы увидеть разницу между двумя кубическими картами, 2) и не слишком длинное, чтобы предотвратить просачивание света между двумя соединяющимися комнатами.

Точку захвата (capture point) рекомендую устанавливать ближе к точке зрению игрока, которую определяет жанр игры. Мы видим все окружение в игре с этой точки зрения, и было бы хорошо сразу видеть корректные отражения. Например, в шутере от первого лица это будет примерно 1,8 метра от пола.

Также постарайтесь переместить точку захвата как можно ближе к центру комнаты. В таком случае у вас будет больше ценных данных внутри отражения.

Постарайтесь распространить влияние кубических карт на стены по максимуму, чтобы они имели правильные отражения.

Также убедитесь, что отражения не просачиваются сквозь стены.

Отодвиньте точку захвата подальше от объектов. В противном случае в текстуре будет слишком много информации об этом объекте и слишком мало данных о других частях комнаты.

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

Предварительная настройка плотности карты освещения (если вы планируете запекать источники света)

Мой личный подход к определению плотности карты освещения (light map density) заключается в том, что в представлении "Lightmap Density" я стараюсь сохранить потолок синим. В любом случае, у нас вряд ли будет там много света, т.е. в высоком разрешении нет необходимости. На стены я ставлю карты освещения чуть большего разрешения, а самое высокое разрешение (зеленый цвет) будет на полу.

После я просматриваю все ассеты и устанавливаю их “Light Map Resolution” в степени двойки или сумму степеней двойки, чтобы они лучше вписывались в атлас текстур теней.

Иногда на уровне может быть несколько масштабированных экземпляров одного и того же ассета. Из-за этого одно разрешение карты освещения может быть слишком большим для одного экземпляра или слишком маленьким для другого. В таких случаях мне приходится вручную подбирать разрешение карты освещения для каждого экземпляра этого ассета на уровне.

Например, потолок и пол — это один и тот же ассет на нашем уровне. Но я не хочу, чтобы у потолка было такое же высокое разрешение, как у пола.

Поэтому я устанавливаю "Overridden Light Map Resolution" для потолка, чтобы уменьшить его разрешение.

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

Настройка SkyLight

Я использую SkyLight, чтобы сделать равномерное освещение в затененных областях пола и стен. Я выбрал карту HDRI, так как я нахожу ее самой привлекательной в условиях этой среды. Кроме того, я немного поиграл с яркостью и насыщенностью, чтобы они лучше соответствовали окружающей среде.

Затем я подставил это в слоту SkyLight Cubemap и установил "Intensity Scale" на то, что лучше подходит для этой сцены.

Потолок показался мне слишком темным, поэтому я осветлил его. Я установил цвет "Lower Hemisphere Color" на чуть более светлый черный цвет.

Настройка тумана

Я хочу, чтобы экспоненциальный туман (Exponential Fog) был виден только на дальних стенах комнат, поэтому я установил "Start Distance" на 1500. Я не хочу, чтобы туман бесконечно расширялся за пределы геометрии уровня, поэтому я установил “Fog Cutoff Distance” на 5000. Осталось только выбрать цвет тумана и его плотность. Я выбрал светло-голубой и не слишком плотный.

Настройка постобработки

В рамках постобработки (Post Process) я закрепил экспозицию и установил качество SSR на 75, чтобы во время работы не было никаких странных изменений экспозиции и отражения выглядели лучше.

Первый (черновой) этап освещения

На этом этапе я определяю тему для каждой комнаты, например, чем они отличаются друг от друга, какие цвета и яркость следует использовать, как это все будет работать на ориентацию в пространстве для игрока. Очень важно направлять игрока светом, делая с его помощью дальнейшие шаги интуитивно понятными. Например, если вы знаете, что эта область важна для игрового процесса, вам следует позаботиться, чтобы ее было хорошо видно с очень большого расстояния, тогда она сразу же будет привлекать внимание игрока.

Укажите правильный путь контрастом света и тени.

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

Чтобы упростить процесс прототипирования, я использовал в основном Point Lights с включенным "Cast Shadows". Имейте в виду, что эти тени предназначены только для прототипирования и не должны включаться для подвижных (Movable) или стационарных (Stationary) точечных источников света (Point Lights) на более поздних этапах. Отключите "Use Inverse Squared Falloff" и установите "Light Falloff Exponent" на 1. У источников света не будет градиента, и они будут заполнять поверхность равномерно. Вы можете легко заполнить пространство светом, управляя радиусом затухания (Attenuation Radius) и интенсивностью (Intensity). Я также рекомендую добавить свои цвета в "Color Picker" для быстрого доступа к ним.

Я начал с комнаты в конце длинного коридора. Зона 1 здесь ярко-бирюзового цвета. Это сделает ее интуитивно похожей на какую-нибудь лабораторную зону и хорошо заметной из коридора. Моя цель заключается в том, чтобы привлечь внимание игрока к этой области, а такая палитра отлично справляется с этой задачей.

Для Зоны 2 использовал очень тонкий синий свет. Она освещена фальшивым отраженным светом из Зоны 1 и дает глазам немного отдохнуть.

Для зоны 3 я выбрал зеленый свет. Он гармоничен с другим цветам и не создает слишком много визуального шума.

Для коридоров, которые в основном каменные, я решил использовать пурпурный цвет. Таким образом, они будут темными и как-бы естественно освещенными, а также это придаст приятную разницу в ощущении этих пространств.

Лестница между двумя коридорами оформлена в синем цвете. Без добавления других цветов он даст зрительный отдых и привлечет больше внимания к лестнице и второму этажу.

Кроме того, это придаст хорошую читаемость стенам между комнатами.

Эта большая комната была самой большой проблемой. Поскольку нужно было заполнить много открытого пространства, мне пришлось действовать стратегически, акцентируя внимание игроков. Сохранение баланса между цветами является очень важным, иначе мы можем получить освещение в духе "рождественской елки".

Зона 3 — центральная точка концентрации внимания благодаря синему свету от мониторов. Ее сразу видно, когда вы входите в комнату через вход  "a".

Зона 1 обрамляет центральную часть зеленым светом. А еще это создает дополнительное зонирование, ведь помосты на втором этаже будут иметь свой цвет.

Зона 2 заполняет остальную часть пространства теплым светом. Это позволяет нам переходить из теплых областей в холодные. Также с точки зрения игрока: выход "b" виден из входа "a".


Приглашаем всех желающих на открытое занятие «Создаем эффект атаки шипами в Unreal Engine 5». На уроке покажем, как можно создать эффект атаки шипами, используя Maya и Photoshop, а также систему частиц в UE Niagara. Также поговорим о перспективах профессии разработчика на Unreal Engine. Регистрируйтесь по ссылке.

Источник: https://habr.com/ru/company/otus/blog/696764/


Интересные статьи

Интересные статьи

Все привет!) Начался второй месяц обучения на фронтенд-разработчика и переворачивания с ног на голову моего привычного уклада жизни. Я, конечно, предполагал, что будет не просто и предварительно полож...
Продолжаем цикл статей, посвящённый основам Django Rest Framework. В предыдущей статье мы подробно рассмотрели, как сериалайзер валидирует входные данные. В этой статье мы закрепим теорию на простом...
Эта часть статьи будет об осмыслении составляющих Redux. Так ли они необходимы, что является их аналогом. Также будет предложена более удобная альтернатива хука useReduc...
Центр управления сетью Центр управления сетью (ЦУС) обеспечивает управление всей сетью спутниковой связи, координацию работы шлюзовых и абонентских станций, задание единого времени в с...
Предыстория Когда-то у меня возникла необходимость проверять наличие неотправленных сообщений в «1С-Битрикс: Управление сайтом» (далее Битрикс) и получать уведомления об этом. Пробле...