Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux160/REPORT.md
T
Fr0zkaandClaude Opus 5.5 aa458d3607 streaming: ahead-first admission, same-center rebuild suppression, Core key cache; off by default (L160)
30 m/s UE, 5 pairs: forward-cone readiness 14.2 -> 18.2% (+3.75 pp), all-around 39.5 -> 36.6%; p99 <= 11 ms in all
candidate runs, but worst tick, far holes and arrival regressed in some pairs. Rebuilds per crossing 7.2 -> 4.4; per
rebuild cost unchanged (not yet incremental). Source/: VoxelWorld.cpp, VoxelWorld.h (defaults unchanged).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-11-02 09:29:39 +01:00

4.7 KiB
Raw Blame History

L160 — ahead-first admission and desired rebuild cost

Result: Forward-first admission plus same-center rebuild suppression and Core-key caching raised median 55° travel-cone readiness by 3.75 percentage points. All five candidate game-thread p99s were at or below 11 ms, but the full bar failed: worst ticks regressed in 3/5 pairs, far holes in 3/5, and arrival in 2/5. Median all-around LOD0–2 readiness also fell. Keep the experiment controls off by default.

Measurements

Five interleaved W8 UE pairs ran at 30 m/s for 12 s plus a 5 s dwell, with eight effective tile slots. The pre-run load averages were 0.15 / 1.12 / 1.49. Each run recorded 45 center crossings. The forward-cone value uses travel direction: null-RHI supplied no camera-forward samples. These are desired-residency counts, not measured HMD visibility.

Moving readiness assembler/world median Candidate median Paired median change
All-around LOD0–2 39.46% 36.59% −3.07 pp
55° forward cone 14.19% 18.24% +3.75 pp

The cone covered about 23% of desired LOD0–2 tiles in both conditions. The cone improvement is clear, while the all-around average fell; behind readiness was 55.52% baseline versus 50.03% candidate.

Gate metric assembler/world median Candidate median Candidate result
Game-thread tick p99 10.571 ms 10.509 ms All five candidate runs: 10.106–10.560 ms; pass ≤11 ms
Worst tick per run 13.615 ms 14.057 ms No-worse failed in pairs 1, 2, 4; observed maxima 15.092 / 15.141 ms
Far holes while moving 3.238% 3.260% No-worse failed in pairs 2, 4, 5
First settled LOD0–2 arrival 2.458 s 2.460 s No-worse failed in pairs 1 and 3

The median UpdateChunks p99 changed from 9.30 to 9.18 ms. This small difference did not remove the worst-tick regressions.

Admission order

The baseline’s first twelve submitted near tiles were four travel-ahead critical tiles (direction class 1), then three forward-cone critical tiles (class 0), then five forward-cone regular tiles. Candidate order put the three cone critical tiles first, followed by the four travel-ahead critical tiles, then the same cone regular lane. Within cone and ahead classes, entries were ordered by distance with coordinate tie-breaks; side and behind entries retained stable order. Here class 0 is the 55° camera cone when available, or the travel cone in these null-RHI runs; class 1 is travel-ahead outside the cone.

Desired-set rebuilds

The set was not rebuilt only at center crossings. With exactly 45 crossings per run, baseline rebuilt on 313–334 frames (median 324, or 7.20 rebuilds per crossing). The candidate rebuilt on 193–211 frames (median 200, or 4.44 per crossing). Baseline recorded 171–198 same-center Core-region requests per run; candidate recorded 148–166.

The nonzero BuildDesiredTiles p95 was 7.08 ms baseline and 7.52 ms candidate (median across runs); its per-rebuild cost did not fall. The median Core desiredTiles query p95 fell from 1.96 to 1.25 ms, with a 77.5% median same-center cache-hit share. Median rebuild p50 was 3.91 / 3.98 ms. The candidate suppresses a forced rebuild after Core region compilation completes and reuses the Core base key list at an unchanged center. BuildDesiredTiles still rebuilds the UE desired and overlay sets on each trigger; this is neither an incremental full-set delta nor a time-sliced rebuild, so the remaining rebuild tail persists.

Checks and limits

  • Built VFHostEditor from the worktree with taskset -c 0-11, -NoUBA, and -MaxParallelActions=4; final build succeeded (3/3 actions). The VFHost PluginDeps/VoxelForge/Source symlink was restored to /home/jahni/VoxelM/Plugins/VoxelForge/Source afterward.
  • Fast tier passed: 268 PASS, 0 FAIL, 5 existing diagnostics. Canonical owner hashes match the L130 baseline; W1/W12 owner hashes and randomized W1/W8/W12 worker comparisons match. No generator or mesher source changed.
  • RunL160Movement.py passed py_compile; git diff --check passed. Final git diff --check was also run after writing this report.
  • HMD/camera-pose readiness and W12 movement timing were not measured. The directional proxy falls back to travel direction because the null-RHI run has no local camera sample.
  • The candidate combines admission ordering, region-completion rebuild suppression, and same-center Core-key caching, so the five-pair matrix does not isolate each effect. Geometry remained unchanged; no WorldAssemblyEvaluatorVersion bump was needed.

Logs and paired traces are in Saved/Linux/l160/; the matrix summary is Saved/Linux/l160/ue/movement/summary.json.

Changed Unreal source: Source/VoxelForge/Private/VoxelWorld.cpp, Source/VoxelForge/Public/VoxelWorld.h.