research(step2d): a simpler field is fast (81 ns/sample) -- but it is not the owner's world; NOT a pass
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
This commit is contained in:
1 parent
d6e021a80b
commit
78641da0bb
15 files changed
+3077
-6
No files matched your search
@@ -0,0 +1,60 @@
|
||||
# Step 2d launch ledger
|
||||
|
||||
All Unreal processes were launched through `Tools/VoxelForgeTest.ps1` and ran serially. The
|
||||
guarded launches used below-normal priority, the shared persistent DDC where recorded,
|
||||
`-MaxParallelActions=4`, a prelaunch 6 GiB memory check, an 8 GiB per-process limit, and a
|
||||
30-minute timeout. The retained ledgers show **no crash reporters, no process above 8 GiB, and
|
||||
no timeout**. Exit 255 below means automation assertions failed; it was not a native crash.
|
||||
|
||||
## Benchmark attempts
|
||||
|
||||
| Label | Build | Unreal process | Result |
|
||||
|---|---|---|---|
|
||||
| `step2d_rebuild_01` | UBT PID 25780, exit 6, peak 2.71 GiB | Not launched | Compile failed on the `ApplicationContextMask` automation flag; corrected in the next source pass. |
|
||||
| `step2d_rebuild_02` | UBT PID 19420, passed, peak 1.57 GiB | PID 13996, exit 2, peak 1.83 GiB | 3.834 s optimized ring; brick/sample skipping was too low for the speed gate. |
|
||||
| `step2d_rebuild_03` | Passed; PID not retained in the compact log | PID 15480, exit 2, peak 1.82 GiB | 3.918 s; detail spectrum failed. The smoothing negative control worked; the proof negative control did not. |
|
||||
| `step2d_rebuild_04` | Not launched | Not launched | Harness rejected a relative `-Out` path before Unreal startup. |
|
||||
| `step2d_rebuild_05` | UBT PID 23904, passed | PID 24708, exit 2, peak 1.82 GiB | Scratch reuse gave 233.27 density mismatches and hash/boundary failures; scratch ownership was corrected. |
|
||||
| `step2d_rebuild_06` | UBT PID 7540, passed | PID 25828, exit 2, peak 1.82 GiB | Detail, smoothing, boundary, and hash checks passed, but 3.70 s and 1.46% sample skipping missed the speed gate. |
|
||||
| `step2d_rebuild_07` | UBT PID 23800, passed | PID 5208, exit 2, peak 1.81 GiB | 3.66 s; the cached XY macro did not improve the timing. |
|
||||
| `step2d_rebuild_08` | UBT PID 25304, passed | PID 7108, exit 2, peak 1.81 GiB | 2.62 s; 22.20% of bricks and 21.18% of samples skipped, still over target. |
|
||||
| `step2d_rebuild_09` | UBT PID 25612, passed, peak 1.51 GiB | PID 24256, exit 0, peak 1.82 GiB | Superficially under 600 ms, but invalid as evidence: classifier gap/default/chunk semantics had not yet been fixed. Excluded. |
|
||||
| `step2d_harness_10` | UBT PID 2544, passed, peak 1.49 GiB | PID 23204, exit 0, peak 1.84 GiB | 503.026 ms and hash/detail/boundary checks passed. Superseded because its deliberately undersized-bound control did not catch a wrong sign. |
|
||||
| `step2d_harness_11` | UBT PID 2900, passed, peak 1.50 GiB | PID 10688, exit 0, peak 1.83 GiB | 497.518 ms; the scale-0 versus scale-4 undersized-bound control caught 35,847 wrong-sign samples. |
|
||||
| `step2d_harness_12` | UBT PID 13868, passed, peak 1.87 GiB | PID 16872, exit 0, peak 1.81 GiB | Final dynamically scheduled run: 308.177 ms median, all hashes and research gates passed. |
|
||||
|
||||
## Functional runs
|
||||
|
||||
| Label | Build | Unreal process | Result |
|
||||
|---|---|---|---|
|
||||
| `step2d_functional_01` | UBT PID 21184, passed | PID 3444, exit 255, peak 3.26 GiB | Base connectivity passed; refinement failed on an endpoint self-query. The launcher detected a write under `C:\Users\Jahni\AppData\Local\UnrealEngine`; later runs used isolated per-run local data. |
|
||||
| `step2d_functional_02` | UBT PID 11844, passed, peak 1.87 GiB | PID 5048, exit 255, peak 3.13 GiB | Same endpoint-snap failure; isolated LocalAppData was clean. |
|
||||
| `step2d_functional_03` | UBT PID 2060, passed, peak 1.90 GiB | PID 25648, exit 255, peak 3.19 GiB | Origin probe compared raw density 8 with a coarse center at -3.534534 near Z=-1012. |
|
||||
| `step2d_functional_04` | Failed launch; retained PID 23996, stage split not retained | Exit 255; peak not retained | Range-normalization fix did not resolve the origin probe. No crash was recorded. |
|
||||
| `step2d_redefined_seeds_01` | Build passed; PID not retained | PID 21888, exit 255 | Initial multi-seed endpoint-snap expectation was stricter than the route's full-density segment check; expectation was revised. |
|
||||
| `step2d_functional_05` | UBT PID 17000, passed | PID 7540, exit 255 | 12/16 fitted VerticalShafts seeds passed. |
|
||||
| `step2d_functional_06` | Build passed; PID not retained | PID 21948, exit 255, peak 3.43 GiB | 12/16; seed 1337's physical arrival/departure audit found 13 bad samples of 15. |
|
||||
| `step2d_redefined_seeds_02` | UBT PID 14672, exit 0, peak 1.63 GiB | PID 2220, exit 0, peak 2.61 GiB | Passed an earlier three-seed traversal version. |
|
||||
| `step2d_functional_07` | Build/Unreal stage PID 15712 in retained summary | Exit 255, peak 3.42 GiB | 12/16; no native crash. |
|
||||
| Relative-output-path prelaunch attempt | Not launched | Not launched | Harness stopped before Unreal startup; corrected to an absolute output directory. |
|
||||
| `step2d_functional_08` | UBT PID 12596, passed, peak 1.87 GiB | PID 20624, exit 255, peak 3.42 GiB | 13/16; origin path passed, three measurement limits remained. |
|
||||
| `step2d_functional_09` | UBT PID 10848, passed, peak 1.50 GiB | PID 16764, exit 255, peak 3.46 GiB | 13/16 after the cache-key fix. |
|
||||
| `step2d_functional_10` | UBT PID 24704, passed, peak 1.44 GiB | PID 7512, exit 255, peak 3.56 GiB | 13/16 after connector-radius changes. |
|
||||
| `step2d_functional_11` | UBT PID 17088, exit 6, peak 1.96 GiB | Not launched | Compile error C4456 from a duplicated `XYCount`; fixed before the next build. |
|
||||
| `step2d_functional_12` | UBT PID 4760, passed, peak 1.95 GiB | PID 26520, exit 255, peak 3.49 GiB | 13/16 after explicit bridges. |
|
||||
| `step2d_functional_13` | UBT PID 19416, passed, peak 1.50 GiB | PID 26444, exit 255, peak 3.50 GiB | 13/16; diagnostics showed 16 retries and both endpoints in the same large component. |
|
||||
| `step2d_functional_14` | UBT PID 3156, passed, peak 1.50 GiB | PID 17892, exit 255, peak 3.49 GiB | 13/16 after widening the landing bridge. |
|
||||
| `step2d_functional_15` | UBT PID 5648, passed, peak 1.49 GiB | PID 23788, exit 255, peak 3.53 GiB | 14/16 after adding the vertical cavern band. |
|
||||
| `step2d_functional_16` | UBT PID 20028, passed, peak 1.13 GiB | PID 4916, exit 255, peak 3.60 GiB | Controlled-wall assumptions and the 14/16 refinement audit both failed. |
|
||||
| `step2d_functional_17` | UBT PID 14952, passed, peak 1.50 GiB | PID 2604, exit 0, peak 2.69 GiB | Three-seed traversal test passed: 21 landing brackets and 18 routes. |
|
||||
| `step2d_functional_18` | UBT PID 10496, passed, peak 1.49 GiB | PID 25636, exit 0, peak 2.70 GiB | Passage-open-space test passed. |
|
||||
| `step2d_functional_19` | UBT PID 22588, passed, peak 1.48 GiB | PID 7316, exit 255, peak 3.71 GiB | Controlled wall returned conservative unknown after zero retries; refinement remained 14/16. |
|
||||
| `step2d_functional_20` | UBT PID 14076, passed, peak 1.88 GiB | PID 23120, exit 255, peak 3.60 GiB | Wall samples were -2/-102/-2, so the chosen location was not an air/solid/air control; refinement remained 14/16. |
|
||||
| `step2d_functional_21` | UBT PID 8224, passed, peak 1.58 GiB | PID 25652, exit 255, peak 3.67 GiB | `StrateConnectivity` passed; refinement remained 14/16 because the fallback had been placed in a skipped diagnostic branch. |
|
||||
| `step2d_functional_22` | UBT PID 26528, passed, peak 1.62 GiB | PID 24396, exit 0, peak 3.68 GiB | Both required connectivity tests passed; the fitted audit directly confirmed 16/16 routes at step 2. |
|
||||
| `step2d_functional_23` | Build not requested | PID 15176, exit 0, peak 2.44 GiB | `PassageLandsInOpenSpace` passed. |
|
||||
| `step2d_functional_24` | Build not requested | PID 26336, exit 0, peak 2.42 GiB | `RedefinedFieldTraversalSeeds` passed across three seeds. |
|
||||
|
||||
The manual `Win32_OperatingSystem` memory probe was denied once before a launch; no Unreal process
|
||||
was started by that probe. The harness's own native memory preflight succeeded on subsequent
|
||||
launches. No files outside the workspace were deleted.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.1 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.9 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 7.5 KiB |
@@ -0,0 +1,131 @@
|
||||
# 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.
|
||||
Reference in new issue
Block a user