wip(unreal): AVoxelWorld Core mode -- streaming, collision and carving through VoxelForgeCore
Luna, integration round 2 (BuildHost only): AVoxelWorld::bUseVoxelForgeCore (default false) routes desired tiles, generation, upload/collision and carving through Core. Core-only CoreClipRadius=3 / CoreMaxClipLevel=8 (owner's asset untouched); 25 cm Core voxels in every cm<->voxel conversion; legacy brush sizes scaled to keep physical size; UE-task JobScheduler, epoch-checked Mpsc results, existing RMC upload + collision cook; carving via sequenced applyEditTransaction. Switch off: BuildDesiredTiles takes the old path unchanged. BuildHost proof (actor commandlet, staged copies of the owner's assets): all 2,226 initial tiles hash-match standalone Core; collision bodies as expected; anchor move requests 1 / releases 1 tile; carved tile hash matches standalone; peak ~2.68 GiB. Legacy CrossPlatformDigest automation: 115,000 samples pass (wrapper flagged an analytics write outside isolation). 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
29ca99af7f
commit
075e58187e
7 files changed
+2069
-118
No files matched your search
+20
-13
@@ -820,26 +820,33 @@ second density path.
|
||||
| `VoxelForgeWormBlockSkipTest.cpp` | `VoxelForge.Determinism.WormBlockSkipSoundness` | Soundness and coverage of the worker-local worm N1 block proof (`voxel.WormBlockSkip`). |
|
||||
| `VoxelForgePlayerFitWindow.h` | — | Shared measurement-window policy for player-fit diagnostics (test/editor side only). |
|
||||
|
||||
### 3.13 Core module and schema adapter (integration round 1)
|
||||
### 3.13 Core runtime integration (round 2)
|
||||
The public Core API is linked as the `VoxelForgeCore` runtime module, with canonical implementation
|
||||
sources still under `Standalone/`. UBT validates the 18-row manifest and its shims; BuildHost linked
|
||||
the module and passed `CheckCoreSymbols.ps1` against the actual shim objects. See
|
||||
[`Standalone/UNREAL_INTEGRATION_REPORT.md`](Standalone/UNREAL_INTEGRATION_REPORT.md) for build and
|
||||
headless evidence.
|
||||
headless evidence and the run ledger.
|
||||
|
||||
`RunStandaloneWorldExport` in `VoxelForgeExploreCommandlet.cpp` serializes owner assets on the game
|
||||
thread to schema-v1 JSON. `FStandaloneCoreAdapterScheduler` and
|
||||
`VerifyStandaloneCoreAdapter` parse that JSON through `ResolvedWorldSnapshot::FromJson`, compile at
|
||||
worker limits 1, 8, and 16, and compare the 2,226-tile hashes and passage walkability. The commandlet
|
||||
sorts map/set members and JSON object keys to keep the export deterministic. Its test copy applies
|
||||
the standalone benchmark view overrides (clip radius 3, max level 8); the saved asset-derived export
|
||||
retains the authored clip radius and max level.
|
||||
thread to schema-v1 JSON. The adapter parses it through `ResolvedWorldSnapshot::FromJson` and keeps
|
||||
UObjects off Core workers. The runtime switch is `AVoxelWorld::bUseVoxelForgeCore` (default false),
|
||||
with independent `CoreClipRadius=3` and `CoreMaxClipLevel=8`; it does not read or mutate the old clip
|
||||
settings or assets.
|
||||
|
||||
**Runtime status:** no `bUseVoxelForgeCore` property, Core generation route, mesh conversion, Core
|
||||
carve transaction, or owner-facing switch instructions exist yet. `AVoxelWorld` still uses the
|
||||
existing density generator, mesher, queues, epoch checks, RealtimeMesh upload, and collision path.
|
||||
The Core dependency is present so the next round can wire the side-by-side route behind a default-off
|
||||
switch while preserving that path.
|
||||
When enabled, `AVoxelWorld` uses Core desired keys and priorities, compiles/generates through Unreal
|
||||
tasks, carries `Epoch` through the existing MPSC result queues, and uploads converted payloads through
|
||||
RealtimeMesh and its collision cook. Core voxel coordinates use 25 cm per voxel; Core tile keys are
|
||||
retained, and Core mesh vertices are already in centimetres. High-level legacy brush dimensions are
|
||||
scaled from 12.5 cm voxel units to Core units so their physical size stays the same. Edits use
|
||||
sequenced `applyEditTransaction` calls after in-flight Core work drains, then regenerate Core's
|
||||
affected keys under a new epoch. Existing streaming anchors participate; the headless move proof
|
||||
covers `CollisionOnly` policy.
|
||||
|
||||
`-coreworldtest=1` in the BuildHost editor commandlet validates the spawned actor's 2,226 initial
|
||||
tiles against standalone Core, expected collision bodies/empty tiles, an anchor move, and a carve
|
||||
transaction. `VoxelForge.Determinism.CrossPlatformDigest` is the narrow switch-off baseline; it passes,
|
||||
but does not instantiate an actor with the switch false. See the report for that limitation and for
|
||||
owner-editor instructions.
|
||||
|
||||
## 4. The density pipeline (most-edited hot path)
|
||||
|
||||
|
||||
Reference in new issue
Block a user