为什么我们在混合中禁用Z-write

时间:2015-04-16 17:33:12

标签: opengl blending depth-buffer

在混合中,我们首先绘制不透明对象,并启用z-write和test。然后我们禁用z-write并启用测试以绘制半透明对象。在绘制半透明对象时,我们将它们拉回到前面的顺序,那么为什么我们需要禁用写入z-buffer?

2 个答案:

答案 0 :(得分:2)

因为如果不这样做,它们会阻碍稍后将被绘制到场景中的其他半透明对象,甚至是同一对象的部分。你将它们拉回到前面的事实并不意味着阻碍不能发生。

如果要绘制具有某种内部结构的对象,则如果首先渲染外部曲面,则不会渲染。类似的事情可能发生在凹形物体上。此外,从前到后排序并不总是很容易构建,特别是如果场景中有交叉或交织的对象

答案 1 :(得分:0)

如果严格渲染到前面,则无需禁用深度写入。我可以想到你可能想要禁用它的几个原因:

  1. 排序并不是很完美。虽然您以任何一种方式获得了错误的渲染结果,但直观地说,以错误的顺序混合会导致不完全消除几何体的不明显的伪像。因此,禁用深度写入很可能会减少不完美排序的错误。在一般情况下,完美排序是非平凡的,甚至可能需要分割多边形。有关困难的详细信息,请参阅我的答案:Some questions about OpenGL transparency

  2. 避免深度写入可以提高效率。我怀疑这将是非常重要的。但一般来说,避免做不必要的工作总是一个好主意。由于在这种情况下写入深度肯定不是需要,所以你也可以跳过它。