Document geometry state over CultMesh

This commit is contained in:
Meta Vens 2026-05-29 23:49:14 +01:00
commit d8d0c4c8a0
2 changed files with 49 additions and 0 deletions

View file

@ -14,3 +14,51 @@ The package is deliberately substrate-shaped:
the xeno boundary, but the live machine eats and emits typed CultCache
documents.
## Runtime Path
`vg-csg` emits domain documents, selected-cut manifests, and chunk artifacts as
MessagePack CultCache documents. A Unity runtime, local worker, or remote
geometry process should receive the same records through CultMesh/CultNet and
read them back as `CultGeometry*` types.
```csharp
using GameCult.Caching;
using GameCult.Geometry;
using GameCult.Mesh;
using GameCult.Networking;
var geometryDocuments = new CultNetDocumentRegistry(CultDocumentRegistry.Shared)
.Register(CultNetDocumentBinding.ForDocument<CultGeometryDomainDocument>())
.Register(CultNetDocumentBinding.ForDocument<CultGeometryBuildRequest>())
.Register(CultNetDocumentBinding.ForDocument<CultGeometrySelectedCutManifest>())
.Register(CultNetDocumentBinding.ForDocument<CultGeometryChunkArtifact>());
using var node = await CultMesh.CreateNodeAsync("ragnarok-geometry.ccmp", new CultMeshNodeOptions
{
DatabaseOptions = new CultNetDatabaseOptions
{
RuntimeId = "unity-runtime",
DocumentRegistry = geometryDocuments
}
});
using var chunks = node.Database
.Watch<CultGeometryChunkArtifact>()
.Subscribe(change => ApplyChunk(change.Document));
```
The record key is part of the contract. Rust and C# must compute the same key
for the same geometry record, so stable fingerprints use the Rust canonical
field order and invariant float text. If this drifts, the same chunk becomes two
different chunks depending on which runtime touched it first. That is not a
cache miss; that is split-brain geometry.
## Documents
- `CultGeometryDomainDocument`: one hierarchical domain tree, suitable for
Ragnarok/Fensalir-style feature DSL output.
- `CultGeometryBuildRequest`: one LOD/frustum/budget request for workers.
- `CultGeometrySelectedCutManifest`: the selected domain cut, deferred children,
fallback rows, and diagnostic contribution rows.
- `CultGeometryChunkArtifact`: render mesh, optional collider mesh, source
domain/claim identities, build counters, and transition clipping seed.