0

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

我搜索了诸如“hlsl 多次传递”、“hlsl 渲染到纹理”、“没有纹理的 hlsl 多次传递”之类的主题,因为我没有现有的“地面”纹理。

我从法线贴图和环境贴图构建水,现在......是否有可能从第一次传递到第二次传递这个“整个贴图/纹理/着色器数据”?因为当我只执行两遍时,第一遍的颜色会被完全覆盖:(

我希望你们能理解我的问题并拥有您需要的所有信息。

如果你能帮助我就好了。

谢谢...

4

1 回答 1

1

您可以尝试为着色器模型 3.0 编译。它允许使用更多指令。

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

但是,如果您需要对上一次传递的输出进行采样,这将不起作用。在这种情况下,您需要 2 个纹理(A 和 B,均创建为渲染目标)。按着这些次序:

  1. 将渲染目标设置为纹理 A。
  2. 渲染第一遍。
  3. 将渲染目标设置为纹理 B(或最终渲染目标,如果您不需要在以下渲染过程中对纹理 B 进行采样)。
  4. 使用纹理 A 设置 hlsl 采样器(例如,使用 ID3DXEffect::SetTexture)。
  5. 渲染第二遍(使用纹理 A 进行采样)。

如果您有超过 2 次通过,交换 A 和 B 并执行步骤 3.-5。每次通过。

于 2012-06-18T19:22:51.927 回答