The Gradient interface left native solid density in the air-side gap and snapped the face to voxel levels (concentric ring steps on the FI floor). The owner Gradient path now writes signed distance both sides; match error RMS 0.36 -> 0.11 m. Band and fade-tile culling cut transition cost: whole view vs L24 SW +2.7%, FI +0.2%. Evaluator 16. Deterministic across compilers and workers; interface and passage audits pass. Found: on the real FloatingIslands recipe, the rock-column connected-ends audit fails (all styles); earlier matrices ran SurfaceWorld twice. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
122 lines
7.6 KiB
Markdown
122 lines
7.6 KiB
Markdown
# VoxelForge L30
|
||
|
||
Work is on `assembler/world`. The speed and look patches are saved separately under
|
||
`Saved/Linux/l30/`; evaluator version is now 16 for the field change. No Unreal files were edited.
|
||
Nothing was committed, pushed, or stashed.
|
||
|
||
## Ring measurement and fix
|
||
|
||
I rasterized upward-facing triangles from the L29 mesh (skirt triangles excluded) over the same
|
||
409,600 pixels as the after field. At `(64, -32)`, the L29 field stayed almost flat at `-120.063 m` from
|
||
radii 1–11 m, then broke at 12 m. The expected Gradient at radius 1 m is `-121.360 m`. This is a
|
||
field defect, not shading: the probe is about 67 m from the passage mouth, and the raster has no
|
||
skirts or readable-shading tint. The passage column flare is at that distant mouth as well.
|
||
|
||
The upper FloatingIslands generator could leave native solid density in the air-side gap above a
|
||
negatively displaced Gradient face. The constant band densities also snapped the face to Core
|
||
voxel levels. The owner Gradient path now clears that gap with positive signed distance and writes
|
||
negative signed distance below the face, allowing the mesh to interpolate its height. The after
|
||
profile follows the resolved hash surface at every sampled radius. Match error fell from RMS
|
||
`0.361765 m`, p95 `1.016178 m`, max `1.304169 m` to RMS `0.110357 m`, p95 `0.218531 m`, max
|
||
`0.248818 m` (one Core voxel is `0.25 m`).
|
||
|
||
Before/after captures use the same color ramp and bounds:
|
||
|
||
- [L29 height map](captures/fi-floor-gradient-before-heightmap.jpg), [fixed height map](captures/fi-floor-gradient-after-heightmap.jpg)
|
||
- [L29 readable render](captures/fi-floor-gradient-before.jpg), [fixed readable render](captures/fi-floor-gradient-after.jpg)
|
||
|
||
## Transition captures
|
||
|
||
The maps cover the full 640×640 surface and are all below 300 KB. Gradient is the owner world
|
||
without a mode override. Hard and Interleaved use fixture overrides; the resolved layouts record
|
||
those modes.
|
||
|
||
- [Hard](captures/transition-hard-heightmap.jpg) — flat interface.
|
||
- [Gradient](captures/transition-gradient-heightmap.jpg) — owner field.
|
||
- [Interleaved](captures/transition-interleaved-heightmap.jpg) — fixture override.
|
||
|
||
## Cost
|
||
|
||
Five alternating W12 pairs, hashing off and `cache_hits=0`. First table is the separable speed-only
|
||
build, whose hashes remain L29-identical. Second table is the final version-16 build.
|
||
|
||
| Recipe | L24 | L29 | L30 speed-only | vs L24 | L30 final | vs L24 |
|
||
|---|---:|---:|---:|---:|---:|---:|
|
||
| SurfaceWorld | 1.566 s | 1.653 s | 1.606 s | +2.55% | 1.530 s | +2.68% |
|
||
| FloatingIslands | 16.625 s | 16.779 s | 16.470 s | −0.93% | 16.543 s | +0.21% |
|
||
|
||
Counter-enabled runs on the same plain W12 workload locate the saved work:
|
||
|
||
| Recipe | Boundary calls | Window checks → evaluations | Fade calls | Boundary tile / point culls | Column Z tests → guards → radial rejects | SDF calls |
|
||
|---|---:|---:|---:|---:|---:|---:|
|
||
| SurfaceWorld | 19.95 M | 3.54 M → 739 k | 8.2 k | 8.99 M / 8.96 M | 1.87 M → 1.85 M → 1.58 M | 18.4 k |
|
||
| FloatingIslands | 66.33 M | 8.00 M → 2.68 M | 8.6 k | 38.25 M / 23.63 M | 8.17 M → 8.14 M → 6.82 M | 83.4 k |
|
||
|
||
The fade-tile cull skips 731 k SurfaceWorld and 2.67 M FloatingIslands fade evaluations; the
|
||
column guard exits on nonpositive field values 272 k and 1.27 M times. Timing comes from
|
||
uninstrumented binaries; the counts above use counter logging.
|
||
|
||
## Hashes and audits
|
||
|
||
The speed-only v15 build matches all 12 L29 hash records for each recipe/compiler/worker matrix
|
||
(W1/W8/W12), and all 12 records for each 24 m crossing matrix. That is 24 exact comparisons;
|
||
all pass. The final v16 build is deterministic across both compilers and all worker counts, in the
|
||
normal and 24 m crossing runs. Representative W12 hashes (`density / mesh / payload / topology`):
|
||
|
||
| Recipe | Full detail | Whole view |
|
||
|---|---|---|
|
||
| SurfaceWorld | `ace56c8f205238ad / a9c603a1248de6b8 / ea55f1f4fcc6a894 / 5ea7bc78a1b678ae` | `0e8c5af01df96b14 / 70099e89b77811ed / dbce0fdcf6764126 / ddaf81a1228f9b4b` |
|
||
| FloatingIslands | `ed550e0c8b182695 / 0e410a8e80a3e7f7 / 0751926f0c67d8a4 / f01208bc2f7841ec` | `4ee19ea6b6406ca6 / be648f94c899b47e / 310b525f31604f98 / 10366eb6dfce2384` |
|
||
|
||
Exact-query hashes also match across v16 runs: SurfaceWorld
|
||
`c949c4df2ce6f9d9 / 114c501e2d830d94 / e6011d3a248d4849`; FloatingIslands
|
||
`7b7c50ac24ccadcc / efcba20c0c70c415 / e604823a249029bf`.
|
||
|
||
- Interface audit: all 12 compiler/recipe/mode combinations pass; 4,221 columns each, zero holes
|
||
and air samples, both negative controls reject.
|
||
- The 16 L29 fixture-matrix replays pass passage safety/open-air, validator controls (10/10), L13
|
||
route parity, L9 proof checks (zero violations), and walkability. `FloorProfileBlend` still
|
||
reports 2.544 vox in style 1 and 3.645 vox in style 3, unchanged from L29.
|
||
- Audit scope caveat: the L29 files named `floating-islands` were run with
|
||
`--recipe=surface-world`. With the actual `--recipe=floating-islands` option, the rock-column
|
||
audit fails on all four styles on both L29 and L30: connected ends are 1/2, 3/4, 1/2, 3/4.
|
||
The open-air audit passes. This is inherited, but means the L29 report's “two recipes” matrix did
|
||
not exercise the FloatingIslands CLI recipe.
|
||
|
||
## Failed and retried runs
|
||
|
||
- Broad air-gap experiments first lost a SurfaceWorld style-2 support sample. Route/radius masks
|
||
and support restoration then caused open-air violations. Widening the fade restored that case,
|
||
but measurement placed the ring far outside the fade, so those variants were discarded. The
|
||
final owner-only gate and signed-distance face pass the targeted support audit.
|
||
- Early speed variants missed the target: tile-only `+4.04%`, Z-point `+3.11%`, scalar path
|
||
`+4.33%` vs L24. The final band and fade-tile culls meet the target.
|
||
- The first counter-instrumentation compile failed; the counter hook was corrected and rebuilt
|
||
with Clang and GCC. One duplicated timing sequence was discarded; only the clean five-pair runs
|
||
are reported.
|
||
- The first 24 m crossing comparison supplied an extra camera override and mismatched. Rerunning
|
||
with the L29 camera setup and only `--camera-step=24,0,0` matches all hashes.
|
||
- An early Hard export hit `std::bad_alloc`; retry passed. The first EGL render used an unwritable
|
||
cache; retry with `XDG_CACHE_HOME` under `Saved/Linux/l30` passed. The first map conversion also
|
||
stopped before the Hard/Interleaved maps; both were rerun individually and have full raster
|
||
coverage.
|
||
- The first passage-matrix summary script assumed a different marker order and reported failure;
|
||
checking each audit marker by name confirms the core matrix passes. A `check=True` true-recipe
|
||
control runner stopped on the expected L29 exit code 10; rerunning while recording return codes
|
||
confirmed the same four inherited rock-column failures on L29 and L30.
|
||
|
||
No build or run exceeded 30 minutes or remained stuck for 15 minutes. Builds and runs used CPUs
|
||
0–11, at most 12 workers, normal priority, and the 6 GiB address-space cap. No Unreal build was
|
||
attempted.
|
||
|
||
## Orchestrator review (Claude)
|
||
|
||
- Merged: the ring was a real field defect (air-side gap left solid, face snapped to voxel levels), now fixed
|
||
(RMS 0.36 → 0.11 m). Cost back to SW +2.7% / FI +0.2% vs L24. The speed part is bit-identical; final v16 is
|
||
deterministic.
|
||
- Still visible: `fi-floor-gradient-after.jpg` shows faint concentric lines. Unknown whether that is residual
|
||
geometry (≤0.25 m steps) or the readable shader's height-tint banding; L31 measures it.
|
||
- **Important finding (thanks to Luna's caveat):** L29's "both recipes" passage matrix ran SurfaceWorld twice. On
|
||
the real `--recipe=floating-islands`, the rock-column connected-ends audit fails in all 4 styles (1/2 or 3/4).
|
||
Since L27, FI column results were never really tested. L31 priority.
|