Files
VoxelForge/Standalone/Research/WorldAssemblerM3/Round1/REPORT.md
T
Fr0zkaandClaude Opus 5.5 53a1e69af7 wip(assembler): M3 round 1 -- native FloatingIslands recipe in Core (standalone)
Bounds 517 boxes, 0 missed, negative control caught; capsule route 1044 centers, raised-route control
fails; W1/W8/W16 stable (field bf3ce7da876431e2); 39 ms native vs 64 ms legacy. My review: islands read
as thin flat pads with a radial pinch under them, not rock; next round fixes the look.

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

175 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# M3 Round 1 — FloatingIslands standalone Core proof
**Result:** the new finite island field builds in Core and the standalone legacy bridge. The recipe,
bounds audit, worker-count field hashes and supported route pass for the frozen owner probe. The native
result is intentionally denser and more routeable than the stochastic legacy slice; this is a measured
visual difference, not a parity claim.
## Native recipe and deliberate differences
Added `FloatingIslandRecipeV1`, `FloatingIslandManifestV1`, `FloatingIslandFieldV1` and the planner to
Core. The island field is a reusable feature family on the `island` channel; it is not a branch inside
the owner FloatingIslands generator. The standalone manifest carries recipe and plan hashes, seeded
anchors, stable IDs, a connected cluster graph, finite influence boxes, bridge parameters and route
points. Coordinates and density use the existing fixed scale of 1/256 voxel; one Core voxel remains
25 cm and negative density is solid.
The visual oracle was loaded from
[`type_6_FloatingIslands.json`](../../OwnerShapeWorld/core_strate_coverage/probes/type_6_FloatingIslands.json)
and queried through the legacy `GetDensityAt` evaluator. Its settings are seed 0, spacing 112 voxels,
density 0.5, radii 24–48 voxels, thickness ratio 0.6, vertical jitter 0.6, top flatten 0.6,
roughness 3 voxels, blend radius 6 voxels and boundary seal 4 voxels. The native recipe uses those
shape ranges and aligns its middle island to a detected legacy top at `(48, 16, -1904.035)` voxels.
The native shape uses a flat-ish top, an explicit finite underside plane, tapered radial support and
a bounded 12.6016-voxel three-harmonic lobe warp. This intentionally replaces the legacy query-space
3D fBM warp with a stable bounded contour function. The legacy source has no explicit lower plane in
its island max-SDF; the native bottom closes the taper instead of carrying the legacy centerline
degeneracy below the nominal island bottom. Native surface roughness remains bounded to the recipe's
3-voxel envelope.
The planner guarantees five primary route islands. `islandDensityQ16` selects up to two optional side
sites; this seed selected one, producing six islands and five sharp-tag-ready connectors. This differs
from the legacy stochastic density roll, which decides whether every grid site exists. The planner
keeps the route-connected islands in a narrower vertical band than the legacy strate: adjacent height
changes are clamped to the capsule grade contract, with a 5% grade reserve, and the serialized route
is fitted above its sampled capsule footprint. Connectors land 0.62 radii into the island tops, use a
4-voxel half-width and 3-voxel thickness, and extend the field through the landings. This is why the
local native slice contains substantially more rock than the old slice. The fixed-season water block
is not emitted here; player edits remain unrestricted, and this generation audit applies the route
law only to system-generated geometry.
## Bounds and route audits
Island AABBs include radius, maximum lobe displacement, taper Z, roughness and smoothing reach.
Connector AABBs include the swept bridge width, endpoint span, thickness, roughness and smoothing
reach. A box intersecting any feature influence box returns unknown; a box outside every feature box
gets the certified all-air interval. The audit sampled each local field box and the void beside the
connectors.
| Audit | Result |
|---|---:|
| Island / connector influence boxes | 6 / 5 |
| Bounds boxes / point samples | 517 / 13,932 |
| Intersecting boxes left unknown | 108 |
| Missed bounds | 0 |
| Void boxes proven air | 4 |
| Shrunken-island-bound negative control | Detected |
| Bound audit | **Pass** |
The bounds negative control removes the lobe and blend reach from a candidate island box, then finds
negative density outside that false box while excluding every other feature's valid influence box.
The final-field route has 117 waypoints and 116 segments. Its analytic capsule sweep samples route
centers no farther apart than 0.5 voxel, 17 capsule cross-section positions and five support probes
per center; at least three support probes must find rock within the recorded search depth.
| Route result | Value |
|---|---:|
| Swept centers / capsule field samples | 1,044 / 283,968 |
| Support probes | 6,344 |
| Capsule samples inside rock | 0 |
| Unsupported centers | 0 |
| Grade failures | 0 |
| Minimum sampled density | 40 subvoxels (0.15625 voxel) |
| Route sweep | **Pass** |
The negative control raises the whole route by 8 voxels. It is rejected at all 1,044 swept centers for
lack of support (zero capsule collisions), so the support test detects the failure mode independently
of capsule intersection.
## Determinism and existing hashes
Planner calls repeated three times with identical canonical JSON and hashes. The 32,768-point native
field stream hashes identically at W1, W8 and W16. Stable IDs for this plan are:
| Feature | Stable IDs |
|---|---|
| Islands | `e6e461e18b3a9c87`, `2bc1820baba047f6`, `adc259cbe2a395e9`, `62a5f29ab581c2b0`, `0412f78b71b39ceb`, `7855fb022cc561c9` |
| Connectors | `eaa5dd310e846520`, `034023599b466c51`, `08e698cf39fd6c22`, `3794e6d8e5033e8b`, `4962fa885545fb26` |
The standalone check reparsed and validated the existing manifests without changing their content
hashes: M1 round-1 `c87ae279b0e26f53` and SurfaceWorld round-4 `8933693d9560ba9f`. The existing Core
field evaluators and M2 mesher implementation were not edited; the full M2 actor/mesher hash matrix
was not replayed in this standalone round.
| New island content | Hash |
|---|---|
| Recipe | `111825edfebea17f` |
| Plan | `65675554b7aa947e` |
| Manifest | `03a4685554edce1a` |
| Field samples W1 / W8 / W16 | `bf3ce7da876431e2` each |
## Matched captures and legacy timing
Five CPU-rendered capture pairs use the same detected island anchor, orthographic camera and scale.
The cluster and close-up fields were sampled at 4-voxel and 2-voxel grids respectively. The
tile/LOD view overlays 32-voxel tile and 64-voxel LOD reference planes on the canonical field mesh;
it is a review view, not a production mesher seam-closure test. No viewer or GPU was launched.
[`contact_sheet.jpg`](results/captures/contact_sheet.jpg) — 640×1,290 px, 68,601 bytes. Individual
matched pairs are in [`captures/`](results/captures/); each is 640×258 px and 12,798–18,890 bytes.
They show the overview, underside, lobed edge/cliff, tile/LOD references and planned route. The legacy
side of the route pair is unmarked because the legacy generator has no planner route.
The same 32,768 quantized query positions were timed serially against the direct legacy owner evaluator
and `FloatingIslandFieldV1::densitySubvoxels`, excluding plan generation, mesh extraction, rendering
and Unreal scheduling:
| Evaluator | Time |
|---|---:|
| Legacy owner bridge (`GetDensityAt`) | 63.62 ms |
| Native island field | 39.31 ms |
| Native / legacy | 0.618× (about 1.62× faster) |
This is a point-query comparison for the island field, not a full-world or tile-meshing benchmark. In
the same sparse sample, 90 legacy samples and 885 native samples were solid: 14 were legacy-only and
809 native-only. The overall sign mismatch is 823/32,768 (2.512%), mostly because air dominates the
sample volume. The side-by-side captures and these occupancy counts show that percentage must not be
read as visual or occupancy parity; the routeable native cluster is denser in this narrow vertical
slice than the stochastic owner field.
## Run ledger
All builds and audit runs stayed below the 15-minute stop limit. No process crashed and no
`0xC0000142` retry occurred. The audit wrapper samples its test process; the final process peaked at
45.8 MiB private memory and the highest observed failed-audit process was 159.3 MiB. The existing
MSVC setup prints a French `vswhere.exe`-not-found warning before successfully finding `vcvars64.bat`;
the standalone build also emits existing float-conversion warnings in `VoxelStrateManager.cpp`.
| Failed run | Failure | Correction / outcome |
|---|---|---|
| Initial `Target All` compile | New island methods referenced interval/detail types declared later; one `Q` use was outside its namespace. | Forward declarations and qualified fixed-scale constant; subsequent Core/All builds passed. |
| Second `Target All` compile | One remaining unqualified `Q` in `FloatingIslandFieldV1::isValid`. | Qualified it; subsequent builds passed. |
| First audit-wrapper invocation | Default probe path resolved one directory too high; audit executable did not start. | Corrected the probe path. |
| First audit-harness compile | Windows `min`/`max` and `TEXT` macros broke standard-library expressions. | Set `NOMINMAX` and removed the conflicting compatibility macro around `Windows.h`. |
| Route attempt 1 | 445 blocked capsule samples; 7 grade failures. | Fit route height to the full capsule footprint and start grade fitting. |
| Route attempt 2 | 0 blocked; 19 unsupported centers; 3 grade failures. | Added smaller route intervals and a grade reserve. |
| Route attempt 3 | 0 blocked; 23 unsupported centers; 10 grade failures. | Added precise first-failure diagnostics; set a 5% grade reserve. |
| Route attempt 4 | 0 blocked; 38 unsupported centers; grade passed. | Extended bridge landings into the island tops. |
| Route attempt 5 | 17 blocked samples; support and grade passed. | Raised the recorded capsule clearance from 0.25 to 0.5 voxel. |
The final `Target All` build and final standalone audit passed. The final run is retained in
[`run_ledger.txt`](results/run_ledger.txt); audit metrics, plan data and query breakdown are in
[`audit.json`](results/audit.json).
## Source inventory and round boundary
New source files:
1. `Standalone/Core/src/FloatingIslandsInternal.h` — Core field, serializer, planner, bounds and route audits.
2. `Standalone/Research/WorldAssemblerM3/Round1/FloatingIslandsAudit.cpp` — legacy comparison and standalone audit driver.
3. `Standalone/Research/WorldAssemblerM3/Round1/BuildFloatingIslandsAudit.ps1` — BelowNormal build/run wrapper with time and test-process memory caps.
4. `Standalone/Research/WorldAssemblerM3/Round1/RenderFloatingIslandCaptures.py` — CPU-only small matched capture renderer.
Changed existing source/docs: `Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h`,
`Standalone/Core/src/VoxelForgeCore.cpp` (include only), `Standalone/Core/API.md`, and this report.
`Source/` and `Standalone/Source/` were not edited. No owner project files, editor, `.uasset`, commit,
push or stash were touched.
This round ends at standalone Core proof. `FloatingIslandManifestV1` is not yet embedded in
`WorldAssemblyManifest` or the Unreal adapter. The reference-plane capture does not close production
tile/LOD seams, the route is not cooked into Unreal collision, and the feature emits no seasonal
water body. These belong to later M3 integration/look rounds; player-edit policy remains the owner's
unrestricted choice.