3

我想列举一些一般的、基本的情况,在这些情况下,多通道渲染成为一种不可避免的必要性,而不是把所有东西都放在同一个着色器程序中。到目前为止,这是我想出的。

  • 当结果需要当前片段周围的非本地片段信息(即上下文)时,例如对于框过滤器,那么之前的传递必须提供此信息;
  • 当结果需要通过先前通道完成的硬件插值时;
  • 当结果充当某些计算集的预缓存时,其性能比简单地(重新)处理使用它们的那些通道中的整个计算集(例如,将深度缓冲区的每个片段转换为特定和昂贵的方式,然后多个后期着色器可以共享,而不是每个重复这些计算。所以,计算一次,多次使用。

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

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

4

2 回答 2

1

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

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

于 2015-01-31T13:12:38.113 回答
0

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

  • 边缘/轮廓检测
  • 灯光

还有应用逻辑:

  • GPU 拾取,这需要用于光线计算的深度缓冲区,以及另一个缓冲区中唯一颜色/ID 的几何图形,用于识别“谁”被击中。
于 2020-02-25T09:47:34.183 回答