代码之家  ›  专栏  ›  技术社区  ›  meds

DirectX Alpha混合(延迟渲染)

  •  2
  • meds  · 技术社区  · 14 年前

    我有一个大问题一直困扰着我。

    我的问题是我的游戏使用了一个延迟渲染引擎,这使得很难进行阿尔法混合。

    我能想到的解决这个问题的唯一方法是在没有任何alphas对象的情况下渲染场景(包括深度贴图、法线贴图和漫反射贴图)。

    然后,对于每个具有alpha组件纹理的多边形,禁用Z缓冲区并将其渲染出来,包括法线、深度和颜色,并且在alpha为“0”的位置,不将任何内容输出到深度、法线和颜色缓冲区。对这两个单独的纹理执行照明计算/其他延迟效果,然后使用深度贴图组合颜色缓冲区,以检查哪些像素可见。

    这一想法将是极其昂贵的(更不用说有一些严重的缺点),这样做显然应该只保留尽可能少的情况,这使得森林地区不存在问题。但是,如果没有更好的解决方案,我有一个问题。

    当使用DirectX进行alpha混合时,我是否可以设置一个明暗器/设备状态,这样我可以避免在需要时写入深度/正常/颜色缓冲区?问题是像素着色程序必须输出到指定的所有渲染目标,因此如果设置为输出到3个渲染目标,则必须执行该操作,这将覆盖纹理中该texel的先前颜色值。

    如果没有允许我执行此操作的混合状态,则意味着我必须复制“法线”、“纹理”和“深度”贴图以保留场景,然后渲染到新的“纹理”、“深度”和“法线”贴图,然后根据“Alpha”和“深度”值组合这两个纹理。

    我想我真正想要的是,如果有一个简单的确定火和可能廉价的方法来渲染阿尔法在一个延迟渲染?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Dr. Snoopy    14 年前