Unity 6.3
0 онлайн 85 гостей 3 в системе
Вход

Устранение неисправностей теней в URP

Методы устранения неполадок отображения теней в Universal Render Pipeline (URP).

Отрегулируйте настройки тени в URP

Настраивая значения отклонения тени, вы можете уменьшить или устранить такие артефакты тени, как акне тени, отделение тени (также известное как петер-паннинг), утечка света и самотени.

В URP вы можете установить отклонение тени в URP активе и на отдельных светильниках.

В URP Asset, настройки тени находятся в разделе Тени. Значения, которые вы устанавливаете здесь, являются значениями по умолчанию для всех светов в сцене.

Чтобы установить значения смещения тени для конкретного света:

  1. В разделе Тени компонента Свет убедитесь, что Shadows Type установлено на Мягкие тени или Hard Shadows.

  2. Установите свойство Предвзятость на Таможня. Unity показывает свойства Глубина и Нормальная. Используйте эти свойства для установки значений смещения тени для текущего света.

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

Избегайте мерцания тени, вызванного максимальным ограничением света в URP

URP имеет ограничение на камеру на количество видимых огней в камере. Например, на мобильных платформах это ограничение составляет 1 Главный Свет и 32 Дополнительных Света.

В Пути Продвинутого Рендринга также есть ограничение света на объект.

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

Чтобы избежать этой проблемы, убедитесь, что количество видимых огней в камере фрустуме не превышает предел. Вы можете получить количество видимых огней с помощью cullResults.visibleLights массива RenderingData.cullResults API.

В следующем примере показано, как использовать массив cullresults.visibleLights:

public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
    int visibleLightCount = renderingData.cullResults.visibleLights.Length;
}