Version: Unity 6.0 (6000.0)
语言 : 中文
优化 URP 中的阴影渲染
URP 中的反射

URP 中阴影的故障排除

关于通用渲染管线 (URP) 中阴影渲染的故障排除的技术。

调整 URP 中的阴影偏差设置

通过调整阴影偏差 (shadow bias) 值,可以减少或消除阴影暗斑、阴影分离(也称为彼得平移)、漏光和自我阴影等阴影瑕疵。

在 URP 中,可以在 URP 资源 (URP Asset) 中和各个光源上设置阴影偏差。

URP 资源 (URP Asset) 中,阴影偏差设置位于阴影 (Shadows) 部分。此处设置的值是场景中所有光源的默认值。

为特定光源设置阴影偏差值:

  1. 光源 (Light) 组件的阴影 (Shadows) 部分中,的确保阴影类型 (Shadows Type) 设置为柔和阴影 (Soft Shadows)硬阴影 (Hard Shadows)

  2. 偏差 (Bias) 属性设置为自定义 (Custom)。Unity 会显示深度 (Depth)法线 (Normal) 属性。使用这些属性可设置当前光源的阴影偏差值。

使用较高的阴影偏差值可能会导致光线通过网格发生泄漏。此问题出现在阴影与其投射物之间存在明显差距的位置,导致阴影形状无法精确表示其投射物。

避免 URP 中的最大光照限制导致的阴影闪烁

对于摄像机视锥体中的可见光数量,URP 对每个摄像机设定了限制。例如,在移动平台上,此限制为 1 个主光源和 32 个其他光源。

在前向渲染路径中,还存在每个对象的光照限制

如果可见光的数量超过限制,Unity 会禁用部分光源。这可能会禁用实时阴影投射光源,从而导致阴影闪烁。

为避免此问题,请确保摄像机视锥体中的可见光数量不超过限制。您可以使用 RenderingData.cullResults API 的 cullResults.visibleLights 数组来获取可见光的数量。

以下示例展示了如何使用 cullresults.visibleLights 数组:

public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
{
    int visibleLightCount = renderingData.cullResults.visibleLights.Length;
}
优化 URP 中的阴影渲染
URP 中的反射