Real-Time Global Illumination(screen space)

Screen Space Ambient Occlusion:屏幕空间环境光遮蔽,在屏幕空间中的全局光照的一种近似。

假设SSAO的着色点的光照是来源于次级光源或多次弹射,且都是diffuse的。但它和布林冯着色模型并不一样。

 

 在这两点上不一样,考虑visibility,如果不考虑visibility,接收到的所有光就会一样,看起来就会像是一个平面。考虑visibility后,某些着色点所接收到的光就会不一样。这里也假设材质都是diffuse的。

 

 

 从渲染方程开始

 

 

 间接光照是常数,着色点材质是diffu。所有BRDF是常数,把这两项拿到积分外,这时就剩下visibility的加权求和

 

 

 计算visibility的加权求和,分在3D空间和屏幕空间下。

在3D空间下,要考虑在一定范围内的环境光照遮挡情况,如果过小,就会忽略掉来自远方向的环境光照,如果过大,就会没有实际意义,因为一般的环境光遮挡都是来自于近处的物体遮挡。

 

 

 在屏幕空间下,SSAO用了大胆的假设,以着色点为圆心创建一个球,然后在这个球内随机取点,如何判断取得点能够被着色点看到,通过camera视角下的z-buffer可以知道最浅深度,如果取到的点大于最浅深度,就会看不见,反之就能看见。当然这里会有一点点的小问题,在下面中间的图中,有一个点,可以被着色点看到,但它的深度大于z-buffer的最浅深度,就会被当作看不见。不过由于是工业界用法,所以忽略这个错误了。

 

 

 在以前的年代,shadow map记录的内容中没有法向量,所以要用一个球方式来判断visibility的情况,但现在已经有了法向量,也就是只需要用半球就可以了。

 

 

 在没有法向量的情况下,以图中为列,如果红色点没有超过一办,说明没有被遮挡,在超过一半后开始计算visibility.

 

 

下图说明SSAO的一个错误,在右图的画圈中,石凳对地面的环境光遮蔽提供了贡献,是因为在屏幕空间下,被石凳挡住的部分会是红点。

 

 SSAO的球中采样点,不能太多也不能太少,得到一个noise的AO

 

 

 然后进行dinoise,获得一个模糊的效果,这样AO就可以用了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章