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
173 lines
11 KiB
Markdown
173 lines
11 KiB
Markdown
# 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](results/captures/contact_sheet.jpg) |
|
||
| Cluster overview | [overview_matched.jpg](results/captures/overview_matched.jpg) |
|
||
| Underside and roots | [underside_matched.jpg](results/captures/underside_matched.jpg) |
|
||
| Thick crust and edge/cliff | [edge_cliff_matched.jpg](results/captures/edge_cliff_matched.jpg) |
|
||
| Player-eye toward next island | [player_eye_matched.jpg](results/captures/player_eye_matched.jpg) |
|
||
| Planned route | [route_matched.jpg](results/captures/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](results/audit.json); the successful wrapper ledger is
|
||
[run_ledger.txt](results/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`.
|