顶点数据的元素称为顶点属性。
每个顶点可以具有以下属性
在内部,所有顶点数据都存储在相同大小的单独数组中。如果您的网格Unity 的主要图形基元。网格构成 3D 世界的很大一部分。Unity 支持三角形或四边形多边形网格。NURBS、NURMS、细分曲面必须转换为多边形。 更多信息
参见 词汇表包含一个具有 10 个顶点位置的数组,它还具有为其使用的每个其他顶点属性具有 10 个元素的数组。
在 C# 中,Unity 使用VertexAttribute枚举来描述可用的顶点属性。您可以使用Mesh.HasVertexAttribute函数检查 Mesh
类的实例是否具有给定的顶点属性。
顶点位置表示顶点在对象空间中的位置。
Unity 使用此值来确定网格的表面。
此顶点属性对于所有网格都是必需的。
在 Mesh
类中,访问此数据的最简单方法是使用Mesh.GetVertices和Mesh.SetVertices。Unity 还将此数据存储在Mesh.vertices中,但此旧属性效率较低且用户不友好。
顶点法线表示指向顶点位置处表面直接“向外”的方向。
Unity 使用此值来计算光线如何从网格表面反射。
此顶点属性是可选的。
在 Mesh
类中,访问此数据的最简单方法是使用Mesh.GetNormals和Mesh.SetNormals。Unity 还将此数据存储在Mesh.normals中,但此旧属性效率较低且用户不友好。
顶点切线表示指向顶点位置处表面“u”(水平纹理)轴沿方向的方向。
Unity 使用一个四分量向量将顶点切线与其他数据一起存储。向量的 x、y、z 分量描述切线,向量的 w 分量描述其方向。Unity 使用 w 值来计算副法线,它是切线和法线的叉积。
Unity 在法线贴图中使用切线和副法线值。
此顶点属性是可选的。
在 Mesh
类中,访问此数据的最简单方法是使用Mesh.GetTangents和Mesh.SetTangents。Unity 还将此数据存储在Mesh.tangents中,但此旧属性效率较低且用户不友好。
网格最多可以包含八组纹理坐标。纹理坐标通常称为UV,集合称为通道。
Unity 在将纹理“包裹”在网格周围时使用纹理坐标。UV 指示纹理的哪一部分与顶点位置处的网格表面对齐。
UV 通道通常称为第一个通道的“UV0”、第二个通道的“UV1”,依此类推,直到“UV7”。这些通道分别映射到着色器在 GPU 上运行的程序。 更多信息
参见 词汇表语义 TEXCOORD0
、TEXCOORD1
,依此类推,直到 TEXCOORD7
。
默认情况下,Unity 使用第一个通道 (UV0) 来存储常规纹理(如漫反射贴图和镜面反射贴图)的 UV。Unity 可以使用第二个通道 (UV1) 来存储烘焙的光照贴图预渲染的纹理,包含场景中静态对象上的光源效果。光照贴图叠加在场景几何体上以创建照明效果。 更多信息
参见 词汇表 UV,并使用第三个通道 (UV2) 来存储实时光照贴图 UV 的输入数据。有关光照贴图 UV 以及 Unity 如何使用这些通道的更多信息,请参见光照贴图 UV。
所有八个纹理坐标属性都是可选的。
在 Mesh
类中,访问此数据的最简单方法是使用Mesh.GetUVs和Mesh.SetUVs。Unity 还将此数据存储在以下属性中:Mesh.uv、Mesh.uv2、Mesh.uv3,依此类推,直到Mesh.uv8。请注意,这些旧属性效率较低且用户不友好。
顶点颜色表示顶点的基本颜色(如果有)。
此颜色独立于网格可能使用的任何纹理而存在。
此顶点属性是可选的。
在 Mesh
类中,访问此数据的最简单方法是使用Mesh.GetColors和Mesh.SetColors。Unity 还将此数据存储在Mesh.colors中,但此旧属性效率较低且用户不友好。
在蒙皮网格中,混合索引指示哪些骨骼会影响顶点,而骨骼权重则描述这些骨骼对顶点的影响程度。
在 Unity 中,这些顶点属性一起存储。
Unity 使用混合索引和骨骼权重根据其骨骼的运动来变形蒙皮网格。有关更多信息,请参见蒙皮网格渲染器。
这些顶点属性对于蒙皮网格是必需的。
过去,Unity 仅允许最多 4 根骨骼影响一个顶点。它将此数据存储在BoneWeight结构中,位于Mesh.boneWeights数组中。现在,Unity 允许最多 256 根骨骼影响一个顶点。它将此数据存储在BoneWeight1结构中,您可以使用Mesh.GetAllBoneWeights和Mesh.SetBoneWeights来访问它。有关更多信息,请阅读链接的 API 文档。