wip(assembler): M1 round 1 -- manifest format, block contract, bound audit, native Heightfield2D
Luna, M1 round 1 of 4 (plan in Standalone/ASSEMBLER_M1_REPORT.md): - Versioned fixed-scale world manifest (the shipped plan format) and the Core block contract: point evaluation, interval-or-unknown, influence bound, detail envelope, channels. - Interval audit: 256 boxes / 6,912 samples, 0 missed, 0 unknown; a deliberately false bound is detected (negative control). - Native Heightfield2D with biome input: 4,096-point hash fae2721c052aec5c identical at W1/W8/W16; point queries 2.059 ms vs 62.115 ms legacy -- but NOT a match yet (mean density error 274 voxels, 2,261 sign mismatches vs the legacy surface). 45 mesh-free Core queries match direct evaluation exactly. Existing cave world unchanged (walkability, 64/64 tiles). - Open: collision readiness, a valid full-view timing (viewer captures were occluded/empty; top-down height maps are the only usable pair). Also carries the design doc's owner decisions (fixed water; player edits unrestricted, route law for automatic changes only) and three plugin files + BuildHost scripts that earlier round commits had missed (also fixed on unreal/core-integration as 2574b56). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
1 parent
d5ce5d675d
commit
874c796c65
20 files changed
+2880
-12
No files matched your search
@@ -79,6 +79,45 @@ Pass `analyticOnly = false` to retain the reference packed-page compiler. Packed
|
||||
parent-cell coordinates and an 8-voxel apron; each covers a 128-voxel cube or one larger coarse
|
||||
tile. This path remains available for parity checks and workloads that need the packed lattice.
|
||||
|
||||
## World assembler manifest v1 (prototype)
|
||||
|
||||
`ResolvedWorldSnapshot::FromJson` accepts an optional `world_assembly` object alongside the owner
|
||||
snapshot. The object is the shipped-plan payload shape: a fixed-scale recipe and finite-strate plan
|
||||
with hashes, no generated mesh or voxel samples. The reviewed sample payload is
|
||||
[`round1-manifest.json`](../Research/WorldAssemblerM1/round1-manifest.json). Round 4 still needs to
|
||||
connect this payload to the season asset/hash path.
|
||||
|
||||
Every coordinate and scalar uses signed integer units of 1/256 voxel (`units_per_voxel: 256`),
|
||||
independent of the plugin's 25 cm Core voxel and of tile size. Schema and evaluator versions are
|
||||
both 1. JSON integer fields are canonicalized in declared field order and hashed as 4- or 8-byte
|
||||
little-endian words with FNV-1a 64. Hashes are emitted as 16 lowercase hexadecimal characters;
|
||||
JSON key order and whitespace do not affect them. The root, recipe, plan and each stratum carry a
|
||||
content hash. The recipe stores its seed, warped biome-map settings and one to eight biome profiles;
|
||||
the plan stores finite-strate extents, cap settings, stable-ID features and route points. Bounds,
|
||||
feature count and route count are validated before a manifest is accepted.
|
||||
|
||||
```cpp
|
||||
std::string error;
|
||||
auto manifest = VoxelForgeCore::WorldAssemblyManifest::FromJson(payload, error);
|
||||
if (!manifest || !manifest->validate(error)) { /* reject the payload */ }
|
||||
const auto* loaded = snapshot.worldAssembly(); // null when the owner snapshot has no plan
|
||||
```
|
||||
|
||||
`Heightfield2D` is the first field block. `point(xQ, yQ, zQ)` evaluates the biome map and blended
|
||||
height profiles at fixed-scale coordinates, returning the ground and cap heights, primary and
|
||||
neighbor biome IDs, Q16 blend weight, and signed density. Negative density is solid. Its block
|
||||
contract reads `biome` and writes `height` plus `rock`; `water`, `waterSurface`, `route` and
|
||||
`surfaceTags` are declared channels for later blocks. The detail envelope reports maximum absolute
|
||||
vertical displacement and minimum feature size. Influence is global in XY and limited to the
|
||||
finite stratum's Z extent.
|
||||
|
||||
`interval(minXQ, minYQ, minZQ, maxXQ, maxYQ, maxZQ)` returns a conservative density range or
|
||||
`known == false`; callers must keep evaluating when it is unknown. The current heightfield range
|
||||
uses the maximum recipe-profile amplitude and cap undulation over the whole biome set. The public
|
||||
`AuditHeightfieldBounds` samples points inside randomized boxes and includes a deliberately false
|
||||
one-sided range as a negative control. A pass means no sampled point escaped and the negative
|
||||
control was rejected; it is an audit of this block implementation, not a proof for future blocks.
|
||||
|
||||
## Queries and tiles
|
||||
|
||||
`densityAt(position)` returns signed density; negative is solid and nonnegative is air.
|
||||
|
||||
Reference in new issue
Block a user