Динамическое освещение в Unreal Engine 4
Некорректное качество тенейВ данной части статьи мы рассмотрим решения, направленные на улучшение качества теней соответствующих геометрии. Это также поможет улучшить качество динамических теней.
Пример некорректного затенения геометрии.
Только! для Directional Light : Настройки Cascaded Shadow Maps:

Cascaded Shadow Maps настройки, в Directional Light Details
Dynamic Shadow Distance Movable: Расстояние от камеры, на котором тени будут исчезать.Значение 0 отключает их.
Dynamic Shadow Distance Stationary: Расстояние от камеры, на котором тени будут исчезать.По умолчанию стоит 0 для Directional Stationary Lights.
Num Dynamic Shadow Cascades: Количество каскадов на которое будет делится фрустум.Больше каскакодов- лучше качество, но и ресурсоёмкость возрастает.
Обязательно тыкните в ссылочку ниже, ибо наверняка не все знают что такое фрустум.
Больше информации про фрустум: http://en.wikipedia.org/wiki/Viewing_frustum
Num Dynamic Shadow Cascades :

Количество каскадов = 0

Количество каскадов = 1

Количество каскадов = 2

Количество каскадов = 3

Количество каскадов = 4
Cascade Distribution Exponent: Параметр регулирующий, на каком расстоянии от камеры распределение ближе (выше значение) или дальше (меньше значение) от камеры. Значение 1 означает, что переход будет пропорционален разрешению экрана.
Cascade Distribution Exponent:

Распределение = 1

Распределение = 2

Распределение = 3

Распределение = 4
Cascade Transition Exponent: Параметр регулирующий затухающий регион между каскадами. Низкое значение даст жёсткие грани, высокое — мягкие.
Cascade Transition Exponent:

Эффект перехода
Cascade Transition Exponent
Shadow Distance Fadeout Fraction: Параметр регулирующий на каком расстоянии тени будут затухать. Высокое значение ослабляет тени, в то время как низкое значение оставляет тени тёмными.
Shadow Distance Fadeout Fraction:

Затухание = 0

Затухание = 1
Far Shadow
Возможность установки Far Shadow для статических мешей или ландшафта дает дополнительные преимущества в том, дабы иметь возможность использовать каскадные тени на очень дальних расстояниях, а не в ограниченном диапазоне, ближайшему к камере.

Для включения данной опции достаточно лишь поставить галочку в пунктике Far Shadow во вкладке Lightning в настройках Directional Light.

Вы можете указать количество каскадов для Far Shadow, чтобы объекты у которых включено Far Shadow учитывали данный параметр. По умолчанию значение равно 300 метрам, но должно быть больше чем значение у параметра Cascaded Shadow Map Distance.
Не забывайте, что данную фичу рекомендуется использовать только на больших объектах, а не на всех подряд, т.к. при включении данной опции на всех подряд объектах это приведёт к снижению производительности.

На гифке выше: у объекта слева выключено Far shadow, а объект справа имеет параметры Dynamic Shadow Distance = 5000 и far shadow distance = 50000 при 4 каскадах.
Регулирование Cascades для лучшего качества:
Просачивание теней и их точность, можно настроить с регулированием параметров указанных выше. Данный раздел покажет как лучше настроить параметры, чтобы получить наилучший результат в момент приближения и отдаления камеры. Нахождение баланса для каждой отдельной игры — путь проб и ошибок без которого нельзя обойтись.
Базовая сцена с одними лишь настройками по умолчанию:

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

Проблемные зоны выделены красными рамками
Демонстрация проблемы, с близкого ракурса.

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

Базовая сцена финальный результат
Всё динамическое освещение (панель настройки освещения):
Также имеются ещё 2 настройки которые могут улучшить точность освещения.
Местонахождение этих настроек:

Те самые 2 параметра - Shadow Bias и Filter Sharpness
Shadow Bias — контролирует точность теней в сцене, но может выдать артефакты, если значение будет слишком низким.По умолчанию стоит значение 0.5 которое даёт хороший результат между точностью и эффективность.
Shadow Filter Sharpness — помогает скрыть некоторые артефакты при низких значениях и помогает создавать более резкие тени на краях.
Принимая во внимание то, что предыдущие настройки не были применены для текущих примеров, то ниже идут 2 примера с демонстрацией этих параметров (Shadow Bias и Shadow Filter Sharpen):
Shadow Bias

Shadow Bias = 0.5 (Дефолтное значение)

Shadow Bias = 0, установлено слишком низкое значение и поэтому появляются артефакты
Решение данной проблемы — нахождение баланса между установкой не слишком низкого значения и подбором нужного значения в Cascaded Shadows.
Shadow Filter Sharpen — делает края тени более резкими при высоких значениях.
Filter Sharpen = 0
Filter Sharpen = 1
Высокое значение параметра даёт резкий край тени, низкое- плавный край тени.
Почему мой динамический источник света светится сквозь объекты на отдалении?
Динамическое освещение , в частности точечные ИС, могут создавать проблемы такого рода. UE 4 достаточно хорошо справляется с подобной оптимизацией, поэтому вам не стоит сильно об этом волноваться. Но иногда возникает подобная проблема и метод её решения не всегда очевиден.
Результат который мы хотим. Камера вблизи.
Что получается в итоге. Камера в отдалении.
Что же делать?
Чтобы понять что происходит, нужно учитывать, что движок использует глубину сцены, дабы определить, что будет видимым и что будет невидимым при рендере. Тут же мы имеем точечный источник света который испускает свет по всему радиусу до тех пор пока не встретит преграду или пока не столкнётся с границей сферы.
На картинке ниже вы можете наблюдать, как при отдалении камеры появляется halo эффект вокруг внешних граней объекта из-за того, что свет не встречает преград на своём пути и исходит во всех направлениях.

Проход света сквозь объект.
Вы можете заметить, что если вы на дистанции выберете/выделите такой объект, то освещение вернётся в нормальное состояние. Это объясняется тем, что вы сфокусировались в данный момент на данном объекте.
Дабы предохранить объект от пропускания света, вам нужно выделить объект, и перейти на панель Details. Тут вам нужно найти во вкладке Rendering, параметр Bounds Scale.

Местонахождение Bounds Scale
По умолчанию значение установлено в 1.0 . Увеличивайте данный параметр на небольшие значение (1.1, 1.2 и тд.). Используя значение = 2 , оно удваивает дистанцию которая может стать излишней. Нет необходимости использовать значение больше необходимого, так как это может повлиять на производительность и качество теней.
Вы можете увидеть/визуализировать границы вашего меша перейдя во вьюпорте > Show > Advanced > Bounds
Увидите нечто такое:

Визуализированные границы объекта.
Дополнительная заметка:
Если у вас есть вышеописанная проблема, но вы не хотите увеличивать размеры границ вашего меша из-за проблем с производительностью — попробуйте использовать Spotlight. Данный ИС пускает свет лишь в одном направлении, в отличии от point light который пускает свет по всем направлениям когда меш пропускает свет. Пусть это и возымеет некоторый положительный/требуемый эффект, но лишь методом проб и ошибок вы сможете добиться идеального решения.
Как вариант, мы можете попробовать использовать Стационарное освещение, а не динамическое, это позволит вам запечь тени, что в итоге сохранит производительность, и не потребует каждый раз обновлять информацию о тенях.
Если вам требуется найти макросы для Rust вы можете найти их здесь doomxtf.com/macrolibrary/macro-rust.html.
Дата размещения: 4-11-2019, 10:46
- Раздел: Советы на все случаи жизни
