是否可以使用指定的Alpha混合多个渲染目标?


9

假设我具有从0到N的渲染目标,而RT 0的第四部分恰好具有由材质或蒙版或其他东西指定的alpha通道。

硬件合成器是否可以使用第一个渲染目标的alpha混合渲染目标1到N?

Answers:


5

据我所知,DX或GL中都没有办法将RT 0的alpha重新用于所有混合操作。不幸的是,它似乎并不受硬件支持。

您可以为每个渲染目标配置不同的混合模式,或者为某些渲染目标启用混合,而对其他渲染目标禁用;但是,如果为渲染目标启用了混合,则它始终使用自己的Alpha。

还有一种称为“双源混合”的模式(请参阅DX11 docOGL doc),该模式允许您指定用于与像素着色器完全独立的输出进行混合的alpha,而不是渲染目标的alpha通道。但是,此模式仅适用于当前硬件上的一个渲染目标。

据我所知,将多个渲染目标与相同的Alpha混合的唯一选项是:

  • 在所有渲染目标上输出相同的Alpha(例如,与在延迟着色中一样,可以将其他值存储到Alpha通道中的功能)。
  • 使用双源混合,在每个渲染目标的单独遍历中重复渲染。
  • 使用UAV /图像加载存储在像素着色器中执行混合(仅在几何形状在屏幕空间中非自重叠的情况下才有效,因为没有针对竞争条件的保护;也可能有点慢)。
  • 在支持该功能的硬件上,可以使用DX11.3 / DX12 Rasterizer-Order视图NV_fragment_shader_interlockINTEL_fragment_shader_ordering(后者也由AMD GPU公开)。这是同一事物的三个名称:基本上是像素着色器中的“关键部分”,使您可以相对于其他像素着色器调用以原子方式读取,修改,写入纹理。它本质上支持任意可编程混合,但是它可能相当慢,并且仅在最新的硬件上可用。

是的,我想这也是我的结论。您是否知道DX12或(未发布的)Vulkan是这种情况吗?正如您所提到的,它具有用于延迟渲染的相当大的应用程序,并且目前没有任何替代方法看起来令人满意。
jeremyong 2015年

@jeremyong对不起,我认为DX12中的混合操作没有任何变化。不确定Vulkan,但我会感到惊讶。混合硬件没有改变。FWIW,在我从事的游戏中,我们为延后的贴花制作了第3号项目符号的变体,并对几何进行了预处理,以将其分为不重叠的组。
内森·里德

谢谢您的推荐。递延贴花恰恰是我执行什么
jeremyong
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.