SSAO ,screen space ambient occlusion 屏幕空间环境光遮蔽。
一般光照模型中,环境光用于模拟光线的二次散射,从而使得不受直接光照的地方也能有相应的亮度。
很明显,犄角旮旯里,不应该有太多的光被散射出来,所以犄角旮旯和露出表面的环境光不应该相同。
而在光照模型中,环境光是一个定值。
所以ssao出现了,他解决的就是 如何定量犄角旮旯应该吸收(二次散射不出去的光自然大部分都被物体吸收)多少环境光的问题。
算法的核心其实相当直观,问题来自光的二次散射,那就来为每一个片元模拟一个随机的光线散射模型。
ssao算法基于屏幕后处理,或者说直接对接延迟渲染。因为需要对每一个片元都运行一次算法,消耗巨大。前向渲染根本无法使用。其次,ssao算法 被插在 Gbuffer pass之后 正式渲染之前。它的输出也是一张数据纹理(记录着每个片元受多少环境光)。正式渲染时,仅仅只需要在应用环境光的时候乘上ssao纹理中的数据即可。另外,为了方便基于视口的深度比对,Gbuffer的输出包括光照计算会转变到观察空间下进行,而不是世界空间。
如图所示,图中橘红色的点表示正在处理的片元,蓝色的小点表示随机的向量点,且分布在法向量