【发布时间】:2014-07-05 04:58:54
【问题描述】:
我有大量使用纹理来定义使用 Alpha 通道的形状的低多边形角色模型。 (例如眼镜,它只有 3 个实心大四边形,但纹理的 Alpha 通道定义了眼镜的形状)
所以有大量的透明度/半透明度正在进行,我估计每绘制一个三角形的四分之一,在需要混合的纹理中至少会有一点透明度。
大部分的透明度出现在头发中,它使几何形状非常接近并且有时会与自身相交。
我的问题,有没有办法获得合理的 alpha 混合行为,而不需要根据深度来排序绘制哪些 tris?我读过的大多数(旧)opengl 文档都说混合任何类型的透明度都需要排序,但我觉得在这种情况下,每帧都排序一次,成本太高。 (或者至少,超出了我无需花费数周时间就可以编写代码的能力)
如果重要的话,没有照明或顶点着色。结果不必准确,但如果可能的话,我希望它们在视觉上令人愉悦且一致。
【问题讨论】:
-
只有半透明对象才真正需要混合,而不是完全透明或完全不透明的对象。试试看,你可能只需要启用混合来渲染它,它就会完美地工作。资料来源:我已经处理过这个问题。
-
另外作为旁注,通常如果它们是半透明的,您可以只订购具有透明度的对象或面
-
@NathanWride - 它们的阴影非常柔和,因此不透明和透明之间的边缘非常模糊,但我可以尝试一下。我还在编写引擎,所以可能需要一段时间才能看到结果
-
在这种情况下,应该首先渲染绝对没有透明度的对象,然后再渲染透明对象。这将修复很多图形故障,之后的主要问题是排序不同的透明面,因为它们会根据您渲染的顺序混合。
-
我写了一个关于各种透明度渲染方法的概述来回答这个问题:stackoverflow.com/questions/23280692/…。