我想在 Unity3D 中创建具有平面着色外观的程序化生成的景观网格体。
我认为最好为每个三角形创建三个唯一的顶点,并对顶点使用一个计算法线。构建此网格将导致冗余的顶点位置信息。(会对渲染时间产生影响吗?
无论如何。。。问题是我想在这个网格上使用着色技术,例如环境光遮蔽。我不想弄乱 Unity3D 对其着色器所期望的网格拓扑。
创建具有共享顶点的网格,添加自定义顶点属性(例如"flat_normal"并自定义着色器以使用它)是否更好?
简单的答案是
不
Unity 丝毫没有"寻找"共享的 vert。没有 3D 管线与共享顶点有任何关系。 无论如何,共享顶点都不会帮助或阻碍 3D 管道。
(很多时候,例如,当我们制作动态网格时,我们只是"根本不使用共享顶点",因为正如您可能已经发现的那样,不使用共享顶点通常要简单得多。
使用共享 vert 的唯一原因是,如果出于某种原因,它恰好让您更方便。 在这种情况下,3D 管线(Unity 或其他地方)"允许"共享顶点,没有缺点。
使用共享顶点可能有 2 个注意事项:
- 减少内存使用量。(只是轻微的,但如果您需要较少的 UV1、UV2、法线、顶点,它可以加起来)
- 以更方便地共享法线。(如果要保持表面光滑,只需更改顶点的一个法线。
这些都不是大原因,但与您遇到的其他 3D 程序中的大多数网格一样,最好习惯共享顶点。