返回

文章详情

角落看起来不是这样的:关于屏幕空间环境光遮蔽

Hacker News2026年7月20日 15:07

肖恩·巴雷特 2012-12-13 真实的物理康奈尔箱子。摘自 Goral 等人 1984 年的《建模漫反射表面之间的光相互作用》。请随意收集更好的数据来证明我错了。如果你这样做了,我会链接到它!游戏开发者对屏幕空间环境光遮蔽(SSAO)情有独钟。他们如此热衷于此,以至于做了各种疯狂的事情。业余开发者发布了凸角在角落附近变亮的截图。专业开发者发布了带有奇怪光晕和丑陋伪影的游戏(看看栏杆后面的地板)。即使他们避免了这些缺陷,使用 SSAO 的游戏仍然常常看起来不正确。可以从中提取的一个简单现象是:房间的角落看起来异常黑暗。我认为这是因为人们认为房间的角落实际上是黑暗的,并且他们允许这种信念让他们编写出产生不现实结果的代码。更具体地说,我将 SSAO 在这些情况下失败归因于四个因素的某种组合:由于使用 SSAO 而产生的近似误差,而不是 AO;由于使用 AO 而不是辐射度造成的近似误差;在将 SSAO 变暗应用于所有光照,而不仅仅是环境光照时的错误;调优错误,其中 AO 效应的启发式加权过强。我不是一个活跃的图形研究人员,所以我不会建立框架并展示这些地方出错的地方。那是发表 SSAO 论文并在游戏中推出 SSAO 的人的工作。在同样的原因下,以下讨论也不是最科学的,也不是很全面。也许收集更多的数据会表明我错了。但我个人的视觉体验与人们使用 SSAO 渲染的内容并不匹配,因此我想分享这种体验;为此我收集了一些数据。角落看起来不是这样的(大多数时候)在以下内容中,一切都是照片,而不是渲染。照片是使用佳能 5D Mk II 拍摄的,以 JPEG 格式导出,曝光时间范围从 1/80 秒到 1/8 秒。原始的大 JPEG 图片在尺寸上约下降了四倍,使用 Adobe Photoshop 处理。在 Photoshop 中,所有图像的色度通道在降采样之前使用 16 宽的高斯模糊进行了模糊处理,以减少长曝光图像中的色度噪声伪影。公寓的天花板比墙壁颜色更浅、更白,因此请不要错误地将其归因于照明。让我们先看看一张实际上看起来像常见 AO/SSAO 渲染的照片。显著变暗的角落(此图像经过数字亮化,以使效果更明显。希望亮化保持伽马不变。)我不得不在公寓中寻找很长时间才能找到一个看起来像典型 SSAO 渲染图像的角落。问题是,这里实际情况并不是这样的。墙(c)无法看到光线,但墙(d)却暴露于光线之下。墙(d)左边缘的变暗并不是主要由 AO 造成的(即由互反射/辐射度效应造成的);它主要是由于来自于屏幕左上方的光的柔和阴影。左侧的角落,位于墙(b)和墙(c)之间,正在投下阴影,但它非常靠近光源,因此扩展成一个巨大的柔和阴影。还有其他边缘也变暗。墙(d)的顶部边缘是另一个阴影——看看明亮墙壁的顶部边缘。光源是凹进去的,因此这里的所有光其实都是来自于凹陷的反射光,凹陷的唇缘使墙顶端的位置无法接收到这些光。(落在天花板上的所有光都是间接的,来自房间内的墙壁、地板和其他物体。)在墙(c)向右边缘靠近或在墙(d)沿边缘向天花板(a)靠近时,变暗的现象又如何?这看起来是由 Lambertian 点积引起的间接照明效应;当某一点接近墙(c)上的中心边缘时,墙(d)上明亮部分变得越来越边缘,并且该点变暗。我想这就是 AO 应该捕捉的主要事物,但在这里被夸大了;如果墙(d)均匀照明(没有柔和阴影),即使你从左侧走近边缘,你仍然会看到大部分“视野”被明亮的表面所填满。仅仅因为柔和阴影以完美的方式将墙(d)弄暗,效果才如此显著。还有一个边缘剩下;墙(c)和天花板(a)之间的边缘。当你从两侧接近边缘时,这个边缘也显示出变暗,并且不应该受到光的柔和阴影的影响。问题是,它到底是多么变暗,多少只是与所有其他光照效果的对比带来的心理效应?相机可能不是感知的,但至少我们可以将其绘图。理想情况下,这些照片处于已知的颜色空间。这些照片声称处于 sRGB,但鉴于结果

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡