Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

VertexAttributeDescriptor

структура в UnityEngine.Rendering / Реализовано в: UnityEngine.CoreModule

Описание

Информация об одном 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.
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3