在什么情况下,多遍方法变得绝对必要?

Under what conditions does a multi-pass approach become strictly necessary?

我想列举那些普遍的、基本的情况,在这些情况下,多通道渲染成为不可避免的必要条件,而不是将所有内容都放在同一个着色器程序中。这是我到目前为止的想法。

我从我自己的(幼稚的)推论中注意到,顶点和几何着色器似乎并没有真正进入延迟渲染的画面,因此可能通常在第一遍中完成;对我来说这似乎是明智的,但是对此的肯定或否定,以及细节,将是有趣的。

P.S. 我将保留这个问题以收集好的答案,所以不要指望快速获胜!

不错的话题。对于我来说,因为我是初学者,所以我会说避免在使用前向渲染时获得的 pixel/fragment 着色器中进行不必要的计算。 使用正向渲染,即使像素颜色不受影响,您也必须对场景中的每盏灯都进行一次渲染。 但这只是前向渲染和延迟渲染之间的比较。

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

当需要深度缓冲区的结果(通过渲染基本几何体产生)以产生复杂的像素/片段着色效果时,使用延迟/多通道方法在深度上,例如:

  • 边缘/轮廓检测
  • 灯光

还有应用程序逻辑:

  • GPU 拾取,需要用于光线计算的深度缓冲区,以及用于识别 "who" 的另一个缓冲区中具有独特颜色/ID 的几何体被命中。