Unity 6.3
0 онлайн 83 гостей 3 в системе
Вход

Mesh.GetVertexBuffer

Declaration

public GraphicsBuffer GetVertexBuffer(int index);

Параметры

Параметр Описание
индекс Индекс потока данных вершины, для которого будет получен буфер.

Возвращаемое значение

GraphicsBuffer Буфер вершин сетки как GraphicsBuffer.

Описание

Получает GraphicsBuffer, который предоставляет прямой доступ к буферу вершин GPU.

Большинство методов Mesh работают с CPU копией данных сетки, которую Unity затем загружает в GPU. Например, SetIndexBufferData модифицирует CPU копию данных, а UploadMeshData отправляет CPU копию данных в GPU.

Вы можете получить доступ к GPU копии вершинного буфера непосредственно с помощью GetVertexBuffer. Это позволяет более непосредственно манипулировать данными индекса сетки на GPU, что потенциально может повысить производительность. Однако любые изменения, которые вы делаете в данных индекса таким образом, не будут отражены в CPU копии данных сетки.

Вы также можете использовать этот метод, чтобы сделать вершинный буфер доступным для чтения или записи в ComputeShader. Чтобы сделать это, сначала запросите соответствующую цель привязки буфера через vertexBufferTarget, затем получите данные сетки с помощью GetVertexBuffer, а затем установите их в качестве параметра для своих шейдеров с помощью ComputeBuffer.SetBuffer, Material.SetBuffer и аналогичных методов.

GetVertexBufferStride, GetVertexAttributeOffset и связанные с ними методы могут быть использованы для запроса точного расположения и формата вершин данных сетки, так чтобы вычислительный шейдер мог получить к ним правильный доступ.

Если вы измените копию данных CPU, это может привести к повторному созданию буферов вершин GPU; в этом случае вы должны снова вызвать GetVertexBuffer.

using UnityEngine;

public class ExampleScript : MonoBehaviour { public Mesh mesh; public ComputeShader computeShader; void Start() { // Mark the vertex buffer as needing "Raw" // (ByteAddressBuffer, RWByteAddressBuffer in HLSL shaders) // access. mesh.vertexBufferTarget |= GraphicsBuffer.Target.Raw; // Get the vertex buffer of the Mesh, and set it up // as a buffer parameter to a compute shader. var vertexBuffer = mesh.GetVertexBuffer(0); computeShader.SetBuffer(0, "MeshVertexBuffer", vertexBuffer); vertexBuffer.Dispose(); } }

Дополнительные ресурсы: ,GetIndexBuffer,, ,vertexBufferTarget,.