计算的网格在接缝上具有间隙

时间:2019-06-28 07:52:27

标签: unity3d rendering mesh

我计算出一个具有完全相同位置但加倍的顶点的立方体的网格,如下所示:

       +----+
      /    /
     /    /
Q0> +----+ <Q1
P0> +----+ <P1
    |    |
    |    |
    +----+

P0Q0具有完全相同的位置,但是是两个不同的顶点。 P1Q1相同。

我的着色器需要的是顶点处的单独元数据(UV0UV1,颜色,等等)。这就是为什么即使在同一位置,我也必须将顶点加倍。

也就是说,我的问题如下。在P0->P1Q0->Q1的接缝处呈现了一个间隔。它通常小于一个像素,但仍然可以感知。看看这张效果图拼贴:

Where the seams appear

我用4个蓝色箭头指出了这些工件。到BL角较小的图像是完美对准的相机,而较大的图像是倾斜的相机。

我没有抗锯齿(我需要像素化的艺术风格),并且纹理没有经过过滤且没有mipmap。如有必要,我可以提供纹理的完整设置。

我的问题是为什么这些假象会出现在成角度的三角形接缝上?三角形之间还有多个接缝,这些接缝是共面的,没有接缝可见。

UV在epsilon(像素的1/100)上方有一个很小的填充物,以减少纹理渗出。纹理位于阵列中,而不位于地图集中!

该算法基于int,并且仅基于Vector3float的网格构造。这意味着算法中不会存在任何舍入误差,这是非常简单的顺便说一句。

伪像必须是转换后到Vector3的来源,并且看起来像是舍入误差,但是我希望从硬件中确定顶点的位置会导致Peano-Jordan纹素完美对齐。

这是怎么回事,我该如何去除那些工件?

1 个答案:

答案 0 :(得分:0)

现在解决了。

首先,我将纹理设置为Clamp模式(它是Repeat)。那解决了问题。但是,按照绝对必要Repeat的方式在过程上生成网格。

因此,我必须删除Clamp(并将其设置回Repeat)。但是到那时,很清楚发生了什么:没有空隙,并且所有东西都是像素完美的。问题在于纹理填充,它是像素的1/100,因此太低了。我把它提高到一半像素,问题就消失了!

出于道德原因,我不会接受自己的回答,因此,此内容仅出于后代目的。