Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux129/REPORT.md
T
Fr0zkaandClaude Opus 5.5 0d1140c117 research: tunnel reach study (L129, no-go; found a units mismatch in v225 bounds)
BuildPassageSpatialIndices adds the 4.335 m reach in core-voxel units, so the broadphase reaches ~1.08 m while
the sweep cutoff says 4 m. Physically-correct 2 m bounds are larger than v225's and 4.9-9.9% slower; captures at
all L125 poses pixel-identical. Patch kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-10-30 23:09:27 +01:00

55 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# L129 — tunnel reach
**Decision: no-go for performance.** The 2 m candidate passed the geometry checks, but it was slower than both timing references and failed every UE movement comparison. The count pass also found a units mismatch in v225's reach bounds, so the requested physical reach cannot be cut cheaply against the source as it stands.
## What the reach includes
The 4.0 m term is the signed-distance influence cutoff outside the bore. The bound adds 0.21 m for wall relief and reserves 0.125 m for the 0.50 m smooth corner (`width/6` is about 0.083 m). The plain shell is 0.75 m thick, so its minimum reach with relief is 0.96 m. The larger term wins: `r + max(R + 0.21 + 0.125, 0.75 + 0.21) + 0.05 m`. At `R=4 m` and the maximum `r=3.5 m`, that is 7.885 m.
The mouth blend is 5 m **along the route**, not an added radial reach. The open-air half-pipe's side wall is 1 m high; its rounded crest uses the same reach. L129 leaves the 0.75 m shell rule, smooth floor `h(s)`, rounded crest, and grade limit unchanged. The highest audited grade was 10.695°.
## Counts before the build
Counts cover the four owner strata at LOD0–2, with 993 route segments. “Pairs” are route-segment/sample checks; “support” is unique per-passage samples inside the distance cutoff. The v225 model's 29.87M pairs is close to the measured source profile's 29.41M.
| Reach and bounds | Pairs (M) | Support samples (M) | Overlap pairs (M) | Feature / proof-active tiles |
|---|---:|---:|---:|---:|
| v225 as coded, nominal 4 m | 29.87 | 8.57 | 20.90 | 721 / 677 |
| 4 m, physical bounds | 124.97 | 11.72 | 46.64 | 826 / 791 |
| 3 m, physical bounds | 87.06 | 8.84 | 30.42 | 787 / 764 |
| 2 m, physical bounds | 56.86 | 6.32 | 18.48 | 755 / 729 |
| 1.5 m, physical bounds | 44.74 | 5.21 | 13.93 | 743 / 718 |
Against a correctly bounded 4 m model, 2 m removes 54.5% of pairs and 60.4% of overlap pairs; 71 feature tiles and 62 proof-active tiles become free. Against the v225-as-coded count model, however, physical 2 m adds 90.3% of raw pairs and leaves 34 more feature tiles and 52 more proof-active tiles. Physical 1.5 m still adds 49.8% of pairs and leaves 22 more feature tiles and 41 more proof-active tiles. So the smaller reach does **not** unlock proofs or tile skips versus the shipped source.
The cause is in `BuildPassageSpatialIndices`: positions are converted to core voxels before the reach is added, but v225 adds the metre value directly. At 0.25 m per core voxel, the nominal 4.335 m bound is only 1.084 m per axis; the sweep cutoff itself remains 4 m. L129 converts the smaller physical bounds to core voxels. That makes its broadphase boxes larger than v225's, even though its actual influence cutoff is smaller. The extra segment/sample checks erase the predicted saving. The 2 m setting was selected from the pre-build counts and is the only reach fully timed.
## Timing and quality
Five interleaved L80 runs per W8/W12 cell were completed on a quiet machine (load 0.71, CPU idle 97.3%). L125 is the `b96dd73` source. Every near-ready cell and every whole-view cell was slower than L109 and b96dd73:
| Stratum / workers | Near vs L109 / base | Whole view vs L109 / base |
|---|---:|---:|
| S0 W8 | +11.1% / +9.3% | +7.5% / +7.2% |
| S0 W12 | +11.2% / +6.6% | +5.5% / +3.3% |
| S1 W8 | +16.7% / +7.8% | +8.7% / +5.3% |
| S1 W12 | +17.9% / +9.9% | +9.5% / +5.6% |
| S2 W8 | +12.8% / +8.4% | +5.3% / +5.2% |
| S2 W12 | +17.1% / +9.1% | +10.3% / +5.7% |
| S3 W8 | +13.4% / +4.9% | +6.3% / +2.8% |
| S3 W12 | +18.2% / +6.9% | +8.9% / +4.2% |
Five UE runs at 30 m/s also missed the b96dd73 gate: near coverage 38.05% vs 40.22% (−2.17 points), far holes 4.03% vs 3.46% (+0.58 points), tick p99 11.54 vs 10.80 ms (+0.74 ms), and worst tick 14.12 vs 13.27 ms (+0.85 ms). The Linux UE host build passed after timing with `-NoUBA -MaxParallelActions=4`; Unreal was not run under `prlimit`.
Fast verification passed (259 checks; 5 historical diagnostics), walkability passed at 21,425/21,425, all three passage grades stayed below 15°, and the seam audit passed 4 joins / 4,900 samples with no mismatches. Clang and GCC hashes matched for W1/W8/W12 across all three tested owner layouts (18 cases). Evaluator version 226 and three canonical owner hash baselines were added.
The 23 L125 pose captures and six paired mouth close-ups are verified. All before/after PNGs are pixel-identical; these views show no visible change. The floor probe peaked at 7.9 mm, above a strict “few millimetres” reading.
## Captures and records
- [L125 poses: before / L129 comparison](captures/COMPARE.html)
- [Mouth close-ups: before / L129 comparison](captures/L129-mouth/COMPARE.html)
- [L80 timing results](../../../../Saved/Linux/l129/timing/summary.json)
- [UE movement results](../../../../Saved/Linux/l129/movement/summary.json)
- [Pre-build count results](../../../../Saved/Linux/l129/precount/results.csv)