wip(assembler): round S1 -- one Core voxel-size source; per-tile feature lists (islands)

AVoxelWorld::CoreVoxelSizeCm (default 25, 32 voxels/tile) flows through plan, field,
mesher, content, water, atmosphere, edits and collision. Staged-owner BuildHost passes at
20 cm (SurfaceWorld + islands, W1/W8/W16, anchors, BP edits, collision) with a fixed-25cm
negative control; default-size hashes match round 4; Core off stays legacy 12.5 cm.
Reusable BuildWorldAssemblyFeatureTileListV1; wired into FloatingIslands only so far.
256-island stress: tile p95 112.5 -> 2.0 ms, 0 mismatches, dropped-feature control fails.
Content placement measured (no populated cells): island ground search 7.25 ms/cell vs
legacy 0.29 ms -- open. Outside-review evaluation in Round5/REPORT.md.

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-18 18:48:38 +02:00
1 parent 111cf3d262
commit d6e69420e8
25 files changed
+2136 -250

No files matched your search

+31 -7
View File
@@ -117,6 +117,16 @@ pass. Reusing exact detail-lattice hash corners across adjacent mixed bricks red
step-3 259³ median from 1.502908 s to 1.169567 s; the separate step-2f 600 ms worst-profile timing
bar still does not pass at the finer voxel size.
The opt-in Core route resolves physical voxel size from `AVoxelWorld::CoreVoxelSizeCm` (default
**25 cm**) and keeps **32 voxels per Core tile**. `GetActiveVoxelSizeCm()` is the runtime conversion
point for coordinates, mesh vertices, collision, streaming, LOD, content, water, atmosphere, and
brushes; `WorldConfiguration::voxelSizeMicrons` plus `tileVoxelCount` carries the resolved values
through Core. A nondefault size participates in Core snapshot/season identity, while 25 cm preserves
the recorded default hashes. Core-off continues using the legacy 12.5 cm grid. This is currently a
per-world setting; per-strate sizes still need physical-coordinate sampling, transition stitching,
cross-boundary edit rasterization, per-strate LOD agreement, and a canonically ordered size map in the
hashed identity.
The reachable roughness envelope is `roughness * VOXEL_NOISE_SCALE * 1.5`, or `roughness * 1.875`
voxels. The new defaults keep it below the relevant feature radius: **0.625** of the minimum
TunnelNetwork tunnel radius, **0.300** of Maze corridor radius, **0.469/0.625** of shaft/connector
@@ -824,6 +834,14 @@ second density path.
| `VoxelForgePlayerFitWindow.h` | — | Shared measurement-window policy for player-fit diagnostics (test/editor side only). |
### 3.13 Core runtime integration (rounds 2–5)
Scale symbols: AVoxelWorld::CoreVoxelSizeCm is the opt-in per-world Core size setting and
AVoxelWorld::GetActiveVoxelSizeCm() is the authoritative runtime conversion. CoreTileVoxelCount in
the public Core API is 32 voxels per tile. UVoxelContentManager::MeasurePlacementCostForValidation
is a headless diagnostic only; it measures placement-grid cell queries and steady manager update
cost without changing normal spawning. FloatingIslandTileListAudit.cpp and
BuildFloatingIslandTileListAudit.ps1 under WorldAssemblerM3/Round5 hold the candidate-list
benchmark and dropped-feature negative control. See ARCHITECTURE §8.22.
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
@@ -856,13 +874,19 @@ settings or assets.
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 and
density strength are scaled from 12.5 cm voxel units to Core units so their physical effect 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.
RealtimeMesh and its collision cook. Core voxel coordinates use the size resolved from
`CoreVoxelSizeCm` (25 cm by default); Core tile keys remain in 32-voxel units, and mesh vertices are
in centimetres. Legacy brush dimensions and density strength are converted from the 12.5 cm owner
grid using the resolved Core size, preserving their physical effect. SurfaceWorld owner-chunk mapping
uses the owner/Core ratio as well. 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.
The reusable `BuildWorldAssemblyFeatureTileListV1` accepts conservative inclusive feature bounds for
future caves, shafts, pits, and passages. Floating Islands builds one `FloatingIslandTileFeatureListV1`
per tile and the scoped worker context makes `FloatingIslandFieldV1::densityAt` evaluate only that
candidate list. Candidate order stays canonical, the field hash remains bit-identical, and a dropped-
feature negative control is part of the standalone Round 5 audit.
`-coreworldtest=1` in the BuildHost editor commandlet validates initial tiles, expected collision
bodies/empty tiles, anchor movement, a carve transaction, travel to the B landing and native surface