Files
Fr0zkaandClaude Opus 5.5 4afea7c802 wip(assembler): M3 round 2 -- islands get real mass: deep crust, separate tapered roots, arched spans
Pinch cause: SmoothStep taper drove the underside radius to zero at one point. Version 2: depth 0.75x
diameter (thin-pad control at 0.30 fails), 3-4 seeded roots, bounded contour warp + roughness, one
off-route side island, 3 m rock spans. Bounds/route/W1-W8-W16 pass. Open: legacy probe metadata says
25 cm but production legacy is 12.5 cm -- round 3 must fix the import scale contract.

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

11 KiB
Raw Permalink Blame History

M3 Round 2 — FloatingIslands look and standalone gates

Result: geometry version 2 gives the islands a deep, rough underside with separated tapered roots, variable-height placement, and broad arched connectors. Fresh matched CPU captures include overview, underside, edge/cliff, player-eye and route views. The measurable bounds, thickness, capsule-route and determinism gates pass. The native sample remains much denser than the owner field, so this is a deliberate routeable recipe rather than a visual-parity claim.

Owner recipe and scale

The legacy settings do not request a fixed island count. IslandDensity=0.5 is a per-hashed-XY-site existence chance. The owner parameters are spacing 112 legacy voxels, radius fields 24–48 legacy voxels, thickness ratio 0.6, vertical jitter/top flatten 0.6, roughness 3, blend radius 6 and boundary seal 4. The production Source constant and plugin-root CLAUDE.md say a legacy voxel is 12.5 cm; Core uses 25 cm. Round 2 therefore queries the legacy field at twice each Core coordinate and maps owner lengths to Core lengths at 0.5 scale:

Setting Owner Round 2 Core Physical intent at production scale
Site spacing 112 voxels 56 voxels 14 m
Radius 24–48 voxels 12–24 voxels 3–6 m radius
Roughness 3 voxels 1.5 voxels 0.375 m amplitude bound
Blend radius 6 voxels 3 voxels 0.75 m
Boundary seal 4 voxels 2 voxels 0.5 m

There is a scale conflict to resolve before importing this recipe. The frozen owner probe metadata and Standalone/Source mirror say 25 cm, and the radius comment describes 12–24 m diameters at that scale. Production Source and CLAUDE.md say 12.5 cm, which makes the same radius fields 6–12 m diameters. The audit uses the production 12.5 cm field, with legacy anchor (48, 16, -1904.035) mapped to Core (24, 8, -952.016). Round 3 must fix the snapshot producer/metadata and publish one import scale contract; it must not silently choose between these interpretations.

The native planner requires three route-connected primary islands, then uses the 0.5 density roll for optional off-route sites; this seed made one, for four islands and three connectors. That is a stated routeability constraint, not an owner fixed-count setting. Geometry version 2 adds a crust depth bonus of 0.15 radius and a root depth of 0.75 radius to the owner 0.6-ratio body. Total measured depth is 0.75 of island diameter. The deeper roots and guaranteed route account for the local density increase below.

Visual review

The round-1 reading was substantially right. Its low thickness ratio and SmoothStep taper drove the underside radius to zero at the bottom plane. The vanishing cross-section made the underside gradient collapse at a shared point and produced the radial crease/pinch. The old profile also had no independent roots, and its main route lay on a nearly straight chain.

Version 2 gives the crust a broad, gently bowed bottom surface, then smooth-unions three or four seeded ellipsoid roots per island. Their lengths taper independently, so they do not converge at one apex. The bounded 6.3-Core-voxel contour warp breaks the silhouettes; 1.5-voxel surface roughness is faded to zero across a three-voxel surface band. The certified boxes include the contour warp, roughness and blend reach. The underside and edge captures show the additional mass and root lobes.

The three primary islands form a bent, vertically fitted traversal. This seed also produces one higher side island that is not on the route. There are still three connectors because the route has to cross the three primary sites; they are 3 m wide, 1 m thick at the ends, and their underside sags by up to 2 m at midspan. Each is marked sharp-tag-ready. The captures show a rock-span profile rather than the old narrow straight rods, although the route-connected backbone remains visually legible as a chain. The route-island tops vary by about 0.67 m; the off-route island is about 1.46 m above the middle route island.

The underside and edge captures are close views of the middle island so the larger cluster does not set their scale. The player-eye view is an offline perspective render from 1.8 m above the route floor, using the 25 cm Core voxel scale and the approximately 1.8 m player height. These are field-mesh review images, not Unreal camera, traversal, or collision evidence.

View Capture
All five matched views Contact sheet
Cluster overview overview_matched.jpg
Underside and roots underside_matched.jpg
Thick crust and edge/cliff edge_cliff_matched.jpg
Player-eye toward next island player_eye_matched.jpg
Planned route route_matched.jpg

The CPU renderer lowered its process priority. All images are 640×258 pixels individually; the contact sheet is 640×1,290 pixels and 71,668 bytes. Every JPEG is below 300 KB. Legacy/native pairs use the same target, camera and scale. The legacy side remains much smaller because it is the exact stochastic owner field at the same physical anchor, not a hand-expanded parity target.

Standalone gates

The final Target All Core build and the audit wrapper passed. The wrapper samples the same 32,768 physical query locations for legacy and native timing.

Gate Final result
Recipe / plan / manifest hashes 5b8f27274bad89ba / ac33c9460b16337a / 0db30684eaefa75e
Bounds 515 boxes, 13,851 point samples, 74 unknown, 0 missed; shrunken-box control detected
Thickness 4 islands; minimum depth/diameter 0.75 vs 0.70 required; all pass
Thin-pad control Ratio 0.2999; all 4 islands fail, control detected
Route 28 segments, 254 capsule centers, 69,088 capsule samples, 1,430 support probes; 0 blocked, 0 unsupported, 0 grade failures
Minimum sampled density clearance 78 subvoxels (0.305 Core voxel)
Raised-route control (+8 voxels) Detected: 254 unsupported centers, 0 blocked
Field hash at W1 / W8 / W16 566b6115f1aaeb71 for all three; repeated plan stable
Query timing, 32,768 locations Legacy 64.64 ms; native 38.06 ms (0.589× legacy time, about 1.70× faster)
Local sign / occupancy difference 4.437% sign mismatch; 130 legacy-solid vs 1,380 native-solid samples

The sample contains 10.6× as many native-solid points as legacy (1,352 native-only and 102 legacy-only). This is a local sparse-field sample, not a global volume estimate. It confirms the native density difference visible in the matched images. The extra route backbone, thick crust and deep roots are the stated reasons; the native field is not being presented as owner occupancy parity.

The audit reparsed the unchanged existing M1 round-1 manifest hash c87ae279b0e26f53 and SurfaceWorld round-4 manifest hash 8933693d9560ba9f. No existing Core world evaluator, SurfaceWorld recipe or mesher implementation was edited. The complete M2 mesher hash matrix was not replayed in this round; the M2 report records the prior fixture mesh hash 9d58e0603f1bf9c7 and cliff tile hash fc7bd7a3cf997992.

Full audit data is in audit.json; the successful wrapper ledger is run_ledger.txt. Mesh extracts used for the captures and audit are in the same results directory.

Round 3 — Unreal delivery plan

  1. Reconcile the 12.5 cm production field with the 25 cm frozen-probe metadata at the snapshot producer. Add one explicit owner-to-Core length scale and reject payloads whose declared scale conflicts with it.
  2. Add the recipe and seeded plan to the existing optional world_assembly import path. Parse via ResolvedWorldSnapshot::FromJson; validate schema/geometry versions, recipe/plan/manifest hashes, stable IDs, bounds and scale before generation. Preserve round-trip JSON and stable IDs.
  3. Prove imported generation in a null-RHI BuildHost commandlet. Compare canonical plan/field hashes at W1/W8/W16 and exercise malformed-hash, unknown-version and mismatched-scale controls.
  4. Build the islands and sharp-tag-ready spans through the selected mesher path. Check chunk borders, LOD transitions, route visibility and finite bounds in Unreal. Keep the Core field available to server queries without requiring render meshes.
  5. Cook collision and sweep the actual player capsule over the imported route. Check floor support, clearance, grade and connector landings against cooked collision, then hand the owner the imported build, capture set, collision evidence, resolved scale note and exact source/hash manifest.

Round 2 did not add Unreal import, cooked collision, BuildHost proof or owner hand-off evidence.

Run ledger and scope

The final build used four compile workers at BelowNormal priority and completed in about 51 seconds. The final audit completed in 1.65 seconds and peaked at 58.8 MiB private memory; the CPU renderer completed in about 2 seconds. No run approached the 15-minute limit, no process crash occurred, and there was no 0xC0000142 retry. The build emitted the existing French vswhere.exe-not-found warning and VoxelStrateManager.cpp double-to-float conversion warnings before succeeding.

Every failed iteration before that final pass:

Failed run Result and correction
Core Target All compile Failed on one unqualified fixed-scale Q; qualified it and rebuilt successfully.
Audit 1 One unsupported route center at segment 36.
Audit 2 Diagnostic repeat showed support just beyond the 2.5-voxel search depth (solid by 3); extended/adjusted support fitting.
Audit 3 Used a stale Core library after source changes and repeated the route failure; rebuilt Core before continuing.
Audit 4 Raising the connector deck fixed support but caused 17 blocked capsule samples; reduced the route margin.
Audit 5 No blocked samples, but one unsupported center at segment 49 near a connector end; tapered endpoint detail.
Audit 6 After converting owner dimensions to production physical scale, the old 0.62-radius landing produced 17 blocked and 9 unsupported samples.
Audit 7 Top-detail attenuation alone left those same counts.
Audit 8 Diagnostic repeat located the route near a root-lobe edge; moving the landing to 0.38 radius and using a 1-voxel deck lift fixed it.
Renderer run The first renderer pass stopped after four views when a raster row reached HEIGHT; clamped the row to HEIGHT - 1, then regenerated all five captures successfully.

The repeated pre-final audit processes peaked at 44.6–58.8 MiB. No editor, viewer or GPU was launched. No owner project file, .uasset or Source/ file was opened for writing or changed; no project build was run. No commit, push or stash was made.

Source inventory

New source file in this round:

  • RenderFloatingIslandRound2.py — CPU-only matched capture renderer.

Modified source files:

  • Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h
  • Standalone/Core/src/FloatingIslandsInternal.h
  • Standalone/Research/WorldAssemblerM3/Round1/FloatingIslandsAudit.cpp (extended for round-2 physical-scale and visual audits)

Documentation and dialogue changes are in Standalone/Core/API.md, Standalone/DESIGN_WORLD_ASSEMBLER.md, CODEMAP.md and Standalone/Research/OwnerShapeWorld/gpu_field_port/LUNA_DIALOGUE.md.