Unity程序化网格具有一些平滑的边缘和一些锯齿状的边缘

时间:2020-07-05 23:02:37

标签: unity3d rendering mesh

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

String.prototype.countCharacter = function(char) {
  return [...this].filter(c => c === char).length;
}

// Complete the repeatedString function below.
function repeatedString(s, n) {

  const l = s.length,
        repeatsRequired = Math.ceil(n / l),
        charsRequired = repeatsRequired * l,
        numCharsInLastRepeat = l - (charsRequired % n);

  const a_s = s.countCharacter('a'),
        a_r = s.slice(0, numCharsInLastRepeat).countCharacter('a');

  return a_s * (repeatsRequired - 1) + a_r;
}

console.log(repeatedString('aba', 10)); // 7
console.log(repeatedString('a', 1000000000000)); // 1000000000000

但是,三角形的边缘看起来并不一样-有些光滑,有些则呈锯齿状。我期望一个或另一个,但不能两个都选。在绘制矩形甚至是简单的线条时,我注意到相同的行为。

这是渲染伪像,照明还是其他?有没有简单的方法可以修复它-即使边缘一致,无论是平滑的还是锯齿状的(最好是平滑的)?

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

enter image description here

1 个答案:

答案 0 :(得分:2)

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

在下图中,看到蓝色的是低海拔顶点,红色的是高海拔顶点(为了节省时间,并非所有顶点/边/面都被标记了)。

Diagram Showing the triangles and the heights of faces & vertices

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

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

same as above but subdivided

但是显然,这仅允许您在另一个方向上制作边缘。甚至这还超出了必要,因为您实际上可以根据需要更改仅沿拉伸的各个部分细分曲面的方式:

low poly version

TLDR:沿着网格要制作的边缘需要网格边缘。