public record class MeshletMeshA mesh as a cluster DAG: every level of detail at once, and the cut that picks one.
No guide page documents this yet — the page shows what the code says about itself.
Remarks
What MeshletBuilder produces and what phase 2 pages into the device. The indirection is two deep on purpose: Triangles holds one byte per corner indexing a cluster's own vertex list, and Vertices maps that list into the source mesh's vertex arrays. A cluster is therefore relocatable — its triangles say nothing about where its vertices ended up — which is what a page pool that evicts needs.
Vertices are the source mesh's, unchanged. Simplification here only ever collapses a vertex onto another vertex that already existed, so no level invents a position, a normal or a skinning weight. That is a real constraint — a quadric's optimal placement is a slightly better surface — and it buys three things worth more than that: attributes need no interpolation and therefore cannot drift, a locked boundary is bit-identical between a parent and its children rather than nearly so, and every level shares one vertex buffer.
Fields and properties (8)
public Meshlet[] MeshletsEvery cluster at every level, coarsest last.
public MeshletGroup[] GroupsEvery DAG edge.
public int[] VerticesEach cluster's vertex list, concatenated: an index into the source mesh's vertices.
public byte[] TrianglesThree bytes per triangle, each an index into the owning cluster's vertex list.
public int[] RootsThe clusters nothing simplified further, which is what a never-streamed object draws.
public int LevelCountHow many levels there are, counting the original mesh as one.
public int[] FallbackThe fallback mesh: three source-vertex indices per triangle.
public int TriangleCountHow many triangles the whole DAG holds, across every level.
Methods (1)
public void GetTriangles(in Meshlet meshlet, Span<int> indices)The corners of one cluster's triangles, as indices into the source mesh's vertices.
Used by (34)
- VirtualGeometryGameVirtualGeometry
- ClusterRasterTestsVixen.Rendering.Tests
- ClusterResolveTestsVixen.Rendering.Tests
- ClusterTraversalAcceptsTestsVixen.Rendering.Tests
- ClusterTraversalGroupTestsVixen.Rendering.Tests
- GpuClusterCullingVixen.Rendering
- GpuClusterVisibilityVixen.Rendering
- MeshletBuilderVixen.Rendering.VirtualGeometry
- MeshletBuilderTestsVixen.Rendering.VirtualGeometry.Tests
- MeshletCutVixen.Rendering.VirtualGeometry
- MeshletCutTestsVixen.Rendering.VirtualGeometry.Tests
- MeshletPageBuilderVixen.Rendering.VirtualGeometry
- MeshletPageBuilderTestsVixen.Rendering.VirtualGeometry.Tests
- MeshletStreamingTestsVixen.Rendering.Tests
- MeshletValidatorVixen.Rendering.VirtualGeometry
- MeshletValidatorTestsVixen.Rendering.VirtualGeometry.Tests
- SessionVixen.Rendering.VirtualGeometry
- SkinnedClusterTestsVixen.Rendering.Tests
- SoftwareRasterTestsVixen.Rendering.Tests
- TypeRegistrationVixen.Rendering
- VirtualGeometryAssetVixen.Rendering
- VirtualGeometryContentVixen.Rendering
- VirtualGeometryContentTestsVixen.Rendering.Tests
- VirtualGeometryDeviceTestsVixen.Graphics.Golden.Tests
- VirtualGeometryFrameTestsVixen.Rendering.Tests
- VirtualGeometryGoldenTestsVixen.Graphics.Golden.Tests
- VirtualGeometryRenderFeatureVixen.Rendering
- VisibilityResolveTestsVixen.Rendering.Tests
- Vixen_Rendering_VirtualGeometryAssetSerializerVixen.Rendering
- Vixen_Rendering_VirtualGeometry_MeshletMeshSerializerVixen.Rendering.VirtualGeometry
- ModelCompilerVixen.Editor.Assets
- ModelImporterVixen.Editor.Assets
- ModelImporterTestsVixen.Editor.Assets.Tests
- SkinnedPageTestsVixen.Editor.Assets.Tests