屏幕空间环境光遮挡如何实现?


11

我不理解维基百科的解释

对于屏幕上的每个像素,像素着色器都会对当前像素周围的深度值进行采样,并尝试从每个采样点计算遮挡量。

周围像素的深度值如何告诉您有关遮挡的信息?据我了解,遮挡发生在对象A站在另一个对象B的前面时,因此您看不到对象B。但是为什么现在要查看周围像素的深度像素呢?我的意思是您可以看到这些像素,所以没有遮挡。也许我理解遮挡是错误的。

我还不理解的是其他一些教程中的术语“内核”。什么是内核,为什么要在sao中使用它?

有人可以针对我的问题对算法进行详细说明吗?


这样考虑:深折痕中会有阴影。
艾伦·沃尔夫

1
此处要了解的关键是,我们正在尝试计算环境光的遮挡,而不是视线中的遮挡。
trichoplax

Answers:


5

通常,环境光遮挡(AO)的动机是近似估算出缝隙和拐角经常被遮盖的方式,因为间接光反弹的可能性较小。我办公室的照片中的一个例子-注意墙壁和天花板相交处的边缘变暗。只有通过窗户进入并在周围弹跳的光线才能照亮房间。

在房间角落展示类似AO效果的照片

为了准确地模拟这种现象,离线渲染器使用诸如路径跟踪和光子映射之类的技术。为了实时起见,我们要么离线对其进行预先计算,要么以某种方式对其进行近似。

屏幕空间环境光遮挡(SSAO)的观察结果是,您可以通过查看渲染图像的深度缓冲区(以及法向矢量)来检测拐角和缝隙,因此可以将近似AO计算为通过。深度缓冲区是场景中几何图形的粗略表示,因此,通过在目标像素附近采样深度缓冲区值,您可以了解周围几何图形的形状,并猜测AO使其变暗的程度。应该。

Bavoil和Sainz(2008)的深度缓冲区如何表示几何图形

该图来自Bavoil和Sainz(2008),显示了深度缓冲区值(解释为各种高度场如何表示某些几何形状的离散化版本。在计算中心像素的SSAO时,您需要查看周围像素的深度值并将其插入某个公式,该公式旨在在几何形状更凹时(如图中所示)生成较暗的值,而在图形中绘制更浅的值几何平面或凸面时的值。

深度值进入的公式类似于用于模糊,边缘检测等的过滤内核被称为“内核” 。但是,SSAO不仅仅是深度值的线性卷积而复杂。细节决定成败。在过去的十年中,样本的分布以及处理样本以生成遮挡值的公式一直是许多研究的主题,目的是在保持良好性能的同时,改善真实感并减少伪影。


5

正如Alan和trichoplax在评论中提到的那样,环境光遮挡模拟的效果不是相机表面的光遮挡,而是其周围环境的光遮挡。

这样想:假设您从各个方向都得到均匀的照明,因此任何点的总入射光的总和为1。如果您在该环境中放置一个平面并朝其一侧看,另一侧将获得该照明的50%或0.5,因为另一半被飞机本身阻挡。换句话说,飞机表面上的任何点都只能“看到”来自一半环境的光,因此它只有一半被明亮地照亮。如果将平面朝着视点折叠(“谷”折),则可以进一步降低到达该平面那侧的入射光照,使其值小于0.5,因为该平面上的每个点再次“看到”了一点来自周围的光线更少。

屏幕空间环境光遮蔽通过寻找这些“褶皱”或多或少起作用,这些褶皱是深度的急剧变化(通过比较相邻像素的深度来定义),然后将它们变暗以模拟来自点环境的照明降低。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.