接触阴影 (Contact Shadows)
接触阴影体积覆盖 (Contact Shadows Volume Override) 指定用于控制接触阴影行为的属性。接触阴影是高清渲染管线 (High Definition Render Pipeline, HDRP) 光线在深度缓冲区内的屏幕空间中行进的阴影。使用接触阴影的目的是捕获常规阴影贴图算法无法捕获的小细节。
启用接触阴影
要在场景中使用此功能,必须先为项目启用此功能,然后为摄像机启用此功能。要在项目中启用功能,请使用 HDRP 资源,而要为摄像机启用功能,请使用帧设置 (Frame Settings)。您可以使用默认帧设置 (Default Frame Settings) 为所有摄像机启用功能,或者通过覆盖每个摄像机单独的帧设置 (Frame Settings) 为特定摄像机启用功能。
对于此功能: 要在 HDRP 资源中启用的属性是:Lighting > Shadows > Use Contact Shadows。 要在帧设置 (Frame Settings) 中启用的属性是:Lighting > Contact Shadows。
使用接触阴影
接触阴影使用体积 (Volume) 框架,因此若要启用和修改接触阴影属性,必须将接触阴影覆盖添加到场景中的体积。要向体积添加接触阴影,请执行以下操作:
- 在 Scene 视图或 Hierarchy 视图中,选择一个包含 Volume 组件的游戏对象以在 Inspector 中查看该游戏对象。
- 在 Inspector 中,导航到 Add Override > Shadowing,然后单击 Contact Shadows。HDRP 现在会将接触阴影应用于此体积所影响的任何摄像机。
可以根据每个光源为方向光、点光源和聚光灯启用接触阴影。勾选每个光源的 Shadows 部分中 Contact Shadows 下拉选单下的 Enable 复选框,以指示 HDRP 应计算该光源的接触阴影。
一次只能有一个光源可以投射接触阴影。这意味着,如果有多个光源可以投射在屏幕上可见的接触阴影,则只有占据主导优势的光源会渲染接触阴影。HDRP 根据光源包围盒的屏幕空间大小来选择占主导优势的光源。投射接触阴影的方向光始终为占主导优势的光源。
注意:只要网格渲染器使用的材质会写入到深度缓冲区,光源便会投射接触阴影。这一点与您启用还是禁用网格渲染器上的 Cast Shadows 属性无关。这意味着,您可以对小型游戏对象/道具禁用 Cast Shadows 属性,但仍然让它们投射接触阴影。如果您不希望 HDRP 在阴影贴图中渲染这些游戏对象,则非常适合这样做。如果您不希望出现这种行为,请使用 Shader Graph 创作一种不会写入到深度缓冲区的材质。
API
要在运行时访问和控制此覆盖,请使用体积脚本 API。由于体积系统的工作原理,可以使用与标准 Unity 组件不同的方式来编辑属性。也需要注意其他细微差别,例如每个属性都有一个 overrideState。这个参数向体积系统指示是使用你设置的属性值,还是使用存储在体积配置文件中的默认值。有关如何正确使用 API 的信息,请参阅体积脚本 API。
属性
要编辑任何 Volume 组件覆盖中的属性,请启用属性左侧的复选框。这也告诉 HDRP 使用您为 Volume 组件指定的属性值而不是使用默认值。如果禁用该复选框,HDRP 将忽略您设置的属性,并改用该属性在 Volume 组件中的默认值。
属性 | 描述 |
---|---|
Enable | 启用此复选框可以使 HDRP 处理该体积的接触阴影。 |
Length | 使用滑动条设置 HDRP 要追踪的光线长度(以米为单位)。还可以作为光线能够捕捉细节的最大距离。 |
Distance Scale Factor | HDRP 按距离放大接触阴影。请使用滑动条设置 HDRP 用于抑制该缩放比例(以避免因距离而产生瑕疵)的值。 |
Min Distance | 与摄像机之间的距离(以米为单位):HDRP 从此距离处开始淡入接触阴影。 |
Max Distance | 与摄像机之间的距离(以米为单位):HDRP 从此距离处开始将接触阴影淡出为零。 |
Fade In Distance | HDRP 在超过 Min Distance 时开始淡入接触阴影的距离(以米为单位)。 |
Fade Out Distance | HDRP 从 Max Distance 位置开始淡出接触阴影的距离(以米为单位)。 |
Opacity | 使用滑动条设置接触阴影的不透明度。值越小,阴影越柔和、越不明显。 |
Bias | 控制应用于屏幕空间射线投射的偏差以获取接触阴影。较大的值可以减少自身阴影,但是太大的值会导致阴影悬浮问题,这对于接触阴影而言是尤其不希望看到的结果。 |
Thickness | 控制沿射线发现的对象的厚度,从而实质上增加接触阴影的厚度。可以用来填充阴影中的孔洞,但是也可能会导致阴影过宽。 |
Quality | 指定用于此效果的质量级别。每个质量级别应用不同的预设值。Unity 还会阻止你编辑预设覆盖的属性。如果你希望为每个属性设置自己的值,请选择 Custom。 |
Sample Count | 使用滑动条设置 HDRP 用于光线投射的样本数。增大此值会提高质量,但也会降低性能。 |
详细信息
对于网格渲染器 (Mesh Renderer) 组件,将 Cast Shadows 设置为 Off 不会影响接触阴影。
在 1080p 的基本款 PS4 上,接触阴影的可变成本在 0.5 到 1.3 毫秒之间。