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

Mesh.GetNativeVertexBufferPtr

Объявление

public IntPtr GetNativeVertexBufferPtr(int index);

Параметры

index Какой буфер вершин получить (некоторые меши могут иметь более одного). См. раздел vertexBufferCount.

Возвращает

IntPtr Указатель на базовый буфер вершин графического API.

Описание

Получает собственный (основной графический API) указатель на буфер вершин.

Используйте эту функцию для извлечения указателя/дескриптора, соответствующего буферу вершин сетки, как он представлен в собственном графическом API. Это можно использовать для включения манипулирования Mesh из плагинов собственного кода.

Большинство сеток содержат только один буфер вершин, но некоторые (например, скинированные сетки на некоторых платформах) могут содержать более одного. Используйте vertexBufferCount, чтобы запросить количество буферов вершин.

Разметка данных в буфере вершин обычно зависит от ряда факторов, особенно для сжатых мешей (см. Настройки проигрывателя > Настройки сжатия мешей) и помеченных как нечитаемый. В простом случае схема выглядит следующим образом:

позиция float3 (12 байт)
обычное значение float3 (12 байт)
byte4 color32 (4 байта) или float4 color (16 байт)
float2|float3|float4 uv (8, 12 или 16 байт)
float2|float3|float4 uv2 (8, 12 или 16 байт)
float2|float3|float4 uv3 (8, 12 или 16 байт)
float2|float3|float4 uv4 (8, 12 или 16 байт)
тангенс float4 (16 байт)

Все вершинные компоненты являются необязательными, например, сетка может содержать только позицию + нормаль + одну координату 2D-текстуры. В этом случае размер данных вершин в буфере будет 12+12+8=32 байта.

Вы можете использовать HasVertexAttribute, GetVertexAttributeOffset, GetVertexBufferStride методы для запроса информации о расположении атрибутов вершин сетки.

Тип возвращаемых данных зависит от базового графического API:

  • ID3D11Buffer on D3D11
  • ID3D12Resource on D3D12
  • id on Metal
  • buffer "name" (as GLuint) on OpenGL/ES
  • internal representation on Vulkan, that should be accessed via IUnityGraphicsVulkan interface

В большинстве случаев (например, при записи данных сетки из собственного кода) перед получением собственного буфера необходимо пометить сетку как "динамическую" (см. MarkDynamic). указатель. Как правило, это переключает буферы на запись ЦП.

Обратите внимание, что вызов этой функции при использовании многопоточного рендеринга будет синхронизироваться с потоком рендеринга (медленная операция), поэтому рекомендуется устанавливать необходимые указатели на буфер только во время инициализации.

Смотрите так же: Native code plugins, GetNativeIndexBufferPtr, vertexBufferCount, vertexCount.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3