【问题标题】:Unity programmatic mesh has some smooth edges and some jagged edgesUnity 程序化网格有一些光滑的边缘和一些锯齿状的边缘
【发布时间】:2020-07-05 23:02:37
【问题描述】:

初学者问题:我正在尝试在统一网格中绘制一个“整洁”的三角形 - 即如果我将其做得足够大,边缘看起来相对均匀。给定一个以编程方式创建的网格 (https://catlikecoding.com/unity/tutorials/rounded-cube/),材质简单,颜色变化,我选择顶面上的几个顶点并更改它们的高度:

private void DrawStuff()
{
    int width = xSize - 2;
    int height = zSize - 2;
    int margin = 5;

    int vStart = topStartVertex + (width * margin) + margin + margin;
    DrawTriangle(vStart, 10, 10, 10);
}


private void DrawTriangle(int v, int height, int width, int depth)
{
    int offset = 0;
    for (int i = 0; i < height; i++)
    {
        for (int j = 0 + offset; j < width - offset; j++)
        {
            vertices[v + i * (xSize - 1) + j][1] = ySize - depth;
        }
        offset += 1;
    }
}

但是,三角形的边缘看起来并不完全相同——有些是平滑的,有些是锯齿形的。我会期望其中之一,但不是两者兼而有之。在绘制一个矩形,甚至是一条简单的线时,我注意到了同样的行为。

这是渲染工件、照明还是其他东西?有没有一种简单的方法来修复它 - 即使边缘保持一致,无论是平滑还是锯齿状(最好是平滑)?

我阅读了其他一些关于网格平滑的类似问题,但我认为它们与我所问的不同:

【问题讨论】:

    标签: unity3d rendering mesh


    【解决方案1】:

    这是由于网格边缘未与您尝试绘制的边缘对齐。

    在下图中,蓝色为低海拔顶点,红色为高海拔顶点(由于时间原因,并非所有顶点/边/面都被标记)。

    所有 3 个顶点都处于相同高度的面具有完全水平的表面。请注意,由于没有网格边缘与三角形挤出的一侧沿相同方向,因此存在锯齿状外观,因为有成对的三角形高度相同。

    可以解决此问题的一种简单方法是细分三角形,以便边缘也沿着您想要边缘的方向移动:

    但显然,这只允许您在另一个方向上制作边缘。即便如此,这也是非常必要的,因为您实际上可以根据需要更改曲面仅沿挤出部分细分的方式:

    TLDR:您需要沿着要使用网格制作的边缘进行网格边缘。

    【讨论】:

      猜你喜欢
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      相关资源
      最近更新 更多