我必须在 Unity 的网格中使用共享顶点吗?

Do I have to use shared vertices in mesh in Unity?

我想在 Unity3D 中创建程序生成的具有平坦阴影外观的景观网格。

我认为最好为每个三角形创建 三个唯一的顶点 并为顶点使用一个计算法线。构建此网格会导致冗余的顶点位置信息。 (它会影响渲染时间吗?)

无论如何...问题是我想使用着色技术,例如此网格上的环境光遮挡。我不想弄乱 Unity3D 对其着色器期望的网格拓扑。

创建具有共享顶点的网格是否更好,也许添加一个自定义顶点属性,例如'flat_normal' 并自定义着色器以使用它?

简单的答案是

没有,

Unity 丝毫没有“寻找”共享版本。没有 3D 管道与共享顶点有任何关系。共享顶点根本不会帮助或阻碍 3D 管道。

(很多时候,例如,当我们制作动态网格时,我们只是“根本不使用共享顶点”,因为正如您可能已经发现的那样, 使用共享顶点。)

使用共享顶点的一个也是唯一的原因是,出于某种原因,它恰好使您更方便。在那种情况下,3D 管道(Unity 或其他地方)“允许”共享顶点,没有任何缺点。

使用共享顶点可能有 2 个注意事项:

  • 减少内存使用。 (只有一点点,但如果你需要更少的 UV1、UV2、法线、顶点,它可以加起来)
  • 让分享法线更方便。 (如果你想保持表面光滑,你只需要改变顶点的一个法线。)

这些都不是什么大的原因,但是由于您遇到的大多数来自其他 3D 程序的网格,最好习惯共享顶点。