URP 渲染实战 / 第 6 章 多光源与阴影 / 案例 6.5
案例 6.5阴影 Bias 调参对比进阶
目标:亲眼看到粉刺、Peter-Panning 和法线偏移过度三种问题,掌握 Bias 的调参方法。
测试场景:一个立方体放在地面上,一块悬空的薄板,一个球,主光源为高角度很低的侧光(20°),阴影图分辨率 512,软阴影 High——低分辨率和大滤波核都会放大偏移带来的问题。Depth Bias 与 Normal Bias 通过 URP Asset 修改(灯光上的 Bias 选项默认“Use settings from Render Pipeline Asset”):

调参的一般步骤:
- 先把两个 Bias 都设为 0,确认问题确实来自偏移不足(出现粉刺),而不是别的原因(比如法线反了、模型没有厚度)。
- 先加 Normal Bias,到粉刺基本消失为止。它对倾斜表面最有效,而且对接触处的影响比深度偏移小。
- 再用少量 Depth Bias 处理剩下的问题,同时观察物体与地面的接触处,一旦出现缝隙就往回调。
- 检查最薄的物体(树叶、栏杆、薄板)的影子,Normal Bias 过大时它们会先出问题。
- 修改阴影分辨率、阴影距离、级联数或软阴影质量后,重新检查——因为 Bias 的单位是“texel”,这些设置都会改变它的世界空间大小。
提示某一盏灯需要特殊的偏移时,在 Light 组件的 Shadows 部分把 Bias 从 “Use settings from Render Pipeline Asset” 改为 Custom(对应
UniversalAdditionalLightData.usePipelineSettings = false),URP 就会改用 light.shadowBias 和 light.shadowNormalBias。为什么不在接收端做偏移?接收端偏移(比如根据屏幕空间导数估计表面斜率)可以更精确,HDRP 就有这样的选项;但它要在每个接收阴影的像素上额外计算,而投射端偏移只在阴影 Pass 的顶点上计算一次。URP 选择了更便宜的方案,ShadowUtils.cs 的注释里也坦率地说明了这是对透视阴影(聚光/点光)的“粗略近似”。