Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux85/REPORT.md
T
Fr0zkaandClaude Opus 5.5 06f558dc91 streaming: split dense passage-junction grid fills; heavy-first order + far-parent deferral in Unreal (L85)
Tiles with passage-overlap score >= 9 split grid fill over up to 4 helper lanes (disjoint rows,
same per-sample order, join before MC) when workers are idle. FI junction tile fill 173 -> 99 ms;
estimated serial floor ~0.55-0.60 s. Readiness essentially unchanged (FI/TN LOD0-2 ~2.15 s @W12):
the limit is now aggregate work, not single tiles.
Unreal: LOD0-2 ordered by passage overlap before travel/distance (L80 modes kept); far parents
built after LOD0-1, LOD2 gated on them; helper budget via ParallelFor. Unreal null-RHI FI
arrival: LOD0-2 resident at 3.65 s.
All tile hashes identical to L84 (four whole views). Fast tier PASS; Linux UE host builds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
2026-10-28 02:02:32 +01:00

5.4 KiB
Raw Blame History

Linux 85 — split heavy grid fills

Split and floor

Full-resolution passage tiles with overlap score 9 or higher can split density-grid fill over up to four helper lanes. Lanes copy the tile’s worker-local sampling caches and passage mask, write disjoint grid rows, and join before marching cubes. Each sample keeps the same evaluation order. The helper budget is limited by active tile workers under the 12-CPU affinity, so saturated W12/W16 work stays serial inside each tile.

Matched W8 profiles show the junction tile (0,1,-93,lod0) improved. Times are medians of three L84/L85 profiles; each tile materialized 42,875 samples.

View Junction service, L84 → L85 Junction grid fill, L84 → L85 Slowest full-grid service / fill, L84 → L85 Estimated floor, L84 → L85
FI 243 → 167 ms 173 → 99 ms 243 / 173 → 224 / 167 ms 0.560 → 0.547 s
TN 168 → 159 ms 121 → 100 ms 243 / 172 → 246 / 186 ms 0.593 → 0.595 s

Floor = median base-shape time + median far-parent time + median per-run slowest full-grid LOD0 service. The junction fill fell 43% in FI and 18% in TN, but the estimated floor moved only slightly: the slowest tile can be a different, unsplit tile. Readiness also stayed close to L84 overall, with mixed W8 results and nearly unchanged FI/TN W12 results.

Cold LOD0–2-ready / whole-view seconds. L85 uses one warmup then three interleaved W8/W12 pairs per stratum; L84 values are from the L84 report.

Stratum L84 W8 L85 W8 L84 W12 L85 W12
SurfaceWorld 1.021 / 2.209 0.976 / 2.166 0.990 / 2.081 0.961 / 2.019
FloatingIslands 2.264 / 3.429 2.286 / 3.469 2.180 / 3.341 2.162 / 3.306
TunnelNetwork 2.269 / 3.377 2.323 / 3.377 2.146 / 3.153 2.147 / 3.140
VerticalShafts 1.127 / 2.080 1.243 / 2.229 1.086 / 2.023 1.080 / 2.000

Unreal and brick look

VoxelWorld.cpp now orders outstanding LOD0–2 tiles by passage overlap before its existing travel/distance order, while keeping L80 speed-aware modes and the collision-critical ring. Initial compile omits far parents; the Unreal scheduler builds them after desired LOD0–1 tiles are loaded and gates LOD2 until publication. The Core task adapter passes the available helper budget to Unreal ParallelFor.

The null-RHI FI-start trace reached 1,216/1,216 resident LOD0–2 tiles at 3.650 s, before movement began; the center was (3,0,-93). Trace: Saved/Linux/l85/unreal-fi/fi-arrival-l85.trace.jsonl.

Per-tile passage masks prune passage candidates at tile scope. They do not prove the sign of the complete density field inside a brick, so they do not make a cheap, sound brick skip available; no new brick audit was run.

Hashes and checks

L84 and L85 whole-view and per-tile density, mesh, payload and topology hashes match exactly; zero tile mismatches.

Stratum Tiles Density Mesh Payload Topology
SurfaceWorld 2,850 40b76d0072a2adcd 8559df0850d4d7f1 7700965ff31ac702 0e7f2a16b4cc71a9
FloatingIslands 2,249 99ca213b21ce86e4 2977525405b79fff 3d7d2efb581710bd af1916c949224871
TunnelNetwork 2,233 8d23c26f5c092be1 15c3aad2e29d9ea0 3d48f68d511c21df 5b1584676884edd8
VerticalShafts 2,329 876b44981d106be3 aaef57cb08bd6845 b19617df9f4acbb1 e8eee991260adff4

Fast tier: PASS, 274 checks, 286.5 s. Linux VFHostEditor: PASS, final post-timing UBT invocation used -NoUBA -MaxParallelActions=4, taskset CPUs 0–11, and no address-space limit. The prior full compile built 35/35 actions; three existing RealtimeMesh deprecation warnings remain. The per-tile W8 profile and timing runners used taskset and the 6 GiB address-space limit. Headless processes in hash and fast runs used both limits.

Source files

  • Source/VoxelForge/Private/VoxelWorld.cpp — Unreal tile ordering, far-parent deferral and helper-lane budget.
  • Source/VoxelForge/Private/VoxelMarchingCubesMesher.cpp, Source/VoxelForge/Public/VoxelMarchingCubesMesher.h — parallel grid-fill hooks and worker joins.
  • Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h, Standalone/Core/src/VoxelForgeCore.cpp — scheduler API, worker-local context and overlap scoring.
  • Standalone/Core/src/ShapeWorldInternal.h, Standalone/Core/src/WorldAssemblerInternal.h — cloneable passage mask and cache-mode access.
  • Standalone/Source/StreamingWorld.h, Standalone/Source/StreamBenchmarkPipeline.h, Standalone/Source/VoxelForge/Private/VoxelMarchingCubesMesher.cpp, Standalone/Source/VoxelForge/Public/VoxelMarchingCubesMesher.h — headless scheduling and split fill.

Failed runs

  • The first split smoke hit SIGBUS because helper threads wrote to their empty thread-local density buffer. Workers now write into the parent-owned grid; final hashes match.
  • Splitting every passage overlap was too broad and regressed FI/TN throughput. The final score-9 threshold and active-worker budget narrow it to dense junction tiles with spare capacity.
  • The first UBT attempt stopped in UnrealHeaderTool because <cstddef> followed the generated header include. Include order was fixed; final builds passed.
  • The first fast-tier launch lacked its round-specific binary. Building the final-stamp binary fixed it; the 274-check rerun passed.

No run exceeded 30 minutes. No install, commit, push or stash was made.