1 SSAO介绍
1.1 环境光遮蔽(AO)
全称Ambient Occlusion,是计算机图形学中一种着色和渲染技术,模拟光线达到物体的能力的粗略的全局方法,描述光线到达物体表面的能力。
这个场景看起来没有表示颜色的贴图,但是场景的阴影效果和AO效果还是存在的,这让场景的层次细节在即使没有颜色的情况下也可以展现出来,形成了一种特殊的风格。
环境光遮蔽对效果的提升有多重要,看一下顽皮狗在《Uncharted 2: HDR Lighting》的一个对比图,可以看到,左侧的车底遮挡了大部分光线,形成了阴影看起来很自然,而右侧的车感觉就像飘在上面一样,看起来比较假:
计算
np代表样本位置p的法线,w表示点p切平面正方向的任意向量,V(p,w)是可见函数,如果点p在w方向被遮挡则为1,否则为0.max(np*w,0)就是两个向量的余弦值。可以看出计算AO系数是一个非常昂贵的操作,**一般离线渲染器都会采用Ray-Tracing(光线追踪)或者是Ray-Marching(光线步进)算法,模拟若干条射线以计算遮蔽百分比,**但是很明显这种计算方式不能用在实时计算领域。
AO是来描绘物体和物体相交或靠近的时候遮挡周围漫反射光线的效果
AO全称 ambient occlusion.环境光遮挡。基本的原理。
AO的是光照无关的。光从哪里来。有几个和AO没关系。
AO是一个物体当时形变下所具有的属性。
AO特效在直观上给我们玩家的感受主要体现在画面的明暗度上,未开启AO特效的画面光照稍亮一些;而开启AO特效之后,局部的细节画面尤其是暗部阴影会更加明显一些
环境光遮蔽和阴影遮蔽的区别
环境光可以理解为天光,而阴影是由光源(太阳,灯光等直接光照光源)产生的。
这是直接光源照射环境产生的效果,可以看到阴影区域是很生硬的,因为所有的光只进行了一次计算
这是添加了环境光遮蔽产生的效果,场景光影细节更加真实细腻。
产生这样的区别原因:
1 直接光照不计算光源到达平面后二次反射,阴影是一个平面颜色,而环境光会计算照射到不同物体上反射会的光源
2 环境光每经过一次反射就会产生出衰减,因此环境光是非常弱的,能够在阴影看到环境光的影响,但环境光反射后不是到达所有平面,在死角/角度很小的区域反射光无法到达就会产生很重的阴影,这个区域就会产生环境光遮蔽。
直接光照产生的阴影
首先物体受到直接光照产生阴影,其次也受到间接光照产生的环境光(天光)遮蔽,球体与地面交界部分产生了遮蔽(角度非常小),阴影部分受到环境光影响,产生了细腻过渡的环境光效果。
有直接光照光源:当物体没有与其他物体产生狭窄的交界时,就不会产生环境光遮蔽。
移除直接光照的光源,只保留环境光(天光),物体就会像在阴天一样。这时保留的就是环境光遮蔽(环境光照射的地方),并非阴影(直接光到达不了的地方),
SSAO
SSAO:屏幕空间环境光遮蔽,全称Screen Space Ambient Occlusion,一种用于计算机图形中实时实现近似环境光遮蔽效果的渲染技术。它不是场景的预处理,而是一种屏幕后处理技术,通过在屏幕像素的位置布置随机个采样点,然后通过采样点遮蔽项所占的百分比来计算阴影遮蔽强度。
计算AO的核心问题在于如何取采样点并判断这些采样点是否被遮蔽. 我们首先解决第一个问题. 在此我们使用一种指向法线方向的半球形采样块(Sample Kernel), 并在采样块中生成采样点. 距离原点越远的点, AO贡献越小. 采样块如下图所示:
那么我们转入第二个问题: 如何判断下图中的采样点遮蔽情况呢
(涂黑的点处在几何体表面内部, 因此判定为被遮蔽)
一种方法是将采样点全部投影到View Plane上, 相当于获取采样点的UV坐标, 并同时获取Depth Buffer中该UV坐标处的深度值. 随后比较采样点的深度和场景中该点的深度. 如果采样点的深度更大, 说明其被场景遮蔽. 最终将所有采样点的AO贡献求和, 即是该点的AO值. 计算公式如下:
其中, 函数V前面已经介绍过. 函数D是一个[0, 1]之间的单调递减函数, 距离原点越近的采样点对AO的贡献越大. 一般使用指数函数.
涉及到的相关概念
今天的文章屏幕空间环境光遮蔽和水平环境光遮蔽_免费修改画质的软件暗区[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/82296.html