Ambient Occlusion
环境遮挡效果使折痕、洞、交叉点和彼此靠近的表面变暗。在现实世界中,这些区域往往会遮挡或遮挡环境光,所以它们看起来更暗。
URP实现了实时屏幕空间环境遮挡(SSAO)效果作为渲染器特性。
注意:SSAO效果是一个渲染器特性,它独立于URP中的后期处理效果。这种效果不依赖于体积,也不与体积相互作用。
下面的图片显示了一个场景,环境遮挡效果的关闭,打开和只有环境遮挡纹理。
环境光遮蔽效果关闭的场景。
打开环境光遮蔽效果的场景。
只有环境光遮蔽纹理的场景。
Adding the SSAO Renderer Feature to a Renderer
URP作为渲染器特性实现了环境遮挡效果。
要在你的项目中使用环境遮挡效果:
1. 在Project窗口中,选择URP资产正在使用的渲染器
检查器窗口显示渲染器属性。
2. 在检查器窗口中,选择
Add Renderer Feature(
添加渲染器特性
)
。在列表中,选择
Screen Space Ambient Occlusion(
屏幕空间环境遮挡
)
。
Unity为渲染器添加了SSAO渲染器特性
现在使用带有SSAO渲染功能的渲染器的相机有环境遮挡效果。
注意
:如果没有看到
Screen Space Ambient Occlusion,
请查看URP的版本,本篇翻译的URP的版本为10.2
Properties
本节描述SSAO渲染器特性的属性。
SSAO渲染器特性属性。
Name
渲染器特性的名称。
Downsample
选中此复选框将降低计算环境遮挡效果的通道的分辨率。
Performance impact(
性能影响
)
:非常高。
降低环境遮挡的分辨率通过一个因子2减少像素计数处理的因子4。这大大减少了GPU的负载,但会使效果不那么详细。
Source
选择法向量值的来源。SSAO渲染器使用法向量来计算表面上每个点在环境光照下的暴露程度。
可用的选项:
-
Depth Normals(
深度法线
)
:SSAO使用由深度法线通道生成的法线纹理。这个选项让Unity使用更精确的法线纹理。 -
Depth(
深度
)
:SSAO不使用深度法线通道来生成法线纹理。SSAO使用深度纹理来重建法向量。只有当你想避免在自定义着色器中使用DepthNormals Pass块时才使用这个选项。选择此选项将启用
Normal Quality(
法线质量
)
属性。
性能影响:取决于应用程序。
当在深度法线和深度选项之间切换时,性能可能会有变化,这取决于目标平台和应用程序。在广泛的应用程序中,性能差异很小。在大多数情况下,深度法线产生更好的视觉效果。
有关源属性的更多信息,请参见
实现细节部分
。
Normal Quality
当您在源属性中选择选项深度时,此属性将变为激活状态。
法向量质量越高,SSAO效应越平滑。
可用的选项:
-
Low
-
Medium
-
High
性能影响:中等。
在某些情况下,深度选项产生的结果与深度法线选项相当。但在某些情况下,深度法线选项提供了一个显著的提高质量。下面的图像显示了这种情况的一个示例。
Source: Depth. Normal Quality: Low.
Source: Depth. Normal Quality: Medium.
Source: Depth. Normal Quality: High.
Source: Depth Normals.
有关更多信息,请参见
实现细节部分
。
Intensity
这个属性定义了变暗效果的强度。
性能:影响微不足道。
Direct Lighting Strength
这个属性定义了在直接光照下效果的可见性。
性能:影响微不足道。
下面的图片显示了直接照明强度值如何影响不同的区域,取决于它们是否在阴影中。
Direct Lighting Strength: 0.2.
Direct Lighting Strength: 0.9.
Radius
当计算环境遮挡值时,SSAO效果从当前像素中获取该半径内的法线纹理样本。
性能影响:高。
降低半径设置可以提高性能,因为SSAO渲染器特征采样的像素更接近于源像素。这使得缓存更加高效。
计算环境遮挡通过的物体更接近相机比物体更远的相机花费更长时间。这是因为半径属性是随对象缩放的。
Sample Count
对于每个像素,SSAO渲染特征在指定的半径内取这个样本数来计算环境遮挡值。增加这个值会使效果更平滑、更详细,但会降低性能。
性能影响:高。
将采样计数值从4增加到8会使GPU的计算负载加倍。
Implementation details
SSAO渲染器使用法向量来计算表面上每个点在环境光照下的暴露程度。
URP 10.0实现了DepthNormals Pass块,用于为当前帧生成normal纹理_CameraNormalsTexture。默认情况下,SSAO渲染器使用这个纹理来计算环境遮挡值。
如果你实现了你的自定义SRP,如果你不想在你的着色器中实现DepthNormals Pass块,你可以使用SSAO渲染器特性并设置它的源属性为Depth。在这种情况下,Unity没有使用深度法线通道来生成法向量,而是使用深度纹理来重建法向量。
在
Source
(源)属性中选择
Depth
(深度)选项将启用
Normal Quality(
正常质量
)
属性。这个属性中的选项(低、中、高)决定了Unity在从深度纹理重建法向量时所需要的深度纹理的样本数量。每个质量等级的样品数量:低:1,中:5,高:9。