Vixen
02b45cc4
csharp
public record class MeshletMesh

A 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[] Meshlets

    Every cluster at every level, coarsest last.

  • public MeshletGroup[] Groups

    Every DAG edge.

  • public int[] Vertices

    Each cluster's vertex list, concatenated: an index into the source mesh's vertices.

  • public byte[] Triangles

    Three bytes per triangle, each an index into the owning cluster's vertex list.

  • public int[] Roots

    The clusters nothing simplified further, which is what a never-streamed object draws.

  • public int LevelCount

    How many levels there are, counting the original mesh as one.

  • public int[] Fallback

    The fallback mesh: three source-vertex indices per triangle.

  • public int TriangleCount

    How 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