Order the data by mesh vertex.
When you call Mesh.GetBlendShapeBuffer with this option, it returns a GraphicsBuffer containing blend shape vertex data ordered by mesh vertex.
In this buffer, each blend shape vertex comprises:
In this buffer, the exact layout depends on the number of mesh vertices. It works as follows:
The contiguous blend shape vertex data is stored as an array of 32-bit values. You must manually convert the data to an appropriate type.
Unity does not create this buffer when it first creates the mesh. Instead, it creates this buffer on-demand, the first time you access it. This means that the first time you access the buffer, it results in CPU and GPU memory allocations.
using UnityEngine; using UnityEngine.Rendering;
public class Example : MonoBehaviour { public Mesh mesh; public ComputeShader computeShader;
void Start() { // Fetch GraphicsBuffer with Blend Shape data, ordered per vertex, from the mesh var perVertexBuffer = mesh.GetBlendShapeBuffer(BlendShapeBufferLayout.PerVertex);
// Set Blend Shape data buffer to a compute shader computeShader.SetBuffer(0, "PerVertex_BlendShapeBuffer", perVertexBuffer);
// Dispatch compute shader and access Blend Shape Data on the GPU computeShader.Dispatch(0, 64, 1, 1);
// Dispose of GraphicsBuffer to avoid leaking memory perVertexBuffer.Dispose(); } }
Additional resources: Mesh data: blend shapes, Mesh.GetBlendShapeBuffer, QualitySettings.skinWeights.