在延迟着色中加速照明

我实现了一个简单的延期着色渲染器。 我使用3个G缓冲区来存储位置(R32F),正常(G16R16F)和reflection率(ARGB8)。 我使用球形地图algorithm来存储法线在世界空间。 目前我使用view *投影matrix的逆来计算每个像素从存储深度值的位置。

  1. 首先,我想避免每个像素matrix乘法计算位置。 有没有另外一种方法来存储和计算G-Buffer中的位置而不需要matrix乘法
  2. 将法线存储在视图空间中

我的引擎中的每个灯光都在世界的空间, 我想在视野中做灯光来加速我的灯光传递。

我想为我的延期引擎优化照明通行证。

对于像素位置,如注释中所述,通常认为使用深度缓冲区和屏幕上的像素的2D位置来计算其视图空间或世界空间位置是最好的。 如果您使用的是旧的D3D / OpenGL API版本,则可能需要在R32F缓冲区中存储额外的深度副本(目前还不清楚这是您现在正在做什么); 但在更新的API中,您可以直接读取实际的深度缓冲区,为自己节省一个G缓冲区插槽。

在任何情况下,大部分位置重构math都可以移入顶点着色器或CPU中,在片段着色器中只有一个倒数和一个madd(如果使用线性深度缓冲区,倒数是不需要的)。 如何做到这一点的细节在这篇博客文章 。