OpenGL : SSAO vs Shadow mapping

标签 opengl shadow-mapping ssao

文学性的每一篇关于 SSAO 的文章都以“dosent 完全产生现实的结果”结尾。我们可以使用 shadow mapping 获得更准确的阴影不需要额外的内存来存储充满随机向量的纹理[或统一数组]用于采样或额外的模糊 channel 来减少 strip ,那么为什么还要使用 SSAO?

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

最佳答案

阴影贴图和屏幕空间环境光遮挡解决了渲染方程的不同部分,因为它们做出了不同的假设。

顾名思义,屏幕空间 环境光遮挡 假设光线从采样半球上方的每个可能方向均匀地射来指向那个点。也就是说,为了解决环境光遮挡问题,我们需要在样本点的半球上对常数函数(辐照度)进行积分,以确定半球的立体角中被环境光遮挡的部分光源。

屏幕空间环境光遮挡一词中还有短语“屏幕空间”。这意味着,我们为了计算被均匀环境光源遮挡的采样点半球的分数而进行的计算仅基于我们在屏幕空间(而不是世界空间)中准备好的信息,例如:场景几何体的分析光线转换/跟踪 - 我们当然可以这样做,但这样它就不再被称为屏幕空间环境光遮挡)。

所以,环境光遮挡(屏幕空间环境光遮挡是一种基于我们渲染到屏幕空间的信息来近似的方法):

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

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

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

关于OpenGL : SSAO vs Shadow mapping,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65682401/

相关文章:

java - 使用纹理对象使用 JOGL 进行基本纹理绘制

c++ - 四元数和翻译

opengl - 我可以旋转 glOrtho() 的 View 吗?

opengl - 设置 gl_FragDepth 会导致延迟吗?

opengl - 将 SSAO 与全局光和局部光相结合

c++ - 面向简单的基于着色器的 GL 程序的 OO 架构

c++ - 自动调整阴影贴图投影(通过将关注点投影到光源的近裁剪平面上)

opengl - 什么引起暗疮痤疮?

opengl-es - SSAO 文物分为三部分