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
This commit is contained in:
1 parent
53a1e69af7
commit
4afea7c802
15 files changed
+1007
-99
No files matched your search
@@ -0,0 +1,172 @@
|
||||
# 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`.
|
||||
Reference in new issue
Block a user