对于屏幕上的每个像素,像素着色器都会对当前像素周围的深度值进行采样,并尝试计算每个像素的遮挡量采样点。
周围像素的深度值如何告诉您有关遮挡的信息?据我了解,遮挡发生在对象A站在另一个对象B的前面时,因此您看不到对象B。但是为什么现在要查看周围像素的深度像素呢?我的意思是您可以看到这些像素,所以没有遮挡。也许我理解遮挡是错误的。
我还不理解的是其他一些教程中的术语“内核”。什么是内核,为什么要在sao中使用它?
有人可以针对我的问题对算法进行详细说明吗?
#1 楼
通常,环境光遮挡(AO)的动机是近似估算出缝隙和拐角经常被遮盖的方式,因为间接光反弹的可能性较小。我办公室的照片中的一个例子-注意墙壁和天花板相交处的边缘变暗。为了精确模拟这种现象,脱机渲染器使用诸如路径跟踪和光子贴图之类的技术来照亮房间。 。为了实时起见,我们可以离线对其进行预先计算,或者以某种方式对其进行近似。
屏幕空间环境光遮挡(SSAO)基于以下观察结果:您可以通过观察渲染图像的深度缓冲区(可能还有法线向量),因此您可以将近似AO计算为通过后。深度缓冲区是场景中几何图形的粗略表示,因此,通过在目标像素附近采样深度缓冲区值,您可以了解周围几何图形的形状,并猜测通过AO可以使它变暗
这张来自Bavoil和Sainz(2008)的图表显示了深度缓冲区值(被解释为各种高度域)如何表示某些离散化版本几何。在计算中心像素的SSAO时,您需要查看周围像素的深度值并将其插入某个公式,该公式设计为在几何形状更凹时(如图中所示)产生较暗的值,而在图形中更亮几何形状为平面或凸面时的值。
深度值进入的公式类似于用于模糊,边缘检测等的滤波器内核,称为“内核”。但是,SSAO比深度值的线性卷积更为复杂。细节决定成败。在过去的十年中,样本的分布以及处理样本以生成遮挡值的公式一直是许多研究的主题,目的是在保持良好性能的同时,改善真实感并减少伪影。
#2 楼
正如Alan和trichoplax在评论中提到的那样,环境光遮挡模拟的效果不是相机表面的光遮挡,而是其周围环境的光遮挡。这样想:说您有甚至来自各个方向的照明,因此任何点的总入射光的总和为1。如果将平面放置在该环境中并查看其一侧,则该侧将接收到50%的光。该照度或0.5,因为另一半被飞机本身阻挡了。换句话说,飞机表面上的任何一点都只能“看到”来自一半环境的光,因此一半是明亮的光线。如果将平面朝着视点折叠(“谷”形折叠),则可以进一步降低入射到该平面那侧的照明,使其值小于0.5,因为该平面上的每个点再次“看到”更少的来自周围的光线。
通过寻找这些“褶皱”,屏幕空间的环境光遮蔽或多或少地起作用-深度急剧变化的区域,通过比较相邻像素的深度来定义—将它们变暗以模拟从点环境减少的照明。
评论
这样想:深的折痕中会有阴影。这里要了解的关键是,我们正在尝试计算环境光的遮挡,而不是从视线中计算遮挡。