wip(unreal): round 4 -- strate-type coverage matrix; SurfaceWorld via exact legacy bridge

Luna, integration round 4 (owner requirement: Core must know every strate type).
Coverage, Core vs legacy owner field (one probe per type, 686,000 LOD0 samples):
  TunnelNetwork approximate (2.17% signs differ); FlatPlain / CrystalChamber native slab
  fields missing (generic cave, 1.28%); Maze missing (13.3%); VerticalShafts missing (no
  shaft surface); FloatingIslands missing (95.8%); Underwater approximate + no water.
  SurfaceWorld: exact density (0 sign changes, LOD0-3 hashes match) through the copied
  legacy evaluator -- but at legacy cost: full view 23.1 s vs legacy 23.9 s (Core caves
  without surface 0.785 s).
  Passages: SlopedTunnel/VerticalShaft/Spiral pass walkability; Cascading (365/1,495) and
  Worm (109/1,490) FAIL. Transitions approximate (1.2-1.3%).
BuildHost UBT + actor validation pass (SurfaceWorld layout: 2,553 visual keys, 448 LOD
transitions, biome query). Small owner/Core capture pairs in core_strate_coverage/.

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-08 22:29:15 +02:00
1 parent 75210e56f3
commit d696463c68
40 files changed
+373 -11

No files matched your search

+145 -10
View File
@@ -1,23 +1,26 @@
# Unreal Core integration report — rounds 2–3
# Unreal Core integration report — rounds 2–4
Date: 2026-10-08
Branch: `unreal/core-integration`
The initial sections preserve the round-2 integration baseline. The round-3 addendum records the
owner's visual findings and current status, superseding earlier statements where indicated.
The initial sections preserve the round-2 integration baseline. Round 3 records the owner's first
visual review; the round-4 addendum below supersedes its SurfaceWorld status and adds the requested
strate coverage evidence.
## Result
Goals 1 and 2 now pass in BuildHost: an `AVoxelWorld` with Core mode enabled matches standalone Core
tile-by-tile, checks expected collision bodies, streams an entering/leaving anchor tile, and applies a
carve transaction whose affected tile hashes match standalone Core. Goal 3 has a narrow legacy
generator baseline pass; it does not instantiate an actor with Core disabled, so that result is not
an actor-level A/B comparison. The owner can now try the opt-in switch in their editor after building
the plugin.
The Unreal route remains verified in BuildHost: an `AVoxelWorld` with Core mode enabled matches
standalone Core tile-by-tile, checks expected collision bodies, streams an entering/leaving anchor
tile, applies a carve transaction, and travels to a layout containing SurfaceWorld. The round-4
coverage matrix also found that SurfaceWorld density is exact through a temporary copied-legacy
evaluator in Core. Other generator archetypes and boundary transitions remain approximate or absent;
the full owner requirement is not complete. Goal 3 still has only a narrow legacy-generator baseline
pass, not an actor-level switch-off A/B comparison.
Core remains opt-in (`bUseVoxelForgeCore=false` by default). Core mode owns separate clip settings
(radius 3, max level 8), uses 25 cm Core voxels and Core tile keys, and routes mesh payloads through
the existing RealtimeMesh/collision path. No Core canonical source or owner asset was edited.
the existing RealtimeMesh/collision path. Round 4 changed canonical Core source and the standalone
JSON reader; no .uasset or owner project file was touched.
## Headless AVoxelWorld evidence
@@ -293,3 +296,135 @@ After the owner's rebuild, with **Use VoxelForge Core** enabled, inspect these e
Switch-off continues through the legacy generator. The owner rebuild/editor review is the remaining
visual check.
## Round 4 — strate coverage and SurfaceWorld bridge (2026-10-08)
### Status
SurfaceWorld now has an exact-density compatibility route inside Core. Surface lattice hashes match
the owner reference at full resolution and at the tested coarse LODs. The bridge calls the copied
legacy generator for SurfaceWorld samples, including its resolved biome field and terrain operations,
then applies Core edit brushes. It is deterministic in the BuildHost W1/W8/W16 matrix. This is not a
native Core SurfaceWorld implementation, and the matched viewer captures still show a mesh/presentation
difference. The bridge also makes Core surface tile generation about as expensive as the owner field.
The reader now retains the serialized slab, maze, shaft, and floating-island parameter structs.
Parsing those values does not mean their terrain evaluators are implemented in Core.
### Generator archetype probes
Each probe has its own JSON under
[the probe directory](Research/OwnerShapeWorld/core_strate_coverage/probes/). The viewer comparison
uses 16 LOD0 tiles per row, except where the SurfaceWorld row also reports an explicit cross-LOD run.
“Changed” counts lattice samples whose density sign differs; the old/Core hashes catch magnitude
differences even when that count is zero. Capture links are matched owner-field/Core frames, reduced
to 640×400 JPEGs under 300 KB each.
| Generator type | Core result | Owner/Core numeric evidence | Matched capture pair |
|---|---|---|---|
| TunnelNetwork | **Approximate.** Core extracts room/tunnel primitives and passage chains, but not the complete owner density stack. | At the owner viewer start, 686,000 LOD0 samples: 2.167784% sign changes; symmetric sampled surface distance 1.0149 m mean / 5.1468 m max; 388 unmatched samples. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/type_0_TunnelNetwork.viewerstart.compare.stdout.log) | [Owner](Research/OwnerShapeWorld/core_strate_coverage/type_0_TunnelNetwork_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/type_0_TunnelNetwork_core_small.jpg) |
| FlatPlain | **Native slab field missing; generic extracted cave geometry is only an approximation.** The legacy view has its slab/column structure while Core shows a cave-like passage. | 686,000 LOD0 samples: 1.284548% sign changes; 0.4040 m mean / 1.1567 m max surface distance. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/type_1_FlatPlain.compare.stdout.log) | [Owner](Research/OwnerShapeWorld/core_strate_coverage/type_1_FlatPlain_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/type_1_FlatPlain_core_small.jpg) |
| CrystalChamber | **Native slab and crystal-ceiling field missing; generic cave geometry is only an approximation.** | 686,000 LOD0 samples: 1.284548% sign changes; 0.4040 m mean / 1.1567 m max surface distance. The fixture uses the authored crystal type and its slab parameters. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/type_2_CrystalChamber.compare.stdout.log) | [Owner](Research/OwnerShapeWorld/core_strate_coverage/type_2_CrystalChamber_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/type_2_CrystalChamber_core_small.jpg) |
| Maze | **Native maze lattice and corridor field missing.** Core's room/tunnel extraction is a poor approximation in this view. | 686,000 LOD0 samples: 13.337026% sign changes; 1.0784 m mean / 5.9201 m max; 3,067 unmatched samples. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/type_3_Maze.compare.stdout.log) | [Owner](Research/OwnerShapeWorld/core_strate_coverage/type_3_Maze_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/type_3_Maze_core_small.jpg) |
| SurfaceWorld | **Exact density through the temporary legacy route; mesh/presentation remains approximate.** | At the surface crossing, 686,000 LOD0 samples have identical hashes and zero sign changes; sampled surface distance is 0.0767 m mean / 1.0117 m max. At the matched viewer camera, LOD2 also has identical hashes across 109,744 samples; mean surface distance 0.1737 m, max 5.264 m, 63 unmatched samples. LOD0–LOD3 hashes matched in the matched-camera matrix. [LOD0 log](Research/OwnerShapeWorld/core_strate_coverage/probes/type_4_SurfaceWorld.compare.stdout.log) · [cross-LOD logs](Research/OwnerShapeWorld/core_strate_coverage/probes/) | [Owner](Research/OwnerShapeWorld/core_strate_coverage/type_4_SurfaceWorld_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/type_4_SurfaceWorld_core_small.jpg) |
| VerticalShafts | **Native shaft/ledge field missing.** The current Core shape is not a shaft approximation at the probe. | 686,000 LOD0 samples: 6.071137% sign changes; legacy had 3,970 sampled surface vertices while Core had none in those tiles. A center probe changed 2.368222% of signs. The walkability audit also failed 18,122/18,570 passage samples. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/type_5_VerticalShafts.compare.stdout.log) | [Owner](Research/OwnerShapeWorld/core_strate_coverage/type_5_VerticalShafts_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/type_5_VerticalShafts_core_small.jpg) |
| FloatingIslands | **Native island SDF missing.** Core generates generic cave geometry instead of suspended islands. | 686,000 LOD0 samples: 95.751458% sign changes; 1.4638 m mean / 5.9236 m max surface distance. The center probe changed 100% of signs. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/type_6_FloatingIslands.compare.stdout.log) | [Owner](Research/OwnerShapeWorld/core_strate_coverage/type_6_FloatingIslands_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/type_6_FloatingIslands_core_small.jpg) |
| Underwater | **Cave shape approximate; water presentation missing.** Core carries no water plane/material in its mesh payload. | At a surface-field sample point, 686,000 LOD0 samples: 8.116472% sign changes; 1.1988 m mean / 5.8131 m max surface distance, with 115 unmatched samples. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/type_7_Underwater.samplepoint.compare.stdout.log) | [Owner](Research/OwnerShapeWorld/core_strate_coverage/type_7_Underwater_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/type_7_Underwater_core_small.jpg) |
These numbers come from different authored fields and camera regions, so the percentages are evidence
for each probe, not a normalized cross-type score.
### Passage types and styles
The four authored styles map to four legacy passage types in VoxelStrateManager: Straight →
SlopedTunnel, Worm → CrackCrevice, Spiral → SpiralDescent, and Cascading → CascadingDrops.
VerticalShaft is the separate open-surface entry, not a selectable FStratePassageConfig style.
Core reads the manager-generated control-point chain, radii, and floor profile, then rebuilds tapered
capsules. That preserves the broad path but not the full passage density modifier.
| Passage type | Style / source | Numeric evidence, 16 LOD0 tiles | Walkability audit | Capture pair |
|---|---|---|---|---|
| SlopedTunnel | Straight | 1.585569% sign changes; 0.4532 m mean / 1.2473 m max. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/style_0_Straight.compare.stdout.log) | PASS, 5,642/5,642 | [Owner](Research/OwnerShapeWorld/core_strate_coverage/style_0_Straight_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/style_0_Straight_core_small.jpg) |
| VerticalShaft | Open-surface entry | 12.102187% sign changes; 0.9802 m mean / 5.3772 m max. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/vertical_shaft_entry.compare.stdout.log) | PASS, 5,642/5,642 | [Owner](Research/OwnerShapeWorld/core_strate_coverage/passage_type_VerticalShaft_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/passage_type_VerticalShaft_core_small.jpg) |
| SpiralDescent | Spiral | 1.905539% sign changes; 0.4692 m mean / 2.1429 m max. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/style_2_Spiral.compare.stdout.log) | PASS, 1,545/1,545 | [Owner](Research/OwnerShapeWorld/core_strate_coverage/style_2_Spiral_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/style_2_Spiral_core_small.jpg) |
| CascadingDrops | Cascading | 1.884840% sign changes; 0.4879 m mean / 2.2203 m max. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/style_3_Cascading.compare.stdout.log) | **FAIL, 365/1,495 solid centerline samples** | [Owner](Research/OwnerShapeWorld/core_strate_coverage/style_3_Cascading_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/style_3_Cascading_core_small.jpg) |
| CrackCrevice | Worm | 1.793440% sign changes; 0.4680 m mean / 2.1420 m max. [Log](Research/OwnerShapeWorld/core_strate_coverage/probes/style_1_Worm.compare.stdout.log) | **FAIL, 109/1,490 solid centerline samples** | [Owner](Research/OwnerShapeWorld/core_strate_coverage/style_1_Worm_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/style_1_Worm_core_small.jpg) |
The non-walkable Worm and Cascading probes violate the requested entrance-to-exit walkability
invariant. Those styles need correction before the Core route can claim passage coverage.
### Strate transitions
All three transition fixtures were compared at the generated passage crossing near the strata
boundary (16 LOD0 tiles, 514,500 lattice samples each). Owner hashes change per transition, while Core
returns the same hash, 0x7f9999008f887de6, for Gradient, Hard, and Interleaved. The Core representation
therefore does not yet reproduce the transition field. The Core mesh remains an approximate control-
point passage through the boundary.
| Transition | Sign changes | Mean / max surface distance | Capture pair |
|---|---:|---:|---|
| Gradient | 1.186395% | 0.4302 m / 2.0185 m | [Owner](Research/OwnerShapeWorld/core_strate_coverage/transition_0_Gradient_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/transition_0_Gradient_core_small.jpg) |
| Hard | 1.170262% | 0.4302 m / 2.0383 m | [Owner](Research/OwnerShapeWorld/core_strate_coverage/transition_1_Hard_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/transition_1_Hard_core_small.jpg) |
| Interleaved | 1.301846% | 0.4622 m / 2.5725 m | [Owner](Research/OwnerShapeWorld/core_strate_coverage/transition_2_Interleaved_legacy_small.jpg) / [Core](Research/OwnerShapeWorld/core_strate_coverage/transition_2_Interleaved_core_small.jpg) |
The captures were taken at the passage crossing, not in the solid-only boundary camera used by the
first probe attempt. Numeric logs are in the probe directory.
### Other terrain-changing strate inputs and implementation route
The legacy generator also reads world seed and strate bounds; FStrateGenerationParams (worm, room,
tunnel, cave warp, floor, and detail fields); the archetype structs FSlabGenerationParams,
FMazeGenerationParams, FSurfaceGenerationParams, FVerticalShaftParams, and FFloatingIslandParams;
disturbances; weighted/probabilistic terrain-operation stacks; biome definitions and biome-map
parameters; transition type/blend width; passage style/configuration and generated floor profiles;
and water-level and render-side water/biome presentation data. The round-4 reader carries the typed
parameter and operation assets into the standalone snapshot. SurfaceWorld's legacy fallback consumes
its full density-side stack. The shape-only path still does not evaluate all of those inputs for the
other archetypes.
Recommended next route, ordered by observed visual gap: implement native FloatingIslands, then native
VerticalShafts and Maze, then native FlatPlain/CrystalChamber slab fields; keep the passage chain native
but fix Worm/Cascading walkability; implement transition blending in the Core layer field; add
Underwater's water plane as a separate render payload. Keep the current TunnelNetwork primitive route
and refine its density operators. A copied-legacy evaluator is a valid temporary bridge where exact
density is the priority, but the SurfaceWorld timing below shows its cost. A density fallback alone
cannot create render-side water, biome materials, decorations, or atmosphere.
### SurfaceWorld performance and BuildHost verification
The matched-camera CPU viewer used 1,294 tiles through LOD8. Owner legacy generation took 23.914 s
wall / 188.705 worker-seconds; Core with the SurfaceWorld bridge took 23.085 s / 180.562 worker-
seconds. The prior Step29 Core viewer without the bridge took 0.785 s / 2.538 worker-seconds for the
same tile count, but it omitted the surface. This is not a controlled per-sample microbenchmark; it
shows the bridge costs approximately the legacy field route for the complete view. Captures and logs
are under core_strate_coverage.
BuildHost was rebuilt and the actor test passed with a SurfaceWorld strate. The initial W1/W8/W16
hashes are stable: density 0xccd5858289627767, mesh 0x33c4f191ee318a40, payload
0xd487ed030c6622cd, topology 0xf5f6262021a780a0. At the surface actor position, all 2,553 expected
visual tiles matched standalone; 640 fine tiles compiled, 3,588 neighbour faces and 448 LOD
transitions were checked, and the biome query returned Biome_Surface_Plain (index 2). Surface hashes:
density 0xb80442b34787eb4e, mesh 0xfecc9327337abbfb, payload 0xca57a4e295ce0602, topology
0x7f187a07e5c19f7f. The extra loaded count (3,288) includes support/stale keys; visual keys remain
complete. Full log: [CoreWorldValidation.stdout.log](../Saved/BuildHost/HostProject/Plugins/VoxelForge/Saved/CoreWorldValidation/Logs/CoreWorldValidation.stdout.log).
The UBT host build passed. The actor test took 12m59s and peaked at 3,042,344,960 private bytes
(about 2.83 GiB), below the 15-minute / 8-GiB limits. No 0xC0000142 retry occurred. The only crash
folder under BuildHost is the pre-existing UECC-Windows-F1A3EFD5469F5DD62E68EBBACAC84376_0000;
there was no new crash.
### Round-4 failed attempts and retries
| Attempt | Outcome |
|---|---|
| Surface numeric probe at viewer z = −1,024 m | Wrong vertical slice for the standalone JSON's SurfaceWorld strate; no surface triangles. Corrected to the terrain crossing near z = −400 m and matched capture camera z = −340 m. |
| First style matrix | The fixture changed nested asset PassageConfig while the reader consumes the duplicated top-level passage_config. All four probes therefore stayed Straight. Regenerated each fixture with both copies updated and reran. |
| Vertical-shaft probe invocation | Exit 2 because the loop named a JSON file that had not been generated. Reran against the original layout, which contains the open-surface VerticalShaft entry. |
| First LOD matrix invocation | Exit 2 because PowerShell split a computed area argument and the viewer treated surface_lod0 as a data path. Reran with explicit argument strings; LOD0–LOD3 hashes matched. |
| Step30 viewer build | The script printed that vswhere.exe was unavailable, then used the installed compiler toolchain; Core compile, symbol audit, and viewer link passed. |
No round-4 run crashed or needed a retry. No build/test step exceeded 15 minutes. Switch-off remains the
legacy route. After the owner rebuild, recheck the SurfaceWorld shoreline, hills, and biome transitions
at the matched camera after fine tiles settle; also recheck the opening-room floor. The captures show
the exact-density bridge improves the surface field, but water/presentation and the other missing
archetypes are still open work.