Opengl:SSAO 与阴影贴图

Opengl : SSAO vs Shadow mapping

文科每篇教程都写过一篇SSAO的文章,结尾是'dosent exactly produce realistic results'。我们可以使用 shadow mapping 获得更准确的阴影,而无需额外的内存来存储纹理 [或均匀数组] 充满用于采样的随机向量或额外的模糊通道以减少条带,所以为什么还要使用 SSAO?

我还看过一些结合了 SSAO 和阴影贴图的教程,这对我来说似乎有点过分了。这两种技术都是为了产生阴影吧?

他们解决的问题不同,相辅相成。

SSAO 解决了 ambient occlusion。即使您的点在阴影中,SSAO 也会修改强度,使更多被遮挡的区域变得更暗。阴影贴图不是那么准确。

这是一张对比图。整个区域都在阴影中,但使用 SSAO 可以更好地看到窗帘的形状(单击它可以将其打开更大以便更明显):

Shadow maps 解决了光源的可见性,不考虑光反射(SSAO 通过使用深度缓冲区伪造了这一点)。

仅使用阴影贴图渲染的场景看起来比使用 SSAO 和阴影贴图渲染的场景更平坦。

Shadow Mapping 和 Screen-Space Ambient Occlusion 解决了渲染方程的不同部分,因为它们做出了不同的假设。

顾名思义,Screen-Space Ambient Occlusion assumes该光从采样点半球上方的每个可能方向均等地射向该点。也就是说,为了解决环境光遮挡,我们需要在样本点的半球上积分一个常数函数(辐照度)来确定被遮挡的半球立体角的分数来自环境光源。

并且在单词 Screen-Space Ambient Occlusion 中也有短语“Screen-Space”。这意味着,我们所做的计算是为了计算采样点的半球被均匀环境光源遮挡的部分,仅基于我们在屏幕-space(而不是世界- space 通过例如对场景几何体进行射线分析 casting/tracing - 我们 可以 当然可以,但那样它就不会被称为 Screen -Space 不再有环境光遮蔽)。

所以,环境光遮蔽(屏幕-Space 环境光遮蔽是一种基于我们渲染到屏幕-space 中的信息来近似的方法):

  1. 假设光线均匀地来自采样点半球所有方向
  2. 近似遮挡因子(没有来自环境光源的入射光的采样点半球立体角的分数)

另一方面:阴影贴图。这是一种对入射到我们采样点的辐照度做出完全不同假设的技术。在这里,我们不假设光线来自采样点半球上方的所有方向,而是假设光线来自 单一 方向(或者当我们在该方向周围的一个小立体角时近似 柔和阴影).

为了解决that,我们可以从光线方向对场景进行采样,然后测试我们的采样点是否可以接收到来自该光线方向的光线。