版本:Unity 6 (6000.0)
语言English
  • C#

BlendShapeBufferLayout.PerShape

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有投稿,但我们会阅读用户建议的每项更改并酌情更新。

关闭

提交失败

由于某些原因无法提交您建议的更改。请在几分钟后<a>重试</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

说明

按混合形状排序数据。

当使用此选项调用 Mesh.GetBlendShapeBuffer 时,它会返回一个 GraphicsBuffer,其中包含按混合形状排序的混合形状顶点数据。

在此缓冲区中,每个混合形状顶点包括

  • 一个整数,表示此数据相关的网格顶点的索引。
  • 一个 Vector3,表示位置增量。
  • 一个 Vector3,表示法线增量。
  • 一个 Vector3,表示切线增量。

在此缓冲区中,每个混合形状顶点的数据都是连续的。数据布局如下所示

* 属于单个混合形状的所有混合形状顶点按顺序存储,其次是属于另一个混合形状的所有混合形状顶点,依此类推

连续的混合形状顶点数据存储为一个 32 位值数组。您必须手动将数据转换为适当的类型。

要确定哪些数据与哪些混合形状相关,请使用 Mesh.GetBlendShapeBufferRange

Unity 在创建网格时创建此缓冲区。访问此缓冲区不会导致其他内存分配。

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 shape, from the mesh var perShapeBuffer = mesh.GetBlendShapeBuffer(BlendShapeBufferLayout.PerShape);

// Set Blend Shape data buffer to a compute shader computeShader.SetBuffer(0, "PerShape_BlendShapeBuffer", perShapeBuffer);

// Dispatch compute shader and access Blend Shape Data on the GPU computeShader.Dispatch(0, 64, 1, 1);

// Dispose of GraphicsBuffer to avoid leaking memory perShapeBuffer.Dispose(); } }

其他资源:网格数据:混合形状Mesh.GetBlendShapeBuffer,UnityEngine.BlendShapeBufferRange。