在什么情况下,多遍方法变得绝对必要?
Under what conditions does a multi-pass approach become strictly necessary?
我想列举那些普遍的、基本的情况,在这些情况下,多通道渲染成为不可避免的必要条件,而不是将所有内容都放在同一个着色器程序中。这是我到目前为止的想法。
- 当结果需要当前片段周围的非本地片段信息(即上下文)时,例如对于盒式过滤器,那么之前的传递一定已经提供了这个;
- 当结果需要通过先前的通道完成硬件插值时;
- 当结果充当某些计算集的预缓存时,与在使用它们的那些传递中简单地(重新)处理整个计算集相比,可以实现更好的性能,例如以特定且昂贵的方式转换深度缓冲区的每个片段,然后多个后续着色器可以共享,而不是每个都重复这些计算。所以,计算一次,使用不止一次。
我从我自己的(幼稚的)推论中注意到,顶点和几何着色器似乎并没有真正进入延迟渲染的画面,因此可能通常在第一遍中完成;对我来说这似乎是明智的,但是对此的肯定或否定,以及细节,将是有趣的。
P.S. 我将保留这个问题以收集好的答案,所以不要指望快速获胜!
不错的话题。对于我来说,因为我是初学者,所以我会说避免在使用前向渲染时获得的 pixel/fragment 着色器中进行不必要的计算。
使用正向渲染,即使像素颜色不受影响,您也必须对场景中的每盏灯都进行一次渲染。
但这只是前向渲染和延迟渲染之间的比较。
与将所有内容都保留在同一个着色器程序中相反,我能想到的最简单的事情是您不限于在场景中使用 N 个灯光,因为例如在 GLSL 中您可以使用单独的灯或将它们存储在统一的阵列中。然后你也可以使用正向渲染,但是如果你的场景中有很多灯光,正向渲染的着色器太昂贵了 pixel/fragment。
这就是我真正知道的,所以我也想听听其他理论。
当需要深度缓冲区的结果(通过渲染基本几何体产生)以产生复杂的像素/片段着色效果时,使用延迟/多通道方法在深度上,例如:
- 边缘/轮廓检测
- 灯光
还有应用程序逻辑:
- GPU 拾取,需要用于光线计算的深度缓冲区,以及用于识别 "who" 的另一个缓冲区中具有独特颜色/ID 的几何体被命中。
我想列举那些普遍的、基本的情况,在这些情况下,多通道渲染成为不可避免的必要条件,而不是将所有内容都放在同一个着色器程序中。这是我到目前为止的想法。
- 当结果需要当前片段周围的非本地片段信息(即上下文)时,例如对于盒式过滤器,那么之前的传递一定已经提供了这个;
- 当结果需要通过先前的通道完成硬件插值时;
- 当结果充当某些计算集的预缓存时,与在使用它们的那些传递中简单地(重新)处理整个计算集相比,可以实现更好的性能,例如以特定且昂贵的方式转换深度缓冲区的每个片段,然后多个后续着色器可以共享,而不是每个都重复这些计算。所以,计算一次,使用不止一次。
我从我自己的(幼稚的)推论中注意到,顶点和几何着色器似乎并没有真正进入延迟渲染的画面,因此可能通常在第一遍中完成;对我来说这似乎是明智的,但是对此的肯定或否定,以及细节,将是有趣的。
P.S. 我将保留这个问题以收集好的答案,所以不要指望快速获胜!
不错的话题。对于我来说,因为我是初学者,所以我会说避免在使用前向渲染时获得的 pixel/fragment 着色器中进行不必要的计算。 使用正向渲染,即使像素颜色不受影响,您也必须对场景中的每盏灯都进行一次渲染。 但这只是前向渲染和延迟渲染之间的比较。
与将所有内容都保留在同一个着色器程序中相反,我能想到的最简单的事情是您不限于在场景中使用 N 个灯光,因为例如在 GLSL 中您可以使用单独的灯或将它们存储在统一的阵列中。然后你也可以使用正向渲染,但是如果你的场景中有很多灯光,正向渲染的着色器太昂贵了 pixel/fragment。 这就是我真正知道的,所以我也想听听其他理论。
当需要深度缓冲区的结果(通过渲染基本几何体产生)以产生复杂的像素/片段着色效果时,使用延迟/多通道方法在深度上,例如:
- 边缘/轮廓检测
- 灯光
还有应用程序逻辑:
- GPU 拾取,需要用于光线计算的深度缓冲区,以及用于识别 "who" 的另一个缓冲区中具有独特颜色/ID 的几何体被命中。