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

BlendShapeBufferLayout.PerVertex

建议更改

成功!

感谢你帮助我们提高 Unity 文档的质量。尽管无法接受所有提交内容,但我们确实会在用户处阅读每个建议的更改,并在适用情况下进行更新。

关闭

提交失败

你的建议更改因某种原因而无法提交。请在几分钟后再 尝试。并感谢你抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

按网格顶点对数据进行排序。

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

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

  • 表示此数据所关联混合形状的索引的整数。
  • 表示位置增量的 Vector3
  • 表示法向增量的 Vector3
  • 表示切线增量的 Vector3

在此缓冲区中,具体布局取决于网格顶点的数量。它的工作原理如下

  • 元素 0 到 (网格顶点数量 + 1) 包含索引。这些索引描述缓冲区其余部分中数据的起始和结束位置,按网格顶点顺序排列。例如,元素 0 是网格顶点 0 的数据的起始位置;元素 1 是网格顶点 0 的数据的结束位置和网格顶点 1 的数据的起始位置,依此类推。
  • 元素 (网格顶点数量 + 1) 描述最终网格顶点的数据的结束位置。
  • 之后,与每个网格顶点相关的混合形状顶点连续存储。例如,与网格顶点 0 关联的所有混合形状顶点将是连续的,其次是与网格顶点 1 关联的所有混合形状顶点,依此类推。

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

Unity 在首次创建网格时不会创建此缓冲区。相反,它会在首次访问时按需创建此缓冲区。这意味着在你第一次访问缓冲区时,会导致 CPU 和 GPU 内存分配。

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(); } }