Files
Fr0zkaandClaude Opus 5.5 48fa028086 wip(assembler): M3 round 3 -- separated islands + Unreal island route (owner build 18:46)
Islands read as separate (91.89% open sky at mid-height), underside cavity closed,
rim teeth were capture shading. Island manifest import + BuildHost proof passed on the
pre-cache tree; M1 SurfaceWorld and M2 V1/V2 gates passed.

Known open: final XY-column cache compiled in the owner build but is unverified;
island LOD0 p95 ~155 ms misses the 133 ms sprint deadline (legacy ~43 ms); the island
manifest only fits the BuildHost fixture layout (owner's world: Core init fails,
empty world) -> round 4 builds plans inside Unreal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
2026-10-10 20:53:03 +02:00

11 KiB
Raw Permalink Blame History

World assembler M3 round 3

Date: 2026-10-10

Status

The island recipe, manifest import, BuildHost world proof, and matched offline captures are in place. The final profiling pass found a remaining LOD0 sprint budget miss, and a follow-up XY-column cache was then added to FloatingIslandsInternal.h. That last source edit has not been compiled or exercised: the command runner began failing to start with Windows status 0xC0000142 after a completed profile run. Therefore the verified BuildHost results below apply to the root-parameter-cache version immediately before the XY-column-cache edit, not to the current tree. Treat round 3 as not fully verified / do not hand off the current binary yet until that edit is either verified or reverted and rebuilt.

Scale contract

The owner's legacy voxel size is 12.5 cm (Source/VoxelForge/Public/VoxelTypes.h, VOXEL_SIZE). Core operates at 25 cm, so owner-to-Core lengths multiply by 0.5 and Core-to-owner lengths multiply by 2. Island radii are 24–48 owner voxels = 3–6 m = 12–24 Core voxels. Site spacing is 112 owner voxels = 14 m = 56 Core voxels. Standalone's old 25 cm metadata was not authoritative; the import validator and audit metadata now pin 12.5/25 cm and the 1:2 ratio. The radius comment is corrected to this contract.

Shape review and measurements

Round 3's downscaled, matched offline captures show four distinct masses with sky visible between them; the three connectors remain traversable and read as narrow spans. The underside center is a shaded solid buttress/dimple, not a through-hole. The edge capture does not show the former sawtooth rim; the crust edge is smooth at the displayed scale. These are offline CPU renders, not captures from the owner's Unreal viewport.

At the sampled mid-height plane, the open-sky measure is 1,462 / 1,591 = 91.89% of the cluster XY bounding box. Sampling is at 1 m spacing, Core Z -964.039. Island radii are 3–6 m; connector full width is 1.25 m, thickness 1 m, blend 0.75 m, and roughness 0.25 m. The plan has four islands, three connectors, and 28 route segments. The route audit checks 68,816 capsule samples and reports no blocked, unsupported, or over-grade samples; minimum clearance is 99 subvoxel samples.

The mass audit checked 515 bounds / 13,851 samples with no missed island bounds. The thin-pad negative control was caught on all four islands (measured ratio 0.2999 against required 0.70; passing minimum was 0.75). The raised-route negative control was also caught. The underside audit samples the center column at nine points; rerun the audit after resolving the unverified cache edit to retain that numeric output in results/audit.json.

Import and season hashing

Import Standalone/Research/WorldAssemblerM3/Round3/results/world_assembly_floating_islands.json through the existing UVoxelSettings manifest JSON import (SourceWorldAssemblyManifestJson / Import World Assembly Manifest JSON). Then assign that settings asset to AVoxelWorld and enable Voxel World → Core → Use VoxelForge Core (bUseVoxelForgeCore). The recipe remains on the Core world-assembly route. Its assembly content hash enters the season hash only when Core is enabled; Core-off keeps the legacy season identity. Water remains fixed for the season and player edits remain unrestricted.

Verified artifact hashes:

  • Plan: 61fd58f65c5fe157
  • Recipe: ef1340d32b072ba3
  • Nested floating-island manifest: 54160b4d25d0279f
  • World assembly content: 94b563f1ce622def
  • W1/W8/W16 standalone determinism: 5764b702482740e8

BuildHost proof recorded before the final unverified edit

BuildHost runs used Tools/BuildVoxelForgeCoreHost.ps1 and the test scripts with a 900 second timeout, BelowNormal priority, and at most four parallel build actions. No owner project/editor was opened or built. Measured process peaks stayed below 4 GB. The passing island run recorded:

  • 2,553 standalone tile hashes matched; Core reported 512 LOD0 tiles, 448 LOD1 tiles, 432 LOD transitions, 573 local-coverage checks, and 3,438 neighbor-face checks.
  • Aggregate hashes: density e46d4280f73f03f3, mesh a7c92c6ce22ba08b3, payload 040e800d58e1c2f1, topology da689102032f94da.
  • Coverage completed; collision was cooked and capsule contact passed on both an island top and a span.
  • Height/anchor agreement passed for the island and span; content anchors reported 14 trees and no floaters. Corrected strate and atmosphere strate both reported 1; water was enabled at local -49,376 cm and unchanged.
  • Blueprint edit passed: carve/fill on an island with legacy radius 6 (=75 cm) and strength 10; the 90 cm outside sample had zero density delta.
  • Core-off passed with legacy density unchanged; the Core-only hash was omitted while Core was off.
  • SurfaceWorld M1 regression test passed with the original worker hash 0x8cc18e2981c50c4e; HybridV1 and HybridV2 M2 recipe fixtures passed.

Logs are in results/m1_surfaceworld_buildhost.*, results/m2_hybrid_v1_buildhost.*, results/m2_hybrid_v2_buildhost.*, and results/m3_floating_islands_buildhost.*. These pre-profile logs do not prove the final XY-column-cache edit.

Streaming profile and remaining work

The final instrumented BuildHost commandlet completed and its internal validator printed PASS. The outer PowerShell wrapper then exited 1 because its console-title channel failed (0xE9); this is recorded as a wrapper failure despite the commandlet pass marker. The timing profile showed density/meshing dominates; classifier and column work were negligible.

The same measured per-tile p95 is compared with the available time at each movement speed: at 600 cm/s the deadlines are 1,333.333 ms for LOD0 and 2,666.667 ms for LOD1; at 6,000 cm/s they are 133.333 ms and 266.667 ms, respectively. Core and legacy timings from the instrumented run were:

LOD Tile kind Core p95 Legacy p95 Walk deadline / result Sprint deadline / result
0 Air 0.017 ms 38.842 ms 1,333.333 ms / pass 133.333 ms / pass
0 Island 157.671 ms 43.702 ms 1,333.333 ms / pass 133.333 ms / 24.338 ms late
0 Mixed/span 153.082 ms 42.146 ms 1,333.333 ms / pass 133.333 ms / 19.749 ms late
1 Air 0.009 ms 46.549 ms 2,666.667 ms / pass 266.667 ms / pass
1 Mixed/span 151.685 ms 42.701 ms 2,666.667 ms / pass 266.667 ms / pass

LOD1 mixed was 151.685 ms against its 266.667 ms sprint deadline; LOD1 air was 0.009 ms. The root-parameter cache preserved hashes but did not clear the LOD0 sprint miss. The XY-column cache was added afterward to target the measured mesher/density hot path; it has not been compiled or measured. Resolve that before claiming the streaming goal complete.

Run ledger and incidents

  • SurfaceWorld M1, HybridV1 M2, HybridV2 M2, and the island BuildHost proof all passed on the verified source state described above.
  • Earlier island BuildHost attempts, in order, failed as follows: (1) desired tiles were 2,227 instead of 2,553 because the route player was absent; (2) the GameMode spawned an origin pawn; (3) possession caused 2,557 desired tiles because dynamic collision support was active; (4) the support tile key did not match; (5) disabling the collision gate restored 2,553 tiles but exposed a hash mismatch at (-2,0,-31); (6) CreateLocalPlayer(true) hung and was manually stopped after roughly 3–4 minutes; (7) the base UPlayer fixture lacked controller registration/root transform and failed preflight after 5:10; (8) explicit AddController, root setup, and SetActorLocation fixed the fixture and the island proof passed. The manual stop was not a crash.
  • Earlier compile failures included an invalid DuplicateObject overload, private helper access, an unresolved GetEffectiveWorldSeed export, and integer narrowing. They were corrected; subsequent builds passed.
  • One initial standalone build used the wrong -Workers switch and failed immediately; -CompileWorkers 4 succeeded.
  • M1 threshold experiments before restoring the original chunk mapping failed at LOD8 edge bounds: threshold 4.0 measured 52,075.827 > 51,200 at tile (2,0,-1); 4.125 measured 53,960.427 > 52,800; 4.25 measured 54,806.919 > 54,400. Threshold 4.5 passed that edge check but left no full-span LOD0 candidate. Restoring SurfaceWorld's original 32-voxel chunk mapping, using the separate 16-Core-voxel island mapping, and restoring threshold 4.0 made M1 pass.
  • The last commandlet itself passed, but the wrapper returned 1 on console error 0xE9. Subsequent PowerShell and cmd.exe launches returned 0xC0000142; the requested retry was made, then additional shell inspection launches also failed. No further build was attempted. No new UECC-* folder was reported by the latest BuildHost crash check; only historical folders dated 2026-09-17 and 2026-10-08 were present.
  • No 0xC0000142 BuildHost retry was observed in the completed runs. Peak recorded BuildHost test process memory was about 3.98 GB.

Owner hand-off

After the final cache edit is verified, import the manifest above into UVoxelSettings, assign the settings asset to the world, and turn on bUseVoxelForgeCore. To find the cluster, start at the actor-local route point (-380, 631.8, -23,837) cm and follow the route toward the middle island (roughly +X / -Y). The center island is near actor-local (600, -306, -23,872) cm; the span contact is near (113, 161, -23,860) cm.

For an underside view, use a free camera near (600, -306, -24,750) cm, looking upward toward (600, -306, -24,300) cm. For an overview, start near (680, -5,000, -21,500) cm and look toward (678, -556, -24,100) cm. These are actor-local suggestions; apply the actor transform in the level. The contact sheet and matched captures are under this Round3 results/ directory and are downscaled offline renders; BuildHost validation uses null RHI.

Likely Unreal compile spots are VoxelSettings.h/.cpp, VoxelContentManager.h/.cpp, VoxelWorld.cpp, VoxelForgeCoreAdapter.cpp, and VoxelForgeExploreCommandlet.cpp; canonical Core changes are in Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h, Standalone/Core/src/ShapeWorldInternal.h, FloatingIslandsInternal.h, and WorldAssemblerInternal.h.

Source and artifact inventory

Round 3 adds these research/support sources: Standalone/Research/WorldAssemblerM3/Round3/FloatingIslandsAudit.cpp, BuildFloatingIslandsAudit.ps1, and RenderFloatingIslandRound3.py. Existing source edits include Standalone/Source/OwnerWorldLoader.h, Standalone/Core/src/FloatingIslandsInternal.h, Standalone/Core/src/ShapeWorldInternal.h, and Source/VoxelForgeEditor/Private/VoxelForgeExploreCommandlet.cpp. There is no new Unreal runtime source file for the manifest path. BuildHost scripts and .log/capture/JSON outputs are evidence/support artifacts.