找出模型中包含非不透明纹理的Tris

Finding what Tris in a model that will contain non-opaque texels

本文关键字:纹理 Tris 不透明 包含非 模型      更新时间:2023-10-16

我在Blender中制作了一个角色模型,我正在用OpenGL渲染。模型的纹理大量使用alpha通道,我需要处理半透明的三角形(在这种情况下对它们进行深度排序)。

这意味着我需要发现这些将是哪些tris。我现在做的方法是非常非常缓慢地遍历模型中的每个三角形,使用三个顶点的UV坐标,首先检查纹理中的像素是否落在三角形中,然后检查它们中是否有不透明的。

对于2500 tris的单个模型,纹理大小为4096x4096,该过程大约需要一分钟。我认为实时加载时间太长了,因为有很多模型需要加载。

是否有一种更快的技术来确定透明三角的位置,速度足够快,可以实时使用?还是只需要事先预编译结果?

这似乎应该在运行时通过预先分解网格来避免。分离所有包含UV坐标的三角形,这些三角形包含一个半透明像素到它自己的网格中。然后在运行时对"半透明"网格的三角形进行深度排序。分离过程可以在将模型从交换格式编译为运行时格式时完成。

你可以假设在GPU上为每个三角形设置一个bool缓冲,初始化为false。然后编写一个片段着色器,检查当前片段的alpha值,如果是<1、设置对应三角形的bool值为true。这需要绘制场景,从GPU读取缓冲区,对标记的三角形进行排序,然后重新绘制场景。对于实时性能来说,这应该是可行的,但考虑到可以通过预先完成所有操作来避免整个过程,这似乎是浪费。