Стационарный Свет в Unreal Engine 4

0
2
Стационарный Свет в Unreal Engine 4

Stationary lights (Стационарный Свет) – это свет, который предназначен для пребывания в одном положении, но может меняться другими способами, такими как его яркость и цвет. Это основная черта, которой он отличается от Static Lights (статический свет), которая никак не может измениться во время игры. Однако следует отметить, что изменение времени работы от яркости влияет только на прямое освещение. Косвенное (отброшенное) освещение, поскольку оно предварительно вычисляется с помощью Lightmass, не изменится.

Из трех маневренностей света, Стационарный свет, как правило, имеет высочайшее качество, среднюю изменчивость и средние эксплуатационные расходы.

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

Прямое освещение

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

Прямое освещение от стационарного света.

Прямое затенение

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

Статическое затенение

На непрозрачном

Lightmass генерирует карты теней дальнего расстояния для неподвижного света на статических объектах при восстановлении освещения. Теневые карты дальнего расстояния обеспечивают очень точные теневые переходы даже при низких разрешениях и с очень небольшим количеством времени исполнения. Как и световые карты, карты теней на дальнем  расстоянии требуют уникально развернутых UVs на всех Статик Мешах с использованием статического освещения.тени Distance Field UE4

Точные тени StaticMeshActor, брошенные на непрозрачные поверхности с использованием теней дальнего расстояния.

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

Только 4 или меньше перекрывающихся неподвижных огней могут иметь статическое затенение, поскольку свет должен быть назначен различным каналам текстуры теневой карты. Это проблема окраски графика, поэтому из-за топологии допускается не менее 4 перекрытий. Тень не может повлиять на тест перекрытия, поэтому солнечный свет обычно требует канала со всего уровня, в котором он находится, даже в подземных зонах. Как только предел канала достигнут, дополнительные неподвижные огни будут использовать все динамические тени сцены с высокой стоимостью. Режим просмотра StationaryLightOverlap можно использовать для визуализации перекрытия, которое динамически обновляется при изменении света. Световые значки меняются на красный X, когда они не могут выделить канал.ошибка перекрывания света UE4

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

На прозрачном

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

 

Прозрачность без наложения тени UE4Прозрачность без наложения тени

 

Стационарный Свет в Unreal Engine 4Прозрачность, получающая статичное затенение от Направленного Света

Разрешение статической карты глубины тени контролируется с помощью StaticShadowDepthMapTransitionSampleDistanceX и StaticShadowDepthMapTransitionSampleDistanceY в BaseLightmass.ini с настройкой по умолчанию 100, означающей один тексель на каждый метр.

Динамическое Затенение

Динамические объекты (такие как StaticMeshComponents и SkeletalMeshComponents с подвижностью, установленными на Movable) должны интегрироваться в статическое затенение мира из теневых карт дальнего поля. Это достигается с помощью тени на каждый Объект. Каждый подвижный объект создает две динамические тени из неподвижного света: тень для обработки статического мира, попадающая на объект, и тень для обработки объекта, попадающего в мир. При такой настройке единственная стоимость затенения для стационарных освещений исходит от динамических объектов, на которые это влияет. Это означает, что стоимость может варьироваться от очень малого до большого количества, в зависимости от того, сколько динамических объектов есть. При наличии достаточно динамических объектов более эффективно использовать Movable light (подвижный свет) вместо этого.

В приведенной ниже сцене сферы все подвижны, и все они получают тени из статического мира и отбрасывают свои собственные тени, которые сливаются с тенями дальнего поля. Также показаны усеченные конусы каждого объекта (Per Object) для каждого подвижного компонента.Динамическое Затенение UE4

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

Динамическое затенение направленного света

Directional Stationary Lights (статичный направленный свет) является особенным, потому что он поддерживает тени всей сцены через каскадные карты теней (Cascaded Shadow Maps) одновременно со статическим затенением. Это очень полезно на уровнях с большим количеством создаваемой листвы; и когда вы хотите получить движущиеся тени вокруг игрока, но не хотите платить за то, чтобы иметь много каскадов, чтобы охватить большой диапазон обзора. Динамические тени исчезают в статических тенях на расстоянии, так что переход часто неразличим. Чтобы установить это, просто измените Dynamic Shadow Distance StationaryLight на DirectionalLightStationary, чтобы получить диапазон, который вам нужен для затухания.

Подвижные компоненты будут по-прежнему создавать тени PerObject (на каждый объект), даже при использовании каскадных теневых карт на направленном свете. Такое поведение полезно при небольших динамических расстояниях от тени, но при этом на большие расстояния требуется дополнительная стоимость. Чтобы отключить тени PerObject и сохранить производительность, для освещения отключите Use Inset Shadows For Movable Objects.

Косвенное Освещение

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

Тем не менее, существует настройка объема пост-обработки (post process volume), называемая IndirectLightingIntensity, которая позволяет масштабировать вклад световой карты для всех источников света, которые можно изменить во время выполнения из плана.

Use Area Shadows for Stationary Lights

В версии 4.9 или более поздней версии Unreal Engine, стационарные направленные указатели имеют новую функцию затенения, расположенную в параметрах Lightmass, называемых Use Area Shadows for Stationary Lights.параметр Use Area Shadows for Stationary Lights UE4

Чтобы включить параметр Use Area Shadows for Stationary Lights, сначала выберите Directional Light в вашей сцене и убедитесь, что для параметра Mobility установлено значение Stationary. Затем в разделе Lightmass Направленного света нажмите на поле рядом с опцией Use Area Shadows for Stationary Lights, чтобы включить его. Когда включена опция Use Area Shadows for Stationary Lights, стационарный свет будет использовать тени области для предварительно вычисляемых теневых карт. Тени области (Area shadows) – это тени, которые становятся более мягкими, чем они дальше от теневых роликов. На следующем рисунке вы видите разницу между двумя методами затенения.

Area Shadows включено UE4включено Area Shadows Area Shadows выключено UE4Area Shadows выключено

Обратите внимание, что Area Shadows будет работать только на Stationary Lights (стационарного света), и вам, возможно, придется увеличить некоторые параметры lightmap-разрешения, чтобы получить одинаковое качество и четкость изображения.