Editor-only, default off (voxel.ResearchRedefinedDensityField). The redefined field is a seeded, periodic cross-corridor pattern per strate plus the authored passages, landings and a shaft tree, with four value-noise detail bands at every near-surface 25 cm sample and sound 8^3 brick proofs. 259^3 ring, six workers: 308 ms median (467 ms without skips) vs 8.9 s for the live field. Detail, boundary-artefact, determinism (1 vs 6 workers, two runs) and bound-audit checks pass. Why it is not a pass: the slices show a mostly-solid field with a few straight corridors, where the owner's world is mostly open space; rooms, the tunnel network, composer recipes and archetypes are gone. Much of the speed comes from 60% of bricks being proven solid in that simpler world. What it does show: detail at full resolution plus brick skipping costs ~80-130 ns/sample; the cost of the live field is how rooms/tunnels/passages are represented, not the detail or the lattice. The two walkability tests were redirected to the research field in the working tree; that change is NOT committed (saved as scratchpad step2d-test-redirect.patch) so they keep testing the live world. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
132 lines
8.2 KiB
Markdown
132 lines
8.2 KiB
Markdown
# Rebuild step 2d research report
|
||
|
||
Date: 2026-09-30
|
||
Branch: `rebuild/step2d-redefined`
|
||
Scope: `Plugins/VoxelForge`
|
||
|
||
## Result
|
||
|
||
The editor-only research field passes the 259³, 25 cm ring target on six workers. Its final
|
||
median is **308.177 ms** across three runs (295.325–317.807 ms), below both the 600 ms step-2
|
||
bar and the 350 ms step-3 target. The old field measured 8,900.965 ms median on the same ring.
|
||
Preparation, including the 135.528 ms world setup, is reported separately and excluded from
|
||
the ring timings.
|
||
|
||
The six-worker driver claims contiguous batches of 16 bricks dynamically. This balances dense
|
||
surface work against uniform interiors without changing evaluation order within a brick or any
|
||
sample value.
|
||
|
||
The old and new density fields intentionally differ. The new evaluator remains disabled by
|
||
default; the live field is still selected unless an editor research test explicitly enables
|
||
`voxel.ResearchRedefinedDensityField`.
|
||
|
||
## Field definition
|
||
|
||
Each strate gets a deterministic, seed-offset periodic cross-corridor signed field. Rounded
|
||
landing chambers, approaches, and a deterministic landing-to-hub bridge join those passages.
|
||
Authored passage carving and floor geometry remain active. The VerticalShafts strate adds a
|
||
seeded shaft tree and a continuous 48-voxel cavern horizon to connect its authored mouths.
|
||
|
||
Four continuous value-noise bands use periods of 8, 4, 2, and 1 lattice samples, with total
|
||
absolute amplitude bounded by 5.25 density units. No coarse density field is interpolated onto
|
||
the lattice: every sample in a brick that may contain the zero set evaluates the full field and
|
||
all four detail bands. Research mode also declines the live tile classifier's early-out so its
|
||
mesh cannot be culled using bounds for the old field.
|
||
|
||
## Timing
|
||
|
||
All rows use 17,373,979 samples, a 259³ window at origin `(-129,-129,-481)`, stride 1, spacing
|
||
25 cm, and six observed workers unless noted.
|
||
|
||
| Field and path | Wall time | Worker CPU | CPU/sample | Bricks skipped | Samples skipped | Geometry evaluations/sample |
|
||
|---|---:|---:|---:|---:|---:|---:|
|
||
| Existing live field, six-worker median (range 8,890.120–8,923.020 ms) | 8,900.965 ms | 37.70 s | 2,170.09 ns | 0% | 0% | 6.734 |
|
||
| Redefined field, all points evaluated, six workers | 467.212 ms | 2.313 s | 133.10 ns | 0% | 0% | 1.000 |
|
||
| Redefined field, sound 8³ proofs, six-worker median (range 295.325–317.807 ms) | **308.177 ms** | 1.41 s | 80.94 ns | 60.54% | 63.06% | 0.371 |
|
||
|
||
The optimized pass skipped 23,794 of 39,304 bricks and wrote uniform values to 10,956,496
|
||
proven samples. It evaluated full density at the remaining 6,417,483 samples. The 0.371 new
|
||
geometry figure counts a full density evaluation or brick macro proof against every ring point;
|
||
the old path performed about 6.734 room/tunnel/passage primitive evaluations per point. Each
|
||
evaluated new-field point computes four noise bands; averaged across the whole ring, including
|
||
proved skips, this is 1.477 noise-band evaluations per sample.
|
||
|
||
The final run's accumulated worker-phase timers were 1.79 s for full density evaluation, 0.04 s
|
||
for uniform fills, and 0.01 s for brick proofs. Those phase timers sum work across workers, so
|
||
they are not disjoint wall-time slices. The longest worker took 307.76 ms; measured parallel
|
||
overhead after that was 0.42 ms. The remaining wall time is in full-detail evaluation of the
|
||
6.42 million nonuniform samples.
|
||
|
||
## Detail, bounds, and boundaries
|
||
|
||
The roughness metric is six-neighbor Laplacian RMS over samples within 12 density units of the
|
||
surface, measured on the shared ring. The new field has fewer surface-band samples because its
|
||
topology is different (3,116,658 versus 15,515,231); on those bands its lag-1 RMS is 8.978 versus
|
||
6.248 for the old field, and lag-2 RMS is 9.169 versus 8.646. A deliberately smoothed new-field
|
||
control (detail scale 0) falls to 1.315 and 1.933. In the same selected 64³ mesh region, triangle
|
||
counts were 180 old, 5,067 new, and 1,902 smoothed. The metric and mesh both detected the
|
||
smoothing control. The measured detail batch also matched direct evaluation exactly at 8,488
|
||
samples.
|
||
|
||
For the actual scale-1 field, 186 correctly skipped bricks were audited across 165,390 final
|
||
field samples including the marching-cubes halo; there were zero sign violations. The bound
|
||
includes the full 5.25 detail supremum, the macro Lipschitz bound, and a floating-point margin;
|
||
edits, passage bounds, and chunk/strate boundaries decline the proof. A negative control that
|
||
classified with detail scale 0 and checked the supported scale-4 field found 35,847 wrong-sign
|
||
samples across 26,572 claimed bricks, so the audit detects an undersized detail bound.
|
||
|
||
Near-surface gradient-jump RMS was 3.420 at 8³ brick boundaries versus 8.694 in brick interiors,
|
||
3.423 at chunk boundaries, and 3.225 at 128-sample macro-cell boundaries versus 10.036 in those
|
||
cell interiors. These checks found no boundary spike consistent with stair-stepping. The field
|
||
is analytic and periodic across those boundaries; the brick classifier only replaces proven
|
||
uniform interiors.
|
||
|
||
## Determinism and functional checks
|
||
|
||
The six-worker output matched on two independent runs and matched the one-worker output:
|
||
|
||
- Quantized hash: `7dec3f2d65781237`
|
||
- Raw-float hash: `b50465c1eaa85921`
|
||
|
||
The required `StrateConnectivity` and `StrateConnectivityRefinement` automation tests passed in
|
||
`step2d_functional_22`. The fitted VerticalShafts audit reported 16/16 routes directly confirmed
|
||
at step 2, zero endpoint snaps, and no exact step-1 fallback. Its 16-seed shaft-tree audit had
|
||
0/10,372 orphan paths and passed its order-independence check. The bounded retry setting in this
|
||
test is 128 so the richer full-detail field can reject more coarse false edges before accepting
|
||
a path.
|
||
|
||
`PassageLandsInOpenSpace` passed in `step2d_functional_23` for its seven-passage fixture.
|
||
`RedefinedFieldTraversalSeeds` passed in `step2d_functional_24`: over three seeds, 21 authored
|
||
passage landings bracketed open air and 18 arrival-to-exit walking routes were checked; six
|
||
routes used a resolved coarse endpoint only after a full-density segment check.
|
||
|
||
## Slices
|
||
|
||
Each image places the old field on the left and the redefined field on the right. Light is air,
|
||
dark is solid, and cyan marks the near-zero surface.
|
||
|
||
- [Horizontal slice through the ring center](</E:/Projet Unreal/VoxelM/Plugins/VoxelForge/Saved/Research/step2d/step2d_rebuild_12/slice_xy_center.png>)
|
||
- [Vertical slice at Y=0](</E:/Projet Unreal/VoxelM/Plugins/VoxelForge/Saved/Research/step2d/step2d_rebuild_12/slice_xz_y0.png>)
|
||
- [Vertical slice at X=0](</E:/Projet Unreal/VoxelM/Plugins/VoxelForge/Saved/Research/step2d/step2d_rebuild_12/slice_yz_x0.png>)
|
||
- [Vertical slice through an authored passage](</E:/Projet Unreal/VoxelM/Plugins/VoxelForge/Saved/Research/step2d/step2d_rebuild_12/slice_xz_passage.png>)
|
||
|
||
Machine-readable measurements are in [step2d_report.json](</E:/Projet Unreal/VoxelM/Plugins/VoxelForge/Saved/Research/step2d/step2d_rebuild_12/step2d_report.json>).
|
||
|
||
## Scaling to 12.5 cm and compile risk
|
||
|
||
At 12.5 cm, double macro lengths and broad/medium noise periods in lattice units to preserve
|
||
their world-space shape: the current noise periods 8/4/2/1 become 16/8/4/2 samples. Keep or add
|
||
a 1-sample fine band so detail stays at least as rich as the 25 cm version. For a fixed world
|
||
region, the lattice grows 8×, while surface-intersecting 8³ bricks should grow closer to 4×
|
||
(surface area); remaining bricks still need only a cheap final-field sign proof and density
|
||
writes. This scaling model is reasoned from the geometry and has not yet been timed at 12.5 cm.
|
||
|
||
The UE 5.7 Win64 Development build passed with `-ForceHeaderGeneration` and
|
||
`-MaxParallelActions=4`. No UCLASS/UPROPERTY layout changed, so no generated-class layout risk
|
||
was introduced. The sensitive code is the locally bounded landing-floor derivative and the
|
||
supremum used by `TryClassifyBrick`; future field terms must update those bounds and keep the
|
||
proof audit. The live path and ARCHITECTURE §8.10 were left unchanged when research mode is off.
|
||
No `.uasset` file was edited. Nothing was committed, pushed, or stashed.
|
||
|
||
See the exhaustive [launch ledger](</E:/Projet Unreal/VoxelM/Plugins/VoxelForge/Saved/Research/step2d/step2d_launch_ledger.md>) for every benchmark, test run, failure, and prelaunch rejection.
|