版本: Unity 6 (6000.0)
语言English
  • C#

VertexAttributeDescriptor

UnityEngine.Rendering 中的结构体

/

实现于:UnityEngine.CoreModule

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实阅读了用户提出的每个建议更改,并在适用时进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

关于网格顶点单个VertexAttribute的信息。

Mesh 顶点数据由不同的顶点属性组成。例如,一个顶点可以包含位置、法线、TexCoord0 和颜色。网格通常使用已知的格式进行数据布局,例如,位置最常见的是 3 分量的浮点向量(Vector3),但您也可以为网格指定非标准数据格式及其布局。

您可以使用VertexAttributeDescriptorMesh.SetVertexBufferParams中指定自定义网格数据布局。

顶点数据以单独的“流”布局(每个流进入底层图形 API 中的单独顶点缓冲区)。Unity 支持最多四个顶点流,但您通常只使用一个流。当某些顶点属性不需要处理或您需要为顶点属性提供特定的数据布局时,单独的流最为有用。

在每个流中,顶点的属性一个接一个地排列,顺序为:VertexAttribute.PositionVertexAttribute.NormalVertexAttribute.TangentVertexAttribute.ColorVertexAttribute.TexCoord0、...、VertexAttribute.TexCoord7VertexAttribute.BlendWeightVertexAttribute.BlendIndices

如果在顶点数据中包含BlendWeightBlendIndices 属性,请使用 Unity 的默认流布局,这样 Unity 不会重新排序顶点属性或在SkinnedMeshRenderer中错误地渲染顶点。

  1. 在第一个流中,添加VertexAttribute.PositionVertexAttribute.NormalVertexAttribute.Tangent
  2. 在第二个流中,添加VertexAttribute.Color 和从VertexAttribute.TexCoord0VertexAttribute.TexCoord7
  3. 在第三个流中,添加VertexAttribute.BlendWeightVertexAttribute.BlendIndices

第二个流中的所有属性都是可选的。如果未包含任何ColorTexCoord 属性,请改为将BlendWeightBlendIndices 添加到第二个流中。

并非所有formatdimension 组合都是有效的。具体来说,顶点属性的数据大小必须是 4 字节的倍数。例如,具有维度3VertexAttributeFormat.Float16 格式无效。其他资源:SystemInfo.SupportsVertexAttributeFormat

var mesh = new Mesh();
// specify vertex layout with:
// - floating point positions,
// - half-precision (FP16) normals with two components,
// - low precision (UNorm8) tangents
var layout = new[]
{
    new VertexAttributeDescriptor(VertexAttribute.Position, VertexAttributeFormat.Float32, 3),
    new VertexAttributeDescriptor(VertexAttribute.Normal, VertexAttributeFormat.Float16, 2),
    new VertexAttributeDescriptor(VertexAttribute.Tangent, VertexAttributeFormat.UNorm8, 4),
};
var vertexCount = 10;
mesh.SetVertexBufferParams(vertexCount, layout);

与该顶点布局匹配的 C# 结构体(用于Mesh.SetVertexBufferData)可能如下所示

[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
struct ExampleVertex
{
    public Vector3 pos;
    public ushort normalX, normalY;
    public Color32 tangent;
}

属性

attribute顶点属性。
dimension顶点属性的维度。
format顶点属性的格式。
stream属性所在的顶点缓冲区流。

构造函数

VertexAttributeDescriptor创建一个 VertexAttributeDescriptor 结构体。