根据周围深度值,为原理:“屏幕四边形”(Screen-filled Quad )的每一分段计算“遮挡因子”(Occlusion Factor )。 这个屏蔽因子后来用于减少或抵消片段的环境光成分。 通过在片段周围的球形核(Kernel )的多个深度样本并与当前片段的深度值进行比较,获得遮挡因子。 高于片段深度值的样本数目是期望的屏蔽因子。

SSAO的整体流程:

渲染常规几何体,然后前往G-Buffer利用G-Buffer数据,通过TBN矩阵,将采样点从切线空间转换为视图空间,在该空间中比较和计算SSAO值,并将其传递到AmbientOcculction

采样深度,低于空间的实际剪辑深度。 如果采样点的深度低于空间实际片段的深度,我们认为这个点会被遮挡。 我们不需要考虑实际空间中的复杂情况。 如果Z-Buffer认为这一点被屏蔽了,他只需要知道他看不见,被隐藏了。 如果有64个采样点,一半被屏蔽,环境光的采用率为50%。

思考1:什么样的条件,会被认为是满足遮蔽条件,为什么这是合理的。

采用全球时,如图:

即使是平坦的表面,也会隐藏一半的屏蔽因子——位于平面下方(简单地理解为空间检测球),整个画面的趋势被灰色复盖。 这很简单,但没有效果。

思考2:为什么采用法向半球,而不是采用全球?

2.1-我考虑了在屏幕空间做,也就是说用后期那样的方法做。 不是在实际场景中进行复杂的计算

想到了使用2.2-g-buffer。

2.3-想到了利用切线空间。

2.4-考虑利用随机方向的微调和模糊,解决阶梯感和颗粒感问题。

这为我们解决问题提供了一些共同的想法。 一些复杂的操作,在3D空间花了很大的力气在屏幕空间试着做,每个表面的计算复杂的时候,在屏幕空间试着做,遇到粒子感和楼梯感的时候,考虑用模糊解决问题。 当然,前提是模糊只会影响某些成分,而不是原始模型的碎片。 延迟渲染所需的数据:

每段位置矢量每段法线矢量每段反射颜色采样核心旋转采样核心的随机旋转矢量是在屏幕空间中创建的,因此与“Defered Render”一样,需要G-Buffer所需的数据这也表明SSAO和Defered Render完全兼容。 在法线向量指向正z方向的“切线空间”(TangentSpace )中生成采样核心,因为相对于每个曲面的法线方向生成采样核心非常困难和不切实际。 (此处又使用了切线空间) ) ) ) )。

思考3:当初想到这个方法的人,是怎样思考这个问题的。

处理和计算空间内各表面非常麻烦时,统一转换为切线空间进行处理。

思考4:什么时候需要用到切线空间?

使用采样点的深度值与屏幕空间的深度值进行比较。 在此之前,请将切线空间中的采样点转换为切线空间。 计算采样的实际位置后(sample=fragPos sample * radius; )变换到投影空间时,可以与存储在G-Buffer中的深度信息进行比较。

思考5:空间中的随机采样点,是如何采样,并确定是被遮蔽的。

不。 歧义只是影响了SSAO。 模糊不针对原始模型,而只针对原始模型接收到的光分量中环境光的部分如何被遮挡。 虽然SSAO的效果很小,但可能并不容易察觉到,它大大提高了合适的光照场景的真实感,是工具箱中绝对必要的技术。

思考6:模糊效果会影响原来的模型吗?整体变暗,黑边因周围环境变暗而显得更细。

资料来源: https://game institute.QQ.com/community/detail/122731

极速赛车稳赚4码fered Render完全兼容。 在法线向量指向正z方向的“切线空间”(TangentSpace )中生成采样核心,因为相对于每个曲面的法线方向生成采样核心非常困难和不切实际。 (此处又使用了切线空间) ) ) ) )。

思考3:当初想到这个方法的人,是怎样思考这个问题的。

处理和计算空间内各表面非常麻烦时,统一转换为切线空间进行处理。

思考4:什么时候需要用到切线空间?

使用采样点的深度值与屏幕空间的深度值进行比较。 在此之前,请将切线空间中的采样点转换为切线空间。 计算采样的实际位置后(sample=fragPos sample * radius; )变换到投影空间时,可以与存储在G-Buffer中的深度信息进行比较。

思考5:空间中的随机采样点,是如何采样,并确定是被遮蔽的。

不。 歧义只是影响了SSAO。 模糊不针对原始模型,而只针对原始模型接收到的光分量中环境光的部分如何被遮挡。 虽然SSAO的效果很小,但可能并不容易察觉到,它大大提高了合适的光照场景的真实感,是工具箱中绝对必要的技术。

思考6:模糊效果会影响原来的模型吗?整体变暗,黑边因周围环境变暗而显得更细。

资料来源: https://game institute.QQ.com/community/detail/122731