多个传递着色器如何在HLSL中工作?

时间:2011-07-22 08:56:18

标签: xna

我是shaders和HLSL的新手,已经完成了BasicEffect类。我理解管道是如何工作的,特别是对于只有1遍的着色器。但是,如果使用2遍或N遍着色器,我不太明白2(或N)个着色器输出的结果如何组合。

您能解释一下该组合的用法吗?如果可能的话,您更喜欢使用多次通过着色器而不是多次单通着色器的示例?

2 个答案:

答案 0 :(得分:6)

多遍着色器只需将结果添加到上一个通道即可。它们可用于支持多个灯光,尤其是当GPU的着色器模型没有足够的指令来支持一次通过所需数量的灯光时。

除非你真的需要,否则我不建议使用多个传递,因为它会使alpha混合和雾等事情复杂化。您需要在第一次传递到后续传递时以不同方式设置混合状态。

[编辑]根据Melchior Blausand的评论,根据当前blend operationblend modes,将每次传递的输出与当前值组合更为正确,其中当前值为结合所有先前的传球的结果。多通道着色器通常使用ADD混合模式组合多个灯光。另请注意,Alpha通道可以与different blend modes组合到颜色通道。

答案 1 :(得分:0)

这完全取决于你,因为你必须在渲染网格本身之前调用BeginPass方法并循环遍历所有传递。这使您能够更改混合模式,甚至网格也不需要相同。

因此,通常,结果与使用单遍着色器渲染(不同)网格时的结果相同。