Meshlets
Meshlets
meshlet 就是一个网格(mesh)的子块——固定数量的图元和顶点。一个 mesh 可以完全由一组 meshlet 定义,每个 meshlet 由该 mesh 中一组唯一的图元组成。我们把已转换为 meshlet 结构的 mesh 称为已 meshletized(网格块化)的 mesh。
用于构建已 meshletized 网格的固定图元与顶点数量在整个 meshlet 列表中保持一致,并定义了每个 meshlet 的最大大小。理想情况下,每个 meshlet 都尽量接近这一大小,但并不一定要填满。传统的索引缓冲区被三种新的数据结构所取代:meshlet 列表、唯一顶点索引列表和图元列表。
图 1. 一个按 meshlet 着色的已 meshletized 网格(一条龙)的渲染结果。请注意 meshlet 由具备合理空间相关性的图元组成。
以下代码示例展示了运行时 meshlet 结构的 C++ 实现。该数据完整地描述了一个可渲染的网格。
这一 meshlet 结构对于网格着色器渲染有若干好处。每个 meshlet 都有固定的最大大小,非常适合将固定大小的线程组映射到单个 meshlet,同时提供了线程到顶点/图元的直观映射。顶点数和图元数是提前已知的,无需在着色器代码中计算。顶点索引已经去重,消除了冗余的顶点变换和导出。图元索引被局部化到该 meshlet 的顶点列表中。meshlet 还提供了带有空间和方向信息的额外剔除粒度。
前面的代码示例展示了新的 meshlet 缓冲区之间的相互关系。meshlet 列表是运行时 “meshlet” 结构的平面列表,至少包含指向唯一顶点索引列表和图元列表的偏移与计数。唯一顶点索引列表是指向顶点数据缓冲区的去重索引列表。图元列表定义了 mesh 的图元,并由指向唯一顶点索引列表的索引组成,这些索引局部化到该 meshlet 的顶点偏移。
图 2. 显示 meshlet 缓冲区之间关系的示意图。
最后修改于 2026年8月24日
