HLSL多次传递模糊(RTT?)

时间:2012-06-18 15:35:28

标签: hlsl render-to-texture

我尝试建立一个复杂的水着色器(我从互联网上的一个例子中得到了水着色器)。 现在我想添加一些功能,将图案网格混合到模糊的水中。 Atm水和模糊工作,但当我尝试通过一些随机化建立模糊效果...我用于着色器的许多指令...... :(

我搜索了诸如“hlsl multiple passes”,“hlsl render to texture”,“hlsl multiple passes without texture”之类的主题,因为我没有现有的“地面”纹理。

我从普通地图和环境地图中建立水,现在......是否有可能从第一次传递到第二次传递获得“整个地图/纹理/着色器数据”? 因为当我只执行两次传球时,第一次传球的颜色被完全覆盖:(

我希望你们能够理解我的问题,并获得你需要的所有信息。

如果你能帮助我会很好。

...谢谢

1 个答案:

答案 0 :(得分:1)

您可以尝试为着色器模型3.0进行编译。它允许使用更多说明。

如果要执行多次传递,则不必使用渲染进行定位。您应该启用Alpha混合以防止覆盖以前的颜色。

但是,如果您需要对上一个传递的输出进行采样,则无法使用此功能。在这种情况下,您需要2个纹理(A和B,都创建为渲染目标)。请按照以下步骤操作:

  1. 将渲染目标设置为纹理A.
  2. 渲染第一遍。
  3. 将渲染目标设置为纹理B(如果您不需要在以下渲染过程中对纹理B进行采样,则设置为最终渲染目标)。
  4. 使用纹理A设置hlsl采样器(例如,使用ID3DXEffect :: SetTexture)。
  5. 渲染第二遍(使用纹理A进行采样)。
  6. 如果你有超过2次传球,交换A和B并执行步骤3.-5。每次通过。