Описание
Информация об одном VertexAttribute вершины Mesh.
Данные вершин Mesh, состоящие из различных атрибутов вершин. Например, вершина может включать в себя Position, Normal, TexCoord0 и Color. Меши обычно используют известный формат для размещения данных, например, позиция чаще всего представляет собой 3-компонентный вектор с плавающей запятой (Vector3), но вы также можете указать нестандартные форматы данных и их расположение для сетки(Mesh).
Вы можете использовать VertexAttributeDescriptor
, чтобы указать пользовательский макет данных сетки в Mesh.SetVertexBufferParams.
Данные вершин размещаются в отдельных «потоках» (каждый поток переходит в отдельный буфер вершин в базовом графическом API). Хотя Unity поддерживает до 4 потоков вершин, в большинстве сеток используется только один. Отдельные потоки наиболее полезны, когда некоторые атрибуты вершин не нужно обрабатывать, например, скинированные сетки часто используют два потока вершин (один содержит все скинированные данные: положения, нормали, касательные; в то время как другой поток содержит все данные без скина: цвета и координаты текстуры).
Внутри каждого потока атрибуты вершины выкладываются друг за другом в следующем порядке: VertexAttribute.Position, VertexAttribute.Normal, VertexAttribute.Tangent, VertexAttribute.Color, VertexAttribute.TexCoord0, ..., VertexAttribute.TexCoord7, VertexAttribute.BlendWeight, VertexAttribute.BlendIndices.
Не все комбинации format и dimensionдопустимы. В частности, размер данных атрибута вершины должен быть кратен 4 байтам. Например, формат VertexAttributeFormat.Float16 с размером 3
недопустим. Смотрите так же: SystemInfo.SupportsVertexAttributeFormat.
var mesh = new Mesh();
// укажите макет вершины с помощью:
// - позиции с плавающей запятой,
// - нормали половинной точности (FP16) с двумя компонентами,
// - касательные низкой точности (UNorm8)
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;
}
Смотрите так же: Mesh.SetVertexBufferParams, Mesh.SetVertexBufferData, Mesh.GetVertexAttributes.
Свойства
attribute | Атрибут вершины. |
dimension | Размерность атрибута вершины . |
format | Формат атрибута вершины. |
stream | В каком потоке буфера вершин должен находиться атрибут. |
Конструкторы
VertexAttributeDescriptor | Создаёт структуру VertexAttributeDescriptor. |