环境光遮挡效果可以使挨着折痕线、小孔、相交线和平行表面的地方变暗。在现实世界中,这些区域往往会阻挡或遮挡周围的光线,因此它们会显得更暗。
先来看一组效果:
环境光遮挡效果打开
环境光遮挡效果关闭
关闭场景的灯光,只开启SSAO
在URP中开启环境光遮挡
-
向渲染器添加 SSAO 渲染器功能
新建一个URP工程(或者将其他的工程升级成URP),选中UniversalRenderPipelineAsset_Renderer在Inspector面板中Add Renderer Feature
这样便具有环境光遮挡效果。
下面介绍一下 SSAO (实时屏幕空间环境光遮挡)渲染器功能的属性。
Name:渲染器的名字.
Downsample: 选中此复选框会将计算环境光遮挡效果的通道的分辨率降低到二分之一。(将环境光遮挡通道的分辨率降低到二分之一会使要处理的像素数减少到四分之一。这会显著降低 GPU 的负担,但会降低效果的细节级别。)
Source:
选择法线矢量值的源。SSAO 渲染器功能使用法线矢量来计算表面上每个点在环境光照下的暴露程度。
可用选项:
-
Depth Normals:SSAO 使用由
DepthNormals
通道生成的法线纹理。此选项可让 Unity 使用更准确的法线纹理。 -
Depth:SSAO 不使用
DepthNormals
通道来生成法线纹理。SSAO 改用深度纹理来重建法线矢量。仅当希望避免在自定义着色器中使用DepthNormals
Pass 代码块时,才应使用此选项。选择此选项将启用 Normal Quality 属性。在大多数情况下,Depth Normals 会产生更好的视觉效果。
Normal Quality:此属性将在您在 Source 属性中选择 Depth 选项时激活。更高质量的法线矢量会产生更平滑的 SSAO 效果。
Intensity:此属性定义变暗效果的强度。
Direct Lighting Strength:此属性定义该效果在暴露于直接光照下的区域中的可见程度。
Radius:在计算环境光遮挡值时,SSAO 效果会从当前像素中获取此半径内的法线纹理样本。(
降低 Radius 设置可提高性能,因为 SSAO 渲染器功能会采样更接近源像素的像素。这样可以提高缓存效率。在距离摄像机较近的对象上计算环境光遮挡通道比距离摄像机较远的对象花费的时间更长。这是因为 Radius 属性会随对象缩放。)
Sample Count:对于每个像素,SSAO 渲染功能会在指定半径内采用此数量的样本来计算环境光遮挡值。增加此值会使效果更平滑、细节更多,但会降低性能。
2.修改对应的材质Shader开启SSAO
勾选Shader属性中的Occlusion Map ,这里需要注意只是针对使用shader对应材质的物体开启
3.在光照烘焙时候开启SSAO(静态物体)
打开窗口 windows->Rendering->Lighting,选中Scene菜单,找到Ambient Occlusion 勾选,这样就开启了SSAO,光照烘焙相当于是一个预处理灯光,所以这种方案只针对于静态的物体。