Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Linux18/REPORT.md
T
Fr0zkaandClaude Opus 5.5 dcf0763ec5 wip(assembler): round L18 -- FloatingIslands false floors removed; shared strate ceiling
FI geometry v3 drops the all-XY lower boundary seal that created false floors (3.5/8 m); the
ceiling comes from the shared VF_ApplyUpperBoundarySeal and AppendStratumBoundaryCeilings path
for every generator, at each strate's own configured upper boundary (owner: every strate has a
ceiling). Far-LOD ceiling continuity: 0 gaps at LOD4-8. SurfaceWorld bit-identical to L14
(14 configs + 24 m crossing); FI deterministic (28-row matrix); route parity and proofs pass.
Unreal: FI geometryVersion 2->3 and the shared upper-seal helper extracted (UBT compile needed on
the owner PC). Open: small ceiling holes; lower-stratum LOD ring steps seen through the FI void.

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

14 KiB
Raw Blame History

Linux18 — FloatingIslands stratum boundaries

Result: FloatingIslands geometry v3 removes its false lower all-XY seal, keeps the ceiling from the shared upper-boundary seal, and projects missing ceiling cells for every generator. SurfaceWorld hashes match the approved L14 baseline at 8704129 in every checked configuration.

Scale in the Unreal route

AVoxelWorld::CoreVoxelSizeCm defaults to 25 cm, and GetActiveVoxelSizeCm() resolves the runtime value (VoxelWorld.h:300, VoxelWorld.cpp:7495). The adapter writes the resolved size to the snapshot (VoxelForgeCoreAdapter.cpp:1019); AVoxelWorld imports it with ResolvedWorldSnapshot::FromJson (VoxelWorld.cpp:7597, VoxelForgeCore.cpp:916). S1 records this single active size source and the 32-Core-voxel tile rule (Round5 REPORT.md).

At the current 25 cm setting, SurfaceWorld strata use 8 m per slot chunk: the Unreal surface plan multiplies the slot range by 32 Core voxels (VoxelForgeCoreAdapter.cpp:280; CHUNK_SIZE=32 in VoxelTypes.h:211). FloatingIslands uses 4 m per owner-authored chunk: the adapter’s owner size is VOXEL_SIZE (VoxelForgeCoreAdapter.cpp:33; 12.5 cm in VoxelTypes.h:213), and its plan multiplies 32 owner voxels by the serialized owner/Core ratio, currently 12.5/25 = 1/2, or 16 Core voxels (VoxelForgeCoreAdapter.cpp:441). For chunks 0…−15 that gives z bounds −60…+4 m. This is the two explicit coordinate conventions in the game route, not a global change from 8 m to 4 m.

Standalone uses the same owner/Core ratio and chunk formula (OwnerWorldLoader.h:302, WorldAssemblyPrototype.h:488); no current Unreal/standalone scale disagreement was found. L18 also removed the standalone-only two-Core-voxel bounds inset so recipe bounds match the Unreal plan. The owner decides whether either authored scale changes.

Fix and ceiling

Geometry version 3 preserves the island shapes and removes only the lower all-XY seal. The upper seal calls the shared VF_ApplyUpperBoundarySeal density primitive; the shared two-sided seal uses the same upper-band math (VoxelDensityPrimitives.h:44). Resolved bounds come from each strate’s own range. The shared AppendStratumBoundaryCeilings mesh path runs for every generator and LOD, adding a plane at the resolved upper boundary where the mesh lacks coverage. It suppresses an existing plane only when nine probes show full cell coverage (ShapeWorldInternal.h:36, FarShellsInternal.h:894, VoxelForgeCore.cpp:2207). The underside normal points into the room, so the existing material lighting renders the interior face. This adds no FloatingIslands-specific height.

For the captured FloatingIslands strate, the upper bound is z=+4 m and its configured 0.5 m seal gives an interior-facing ceiling surface beginning around z=+3.5 m. The density probe crosses into the seal at 3.5 m and exits at z=4.019 m; z=7.75, 8.0, and 8.25 m remain air with no crossing. The lower all-XY seal is removed; remaining geometry below −60 m belongs to the lower world and is visible in the ray traces. Thus the apparent 3.5 m “floor” is the retained ceiling when viewed from inside; the 8 m floor is absent. No chunk size changed.

The owner’s decision and version-3 recipe say an underground strate has a ceiling at its configured upper boundary. “Farther to breathe” comes from a taller configured range. I updated the stale architecture-table wording “open void” to say the islands sit beneath the shared ceiling.

Ceiling continuity

The final audit used 16×16 interior samples per tile and paired samples along same-LOD tile edges. Far LODs pass continuously:

LOD Tiles with cap Interior hits Max root delta Edge gaps
4 48/48 12,288/12,288 0 cm 0
5 48/48 12,288/12,288 0 cm 0
6 48/48 12,288/12,288 0 cm 0
7 48/48 12,288/12,288 0 cm 0
8 153/153 39,168/39,168 0 cm 0

LOD0, 2, and 3 also hit all tested samples. LOD1 missed 3 of 12,288 interior samples (0.387 cm maximum root delta) and had no shared-edge gaps. The readable upward view is captures/floating-islands-ceiling-up.jpg.

Dark tile-aligned patches

They are lower SurfaceWorld triangles visible below the removed false lower cap, not empty rays and not a viewer dark-square overlay. Traces in the final island export found:

  • Pixel (700,720): first hit at 104.924 m on non-skirt LOD2 tile (-2,2,-2,2), z=−62.925 m, normal-z 0.266; another LOD2 tile hits z=−69.942 m.
  • Pixel (1050,650): first hit at 168.051 m on non-skirt LOD3 tile (0,2,-2,3), z=−72.594 m, normal-z 0.895; lower LOD4 geometry is also hit at z=−112.229 m and −120 m.

The ring probe measures real LOD height steps on those lower surfaces. I left them visible: suppressing those triangles would hide valid lower-stratum geometry, while changing the lower strata or SurfaceWorld would exceed this local fix. The sampled rectangles are not missing tiles or floor holes.

Cross-LOD ring steps

Entries are median / p95 / maximum absolute edge-height difference in centimetres, then gap count. The L18 column is the final matched island camera. The large remaining steps are lower-stratum terrain, not the upper ceiling.

LOD edge L17 before L17 after L18 final
0→1 3.451 / 8.920 / 449.158; 14 —; 0 samples —; 0 samples
1→2 26.642 / 148.262 / 149.862; 0 0 / 0 / 0; 0 147.141 / 148.403 / 149.862; 0
2→3 0.134 / 198.730 / 773.318; 8 0 / 0 / 0; 0 128.603 / 200.789 / 773.318; 8
3→4 3.269 / 47.875 / 188.531; 27 0 / 0 / 0; 0 3.269 / 47.774 / 188.531; 27
4→5 29.975 / 130.496 / 445.444; 6 0 / 0 / 30.957; 1 29.992 / 124.373 / 443.482; 6
5→6 12.234 / 127.224 / 536.573; 32 12.234 / 127.224 / 536.573; 32 12.234 / 127.224 / 536.573; 21
6→7 29.013 / 301.752 / 42,624.479; 0 28.892 / 291.861 / 945.477; 0 29.013 / 301.752 / 42,624.479; 0
7→8 83.843 / 1,225.416 / 3,755.407; 32 83.843 / 1,225.416 / 3,755.407; 0 83.843 / 1,225.416 / 3,755.407; 0

SurfaceWorld regression hashes

The 14-run check compared each final output to Saved/Linux/l14-final-hash-sw-clang-off-w12-r5.log from the L14/8704129 baseline: Clang -ffp-contract=off and GCC default, W1/W8/W12, with five W12 repeats. All 14 matched the whole-view, full-detail, LOD0–8, and exact-query rows. The 24 m crossing check likewise passed all 14 compiler/worker configurations against their L14 compiler-specific references.

Whole view D/M/P/T: c10697a8f48380c7 / e75c9119a1498cd5 / 49a9a8d1835a6c8c / edcb23288b5e8724.

Full detail D/M/P/T: 0ee0579bd15cbbe4 / 32e5d4964d610fee / 1932b96ee4b1d910 / 69743c6bad3447dc.

LOD Density Mesh Payload Topology
0 769f2a706d585a72 33eeeb39fa443816 645621a1d968983f c2457ed905036c9d
1 69cc5a5c0a2c60af b48335f5410c57d5 d15c5480162ab8ba feca1bd025823604
2 85deed5683a77202 53469895987aeea2 e55f8ae7e1532033 d5feb12a0e85c09b
3 6518caefb3be7e7f ec513c90b853a614 f62fa1137ff17f82 ccf1dcf681965816
4 62d4be96021992f4 f1e4c6efcc2615a9 9dc5f9c88be02f33 fe6f55125a07c3bf
5 5e4a8c38b8cea6fc 08ee56998aaf21e5 541eea8558f26cc8 6539374a8b3336d8
6 e036e95b9006945b 624a33f941a99b02 81b73e14f68bdf86 4de4c63ce1f80a56
7 8ee358af56a30d8d 46ab3c6184048b7c 0a6164b7e68e80c5 0c26b85bb03bc831
8 c3458e1cbdb9c471 46c03d0994d75192 8f89fc5bde12d230 d16dc0cf62031898

Exact query: 9 probes; density/unclamped e4d4a8eb95b35933, detail efcba20c0c70c415, collision e604823a249029bf.

The 24 m crossing W12×5 hashes match those same aggregate whole-view, full-detail, and exact-query values on both compiler references; the full check compared all 12 rows per run.

FloatingIslands’ representative W12×5 whole-view D/M/P/T is ca7f375cded78f1d / da003331c554f8f3 / 0d2e74862b4ee500 / b7a7177af8915a21; full-detail is fc71abf85f5b9373 / e139b32d42ecfa29 / 28a2414e41de59bd / d61ca68ca64f74ca. Exact query is 4ef614485815ee30 density/unclamped, efcba20c0c70c415 detail, e604823a249029bf collision. Clang and GCC representative hashes agree, and all nine LOD rows stayed stable across the 28-run matrix.

Other invariants and Unreal edits

  • Final matrix: 28/28 rows passed; repeated runs were stable within each compiler. Route parity had 0 mismatches across 782,026 FI and 910,651 SurfaceWorld exact samples. Proof audits had 0 violations: FI 9,048 blocks / 12,042,888 samples; SurfaceWorld 27,479 / 36,574,549. Readiness negative controls were caught; walkability passed 4,000/4,000 FI and 5,642/5,642 SurfaceWorld samples.
  • L3 FP-contract preamble/self-test, L4 FLazy, L7 shared cache, L9/L12 proofs, L11 readiness/crash handling, L13 route binding, ARCHITECTURE §8.10, and async/MPSC/Epoch paths remain intact. Both final compiler runs started without the Core FP-contract self-test refusing the build. No async route was added.
  • Unreal-side edits are limited to VoxelForgeCoreAdapter.cpp, bumping FI geometry version 2→3 so serialized recipes pick up the lower-seal removal, and the shared VoxelDensityPrimitives.h, extracting the common upper-seal math used by v3. The Unreal target could not be compiled on this Linux host.

Captures

All JPEGs are below 300 KB. Before/after pairs use matched cameras: FI flat square (-11.6124,-118.2212,-19.8452), yaw/pitch 0/0; FI island (-22,-19,-22.8), 0/−4; SurfaceWorld spawn (0,-35,-487.94), 0/−22; horizon uses the same spawn camera with pitch 0. The ceiling view uses the island camera with pitch 80. The SurfaceWorld pairs look the same; the exact hash checks certify its output bit-for-bit.

  • FI flat square: captures/floating-islands-flat-square-before.jpg, captures/floating-islands-flat-square-after.jpg.
  • FI low island: captures/floating-islands-island-view-before.jpg, captures/floating-islands-island-view-after.jpg.
  • FI upward ceiling: captures/floating-islands-ceiling-up.jpg.
  • SurfaceWorld L1 spawn: captures/surface-world-l1-spawn-before.jpg, captures/surface-world-l1-spawn-after.jpg.
  • SurfaceWorld horizon: captures/surface-world-horizon-before.jpg, captures/surface-world-horizon-after.jpg.
  • Flat-square diagnostic without tile edges: captures/floating-islands-flat-square-no-edges.jpg.

Failed or retried runs

  • The first density-probe link omitted legacy compatibility objects and failed with undefined references. Relinking with the legacy implementation objects succeeded; both boundary probes then ran.
  • The initial 4×4 continuity audit failed at far LODs 4–6 and found edge gaps. The shared all-LOD boundary cap and final full-cell coverage check replaced the center-only deduplication; final 16×16 LOD4–8 continuity passed with zero edge gaps.
  • An early matrix checker compared Clang contraction-off hashes directly with GCC default hashes and reported FI mismatches. The checker was corrected to test repeated runs within each compiler and the L14 compiler-specific references; the final 28-row matrix passed.
  • An early offscreen capture drew all skirts and showed an artificial slab. The capture now applies the viewer’s hidden-skirt mask; final matched captures were regenerated.
  • A GCC build interrupted by owner steering produced no binary and was rerun. A pre-correction Clang build was superseded by the final build. No final build or matrix run failed or exceeded the runtime limits.

Resources and owner note

Final builds: Clang 19 exit 0 in 31.689 s, peak RSS 436,088 KiB; GCC 14 exit 0 in 48.648 s, peak RSS 903,168 KiB. The largest measured runtime process was 897,276 KiB RSS. All processes stayed below the 6 GiB address-space cap; CPU affinity was 0–11, worker maximum 12, normal priority, and governor powersave. No run exceeded 30 minutes or stalled for 15 minutes. See BuildResources.md.

Owner note: SurfaceWorld stayed bit-identical to L14. FloatingIslands now retains a ceiling at its configured upper strate boundary while removing the false lower all-XY floor. At the current plan that is a z=+4 m boundary with a 0.5 m seal; its distance above the islands comes from the configured range. The small Unreal edits are listed above and need an owner-machine UBT compile.

Orchestrator review (Claude)

  • Merged. SurfaceWorld is bit-identical (14 configs plus the 24 m crossing); the FI false all-XY lower seal is removed; the ceiling comes from the shared, strate-parameter upper-boundary seal and ceiling path (owner rule: every strate has a ceiling, height from its own parameters). The Unreal edits are a pure extraction of the existing upper-seal math plus the FI geometryVersion 2→3; they need a UBT compile on the owner PC.
  • The scale answer: both conventions are deliberate and agree between Unreal and the standalone (SurfaceWorld 32 Core voxels per chunk; FloatingIslands 32 owner voxels = 16 Core voxels). Nothing rescaled.
  • Still open (L19):
    1. Small black holes in the FI ceiling, visible near the top of floating-islands-flat-square-after.jpg; compare LOD1 missing 3/12,288 continuity samples.
    2. The owner's ledges are most likely the LOWER stratum's terrain seen through the floorless FI void: ring steps of 147 cm median at LOD1→2 and 129 cm at 2→3 remain in that terrain. "Valid lower-stratum geometry" with metre-scale cross-LOD steps is still a bug the owner can see.
  • Exports (229 MB .vfmesh) are not committed.