VertexAttributeDescriptor
структура в UnityEngine.Rendering
Выполнено в:UnityEngine.CoreModule
Описание
Информация об одной вершине VertexAttribute сетки.
Mesh данные вершин, состоящие из различных атрибутов вершины. Например, вершина может включать Положение, Нормальное, TexCoord0 и Цвет. Меши обычно используют известный формат для расположения данных, например, положение чаще всего представляет собой 3-компонентный вектор с плавающей запятой (Vector3), но вы также можете указать нестандартные форматы данных и их расположение для Меши.
Вы можете использовать VertexAttributeDescriptor для указания пользовательского расположения данных меши в Mesh.SetVertexBufferParams.
Данные вершин расположены в отдельных "потоках" (каждый поток попадает в отдельный буфер вершин в базовой графике API). Unity поддерживает до четырех потоков вершин, но обычно используется только один поток. Отдельные потоки наиболее полезны, когда некоторые атрибуты вершин не требуют обработки, или вам нужно дать атрибутам вершин определенное расположение данных.
В каждом потоке атрибуты вершины располагаются один за другим в следующем порядке: VertexAttribute.Position, VertexAttribute.Normal, VertexAttribute.Tangent, VertexAttribute.Color, VertexAttribute.TexCoord0,..., VertexAttribute.TexCoord7, VertexAttribute.BlendWeight, VertexAttribute.BlendIndices.
Если вы включаете атрибуты BlendWeight или BlendIndices в данные вершины, применяется следующее:
- Если вы используете макет, отличающийся от макета потока по умолчанию Unity, Unity может изменить порядок ваших атрибутов вершин или неправильно отобразить вершины в SkinnedMeshRenderer.
- Unity помещает позицию, нормаль и касательную в один и тот же поток вершин и использует формат
float32независимо от указанного формата.
- В первом потоке добавить ,VertexAttribute.Position,, ,VertexAttribute.Normal, и ,VertexAttribute.Tangent,.
- Во втором потоке добавить: VertexAttribute.Color, и VertexAttribute.TexCoord0 до VertexAttribute.TexCoord7.
- В третьем потоке добавить ,VertexAttribute.BlendWeight, и ,VertexAttribute.BlendIndices,.
Все атрибуты во втором потоке необязательны. Если вы не включаете ни одного атрибута, Color или TexCoord атрибуты, добавить BlendWeight и BlendIndices ко второму потоку вместо.
Не все format и dimension В частности, размер данных атрибута вершины должен быть кратным 4 байтам. Например, атрибут вершины должен иметь размер данных 4 байта. VertexAttributeFormat.Float16 формат с размером 3 дополнительные ресурсы: 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;
}Дополнительные ресурсы: ,Mesh.SetVertexBufferParams,, ,Mesh.SetVertexBufferData,, ,Mesh.GetVertexAttributes,.
Свойства
| Свойство | Описание |
|---|---|
| attribute | Атрибут вершины. |
| dimension | Размерность атрибута вершины. |
| format | Формат атрибута вершин. |
| stream | В каком потоке вершинного буфера должен находиться атрибут. |
Конструкторы
| Конструктор | Описание |
|---|---|
| VertexAttributeDescriptor | Создайте структуру VertexAttributeDescriptor. |