Per-cluster LOD record, CLUSTER_LOD_FLOATS floats each (parallel to clusters).
Number of LOD levels produced (1 = no hierarchy).
Per-cluster representative parent cluster id — one coarser cluster in the group that simplified this one, or NO_PARENT for a root. The streaming draw walks this chain to a resident ancestor when a cluster's own page is not yet resident (seamless LOD fallback, no hole). It's a single representative of the parent group (the DAG parent is a set), good because a group's parents tend to share a page.
Simplification-group id this cluster was a child of (NO_GROUP if none). All
clusters of a group share it — paging keeps them in one page so a parent's
childResident test is a single page lookup (S3c streaming cut).
Simplification-group id whose children are this cluster's children (NO_GROUP
for a finest-level cluster). Maps a parent to its child group.
Number of clusters (meshlets).
Interleaved vertex pool, VERTEX_STRIDE per vertex — the original mesh
vertices, shared by all clusters. Cluster local indices resolve into this
via meshletVertices.
Cluster-local → global vertex index, indexed by cluster.vertexOffset + localVertex.
The value indexes a vertex (not a float) in vertexData.
Triangle corner → cluster-local vertex index (0..vertexCount), indexed by
cluster.triangleOffset + tri*3 + corner. Widened from meshopt's u8 table
to u32 because WGSL storage buffers can't index sub-word.
Packed cluster descriptors, CLUSTER_DESC_FLOATS floats each.
Total triangles across all clusters (== input triangle count).
Overall local-space bounding sphere of the whole mesh.
A ClusterData augmented with the LOD-DAG records.