Documentation

Unity Engine


User Manual

Script Reference

Unity Engine


GetBoneWeightBuffer(SkinWeights)

Retrieves a GraphicsBuffer that provides direct read and write access to GPU bone weight data.
Read time 1 minuteLast updated 4 days ago

Definition

  • Type: Method
  • Namespace: UnityEngine
  • Assembly: UnityEngine.CoreModule
public GraphicsBuffer GetBoneWeightBuffer(SkinWeights layout)

Parameters

Which buffer to access, based on maximum bones per vertex.

Returns

Type

Description

GraphicsBufferThe bone weight data as a GraphicsBuffer.

Remarks

The buffer that this function returns is called the bone weight buffer. It contains indices and weights to use for skinning.
To know which buffer the mesh is using, call Mesh.skinWeightBufferLayout.
It is possible to access the buffer with a lower SkinWeigts setting, for instance a mesh with SkinWeights.Unlimited can be accessed with SkinWeights.FourBones and SkinWeights.TwoBones. However, a mesh with SkinWeights.FourBones can not be accessed using SkinWeights.Unlimited.
Mesh.isReadable does not need to be
true
to access this data.
After using this buffer, you should dispose of it.
using UnityEngine;public class Example : MonoBehaviour{ public Mesh mesh; public ComputeShader computeShader; void Start() { // Fetch GraphicsBuffer with Bone Weight data var boneWeightBuffer = mesh.GetBoneWeightBuffer(mesh.skinWeightBufferLayout); // Set Bone Weight data to a compute shader computeShader.SetBuffer(0, "BoneWeightBuffer", boneWeightBuffer); // Dispatch compute shader and access Bone Weight data on the GPU computeShader.Dispatch(0, 64, 1, 1); // Dispose of GraphicsBuffer to avoid leaking memory boneWeightBuffer .Dispose(); }}
Additional Resources: skinWeightsBufferLayout, Mesh.GetBlendShapeBuffer