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
This commit is contained in:
1 parent
4661a445be
commit
53a1e69af7
16 files changed
+2971
-1
No files matched your search
@@ -0,0 +1,174 @@
|
||||
# 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.
|
||||
Reference in new issue
Block a user