Peng 发表于 2023-4-4 20:36:02

屏幕空间环境遮蔽算法

关于SSAO、HBAO、GTAO的实现原理

DUO酱 发表于 2023-4-4 20:36:52

屏幕空间环境遮蔽(SSAO)算法是一种基于视图空间的实时阴影技术,用于在渲染场景时模拟物体之间的遮挡效果。它通过采样深度缓冲区来计算每个像素附近的几何信息,然后使用这些信息评估其周围环境光的遮挡程度。这样可以加强场景的阴影效果,增加画面细节和逼真度。

基于屏幕空间环境遮蔽的实现方法有多种,其中比较常见的三种是:

1. 基于HBAO的算法

基于半球状遮蔽的屏幕空间环境遮蔽算法(HBAO)是一种基于屏幕空间的实现方法,它通过在深度缓冲区周围采样一个半球型的样本来计算出当前像素的遮挡值。具体来说,它首先从当前像素点出发,向外生成多个方向的采样向量,然后按照这些向量在深度缓冲区内找到对应的采样点,最后统计这些采样点的遮挡值,计算出当前像素的遮挡值。

2. 基于GTAO的算法

基于几何着色器的屏幕空间环境遮蔽算法(GTAO)是一种计算复杂度较高的实现方法,它主要利用几何着色器的特性,通过生成额外的几何信息,来增强场景中物体之间的遮挡效果。具体来说,它在几何着色器中生成多个不同方向的阴影光束,然后根据这些光束与深度缓冲区的交叠情况,计算出当前像素的遮挡值。

3. 基于GTAO和HBAO混合的算法

基于GTAO和HBAO混合的屏幕空间环境遮蔽算法是一种将两种算法的优点相结合的实现方法,它利用HBAO算法的快速计算能力和GTAO算法的高质量遮挡效果,通过混合这两种算法的结果来获得更加逼真的遮挡效果。具体来说,它先使用HBAO快速计算出当前像素的粗略遮挡值,然后再将这个值作为GTAO算法的输入,计算出更加细致的遮挡值。

Peng 发表于 2023-4-5 04:42:27

可以详细说说SSAO屏幕空间环境遮蔽算法吗

DUO酱 发表于 2023-4-5 04:42:56

好的,下面我会详细介绍一下SSAO算法。

SSAO(Screen Space Ambient Occlusion)是一种基于屏幕空间的环境遮挡算法,用来模拟物体之间的遮挡效果。其原理是在渲染过程中,通过采样深度缓冲区和法线缓冲区等信息,计算出每个像素点周围的遮挡强度,并将这些遮挡值应用于场景中的各个物体表面上,增加场景的阴影细节和逼真度。

具体来说,SSAO算法主要分为以下几个步骤:

1. 屏幕空间法线计算
首先需要计算每个像素点周围的法向量,用于判断当前像素点是否被遮挡。法线缓冲可以在渲染几何体时通过几何着色器计算得到。

2. 屏幕空间采样
接下来,在屏幕空间内生成多个采样点,在这些采样点处获取深度值和法向量,用于计算当前像素点的遮挡值。采样点可以采用随机分布的方式,也可以根据预设规则进行定向采样,以获得更好的遮挡效果。

3. 遮挡强度计算
对于每个采样点,可以计算出该点到当前像素点的距离以及其法向量与当前像素点法向量之间的夹角。接着,可以利用这些信息计算当前像素点与各采样点之间的遮挡强度,并对这些遮挡强度进行累加和平均,得到当前像素点的最终遮挡值。

4. 多次采样和模糊
为了进一步增加遮挡效果的真实感,可以在SSAO算法中引入多次采样和模糊处理。每次采样可以使用不同的随机数种子或采样方向,从而获得不同的遮挡强度,而模糊处理则可以消除噪声和锯齿等不良效应,增加图像的平滑程度和逼真感。

总体来说,SSAO算法是一种基于视图空间的实时阴影技术,能够有效地增强场景的阴影细节和逼真度,提高画面的质量和用户体验。

Peng 发表于 2023-4-5 04:43:39

可以详细说说SSAO屏幕空间环境光遮蔽吗

DUO酱 发表于 2023-4-5 04:44:13

好的,下面我会详细介绍一下SSAO算法。SSAO(Screen Space Ambient Occlusion)是一种基于屏幕空间的环境光遮蔽算法,用来模拟物体之间的遮挡效果和环境光照射下的阴影效果。其原理是在渲染过程中,通过采样深度缓冲区、法线缓冲区等信息,计算出每个像素点周围的遮挡强度,并将这些遮挡值应用于场景中的各个物体表面上,增加场景的阴影细节和逼真度,同时考虑环境光的影响,在物体表面上分布随机的遮挡因子,以实现与环境光的互动效果。具体来说,SSAO算法主要分为以下几个步骤:

1. 屏幕空间法线计算

首先需要计算每个像素点周围的法向量,用于判断当前像素点是否被遮挡和环境光照射情况。法线缓冲可以在渲染几何体时通过几何着色器计算得到。

2. 屏幕空间采样

接下来,在屏幕空间内生成多个采样点,在这些采样点处获取深度值和法向量,用于计算当前像素点的遮挡值和环境光遮蔽因子。采样点可以采用随机分布的方式,也可以根据预设规则进行定向采样,以获得更好的遮挡效果和环境光照射效果。

3. 遮挡强度计算

对于每个采样点,可以计算出该点到当前像素点的距离以及其法向量与当前像素点法向量之间的夹角。接着,可以利用这些信息计算当前像素点与各采样点之间的遮挡强度,并对这些遮挡强度进行累加和平均,得到当前像素点的最终遮挡值和环境光遮蔽因子。

4. 多次采样和模糊

为了进一步增加遮挡效果和环境光照射效果的真实感,可以在SSAO算法中引入多次采样和模糊处理。每次采样可以使用不同的随机数种子或采样方向,从而获得不同的遮挡强度和环境光遮蔽因子,而模糊处理则可以消除噪声和锯齿等不良效应,增加图像的平滑程度和逼真感。

总体来说,SSAO算法是一种基于视图空间的实时阴影技术,同时考虑环境光照射的影响,能够有效地增强场景的阴影细节和逼真度,提高画面的质量和用户体验。

Peng 发表于 2023-4-5 06:00:07

可以帮我写出SSAO的公式吗

DUO酱 发表于 2023-4-5 06:00:27

好的,以下是SSAO的近似计算公式:

首先,假设我们有一组从当前像素点出发的采样点集合 $P$,以及与每个采样点对应的深度值 $d_i$ 和法线值 $n_i$。

遮挡因子的近似计算公式是:

$$
AO=\frac{1}{N}\sum_{i=1}^N(1 - SM(d_i, p_i, r))
$$

其中,$N$ 是采样点数目,$SM$ 是计算深度差异的函数,$r$ 是半径值。该公式衡量了当前像素点在所有采样点附近的遮挡程度,遮挡因子越大则表示遮挡的可能性越高。

对于深度差异函数 $SM$,可以使用以下公式:

$$
SM(d_i, p_i, r)=clamp(\frac{(d_i - d(p_i)) - bias}{r},0,1)
$$

其中,$d(p_i)$ 表示采样点 $p_i$ 的深度值,$bias$ 是一个预设的偏移参数,用于控制深度差异的影响强度。该函数将深度差异归一化到 $$ 的范围内,然后使用一个阈值函数将其限制在 $$ 的范围内。

最终,在计算得到遮挡因子 $AO$ 后,可以在渲染过程中将其应用到场景中的各个物体表面上,增加阴影细节和逼真度。
页: [1]
查看完整版本: 屏幕空间环境遮蔽算法