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:
1 parent
75210e56f3
commit
d696463c68
40 files changed
+373
-11
No files matched your search
@@ -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.
|
||||
Reference in new issue
Block a user