wip(assembler): M2 round 3 -- opt-in hybrid sharp mesher (WorldAssemblerHybridV1) in the Unreal Core route

Default MarchingCubesV1 unchanged (W1/W8/W16 = round-6 hashes). Hybrid DC only in LOD0 interior cells
with tagged features; tile-border cells and LOD1+ stay MC. BuildHost: fixtures repeat exactly, cooked
collision bounds = render bounds, same-LOD borders pass, sampled SurfaceWorld cliff bit-identical to MC.
Open: tagged tiles cost 5.7-6.7x MC; corner-top field contact error 20 cm; 5 MC doorway LOD cases.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-10-10 09:53:04 +02:00
1 parent a3b7d2015e
commit 22a6b30494
21 files changed
+3009 -23

No files matched your search

@@ -923,4 +923,51 @@ Cost and determinism outputs are retained. All 45 W1/W8/W16 hashes match their W
No `Source/` or Core source, owner project file, `.uasset`, or editor was touched. No commit, push, or stash.
— Luna
— Luna
## Luna, M2 round 3 — opt-in hybrid in Unreal
Hi Claude,
The hybrid is now an opt-in, versioned Core recipe: `WorldAssemblerHybridV1`. Core remains off by
default, and `MarchingCubesV1` remains the default recipe, so the owner keeps the existing hashes
when the option is off. Tagged type-2 world-plan features use the sharp path only in LOD0 interior
cells. Border-touching cells and LOD1+ stay on MC; skirts remain the border repair.
The full null-RHI BuildHost actor commandlet passed W1/W8/W16 with the round-6 hashes unchanged,
plus height agreement, anchor/edit/travel, switch-off gating, Blueprint carve/fill and the
SurfaceWorld actor route. It exercised the TunnelNetwork Core cave path and injected nine
type-2 feature boxes for four surface fixture groups. A production-mesher check passed all five
fixtures, and a separate native SurfaceWorld cliff check matched MC bit-for-bit (10,231 vertices,
10,360 triangles, hash `0xfc7bd7a3cf997992`). Independent same-LOD borders passed; the 125-phase
LOD0/LOD1 doorway probe had no contours over 50 cm and 22.844 cm worst mismatch.
All five cooked collision contacts passed on the Pawn channel. The world trace and RMC component
trace agreed exactly, the cooked-body bounds matched render bounds, and the field-contact errors
were at most 20.332 cm. The final plugin timings put sharp fixtures at 5.66–6.70× MC; the untagged
organic cave was 0.992× MC. Density and route constraints are unchanged. The M1 full bounds,
sub-voxel shelf and route audits are the last recorded standalone results; I did not rerun those
audits for this mesher-only round. This round did rerun the actor travel, height and Blueprint
carve/fill checks.
The LOD compromise still has a real limitation: MC retains five topology failures in the standalone
625-case transition suite. Existing skirts are the current repair. The 17.68 cm corner bevel is
0.35 of a 50 cm LOD1 sample, so it may round off and pop at the threshold. BuildHost was null-RHI,
so I did not measure that visual pop; please judge it in-game at the target camera and movement
speed.
To preview the surface fixtures, duplicate the settings asset, import
[`surface_hybrid_fixture_plan.json`](../../WorldAssemblerM2/round3/surface_hybrid_fixture_plan.json),
enable `Use VoxelForge Core` on a test `AVoxelWorld`, and choose `World Assembler Hybrid V1`. The
contact coordinates and setup are in the
[round-3 report](../../WorldAssemblerM2/REPORT.md). I did not edit an owner asset, open the editor,
or build the owner's project.
The report includes the complete failed-run ledger, two new mirrored private headers, and likely
compile touchpoints. One full actor commandlet passed but its wrapper returned 1 due to a final
PowerShell status-format cast. After fixing the print, both focused wrappers and a corrected full
actor wrapper exited 0; the final full run took 11m06s and sampled 3.73 GiB peak private memory.
No process crashed, no `0xC0000142` retry occurred, and no new UECC directory appeared. No commit,
push, or stash.
— Luna