在什么条件下,多次通过方法变得非常必要?

时间:2015-01-31 10:55:20

标签: opengl directx gpu deferred-rendering multipass

我想列举那些一般的基本情况,在这种情况下,多遍渲染成为不可避免的必然,而不是将所有内容保存在同一个着色器程序中。这是我到目前为止所提出的。

  • 当结果需要当前片段周围的非局部片段信息(即上下文)时,例如,对于盒式过滤器,那么前一次传递必须提供此;
  • 当结果需要通过先前传递完成硬件插值时;
  • 当结果充当某些计算的预缓存时,其能够实现比仅使用它们的那些通道中的整个计算集合(重新)工作更好的性能,例如,以特定且昂贵的方式变换深度缓冲器的每个片段,然后多个后期着色器可以共享,而不是每个重复这些计算。所以,计算一次,使用不止一次。

我从上面的(天真的)推论中注意到,顶点和几何着色器似乎并没有真正进入延迟渲染的图像,因此通常可能在第一遍中完成;对我而言,这似乎是明智的,但无论是对细节的肯定还是否定,都会引起人们的兴趣。

P.S。我打算把这个问题留下来收集好答案,所以不要指望快速获胜!

2 个答案:

答案 0 :(得分:1)

好主题。对我来说,因为我是一个初学者,我会说在你使用前向渲染时得到的像素/片段着色器中避免不必要的计算。 使用正向渲染时,即使像素颜色没有受到影响,您也必须为场景中的每个灯光进行传递。 但这只是前向渲染和延迟渲染之间的比较。

与将所有内容保存在同一个着色器程序中相反,我能想到的最简单的事情是,您不能限制在场景中使用N个灯,因为在例如GLSL中您可以使用单独的灯或将它们存储在一个统一的阵列中。然后你也可以使用前向渲染,但如果你的场景中有很多灯光,那么前向渲染会有一个太昂贵的像素/片段着色器。 这就是我真正知道的所以我也希望听到其他理论。

答案 1 :(得分:0)

当需要深度缓冲区的结果(通过渲染基本几何图形生成)时使用延迟/多遍方法,以便基于深度产生复杂的像素/片段阴影效果,例如:

  • 边缘/轮廓检测
  • 照明

还有应用逻辑:

  • GPU拾取,它需要深度缓冲区来进行射线计算,并在另一个缓冲区中使用唯一着色/ ID的几何图形来识别“谁”。