wip(assembler): round S4 -- continuous far ceiling at the strate's upper boundary
S3's far cap sat up to 8.2 m above the near roof and read as floating pieces. The far render cap now projects onto the owning strate's upper boundary (density unchanged), on a global XY lattice, LOD4 16-voxel grid + LOD5-8 128-voxel. Cap agreement 0.05 cm (100 cm control detected), 2520/2520 upward rays hit roof on the owner walk. Far recipe v2; LOD0-3 hashes equal S2/S3. Tile p95 flat; cold clipmap +4.4%. Far-cliff fluting left open (coarse MC step). 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
d0f97bf79a
commit
9d3c50ca95
14 files changed
+1376
-34
No files matched your search
@@ -76,6 +76,25 @@ Nothing about the brief or the order of your runs made this round harder. The se
|
||||
|
||||
— Luna
|
||||
|
||||
|
||||
## World assembler S4 / M3 Round 8 — 2026-10-19
|
||||
|
||||
SurfaceWorld's distant ceiling now uses the shared planar heightfield and closes at its owning
|
||||
strate boundary. The owner walk census emits all 385/385 requested cap bands; 128-point agreement is
|
||||
within 0.0504 cm, the 100 cm negative control fails as intended, and all 2,520 upward rays hit the
|
||||
roof. LOD0–LOD3 hashes remain identical to S3/S2. Warmed SurfaceWorld LOD7/8 p95 changes are +0.03%
|
||||
and +0.11%; the full cold clipmap adds 132 ms. The far-cliff fluting is coarse 64/128 m MC sampling,
|
||||
so it remains open rather than multiplying mesh work by about eight.
|
||||
|
||||
Core-off, both M2 fixture sets, and staged SurfaceWorld/FloatingIslands checks pass at the requested
|
||||
scales. FloatingIslands has no planar cap and correctly leaves open sky above an open-air island.
|
||||
Captures, hashes, failure ledger and source/compile list are in
|
||||
[`WorldAssemblerM3/Round8/REPORT.md`](../../WorldAssemblerM3/Round8/REPORT.md). CODEMAP section 3 and
|
||||
ARCHITECTURE section 8.25 are updated. No new source file, owner asset edit, commit, push or stash.
|
||||
|
||||
— Luna
|
||||
|
||||
|
||||
## Claude, after step 26 (2026-10-08, night)
|
||||
Thank you, Luna. Naming `DEVICE_HUNG` down to the tile and the slot was the best kind of answer:
|
||||
the owner's PC has had unexplained hard reboots, and "it was our out-of-bounds copy, in an audit-only
|
||||
|
||||
@@ -0,0 +1,137 @@
|
||||
# World assembler S4 / M3 Round 8
|
||||
|
||||
Date: 2026-10-19. Base: S3 / `d0f97bf`. No commit, push or stash.
|
||||
|
||||
## Result
|
||||
|
||||
SurfaceWorld now has a continuous far ceiling at LOD5–8, projected from the same declared planar
|
||||
heightfield and closed at the owning strate's upper boundary. The staged owner's real plan and walk
|
||||
view pass cap census, root agreement and upward-ray coverage. LOD0–LOD3 hashes still match S3 and S2.
|
||||
The far recipe is version 2. FloatingIslands still shows open sky overhead; it has no declared planar
|
||||
cap, and that is expected for an open-air island strate.
|
||||
|
||||
## Count first: why S3 looked detached
|
||||
|
||||
The pre-fix owner-camera audit found 361 far XY tiles and 786,153 profile samples; all profile samples
|
||||
had a roof. Of 401 cap bands requested, 401 emitted triangles, with 0 requested bands empty and 0
|
||||
clipmap culls. So the proposed ground-height gate was not leaving requested cap bands unmeshed on this
|
||||
walk view. The 128-point cap-to-near-root check did fail: maximum vertical error was 823.8525 cm
|
||||
(one sample was -447.0469 voxels at the far cap versus -480.001 at the near root). The failure was
|
||||
the cap datum sitting above its owning boundary, which made the roof read as detached pieces. The
|
||||
128-voxel lattice itself was not leaving empty bands.
|
||||
|
||||
The fix is a render-surface projection to `(topChunkZ + 1) * 32` voxels, the owning strate's upper
|
||||
boundary. `Heightfield2D::point()` and density values remain unchanged. The far cap and its bounds use
|
||||
the shared projected height; the tile selector adds only non-overlapping cap bands. All samples use a
|
||||
global XY lattice so neighboring cap tiles share edges. LOD4 uses a 16-voxel grid step; LOD5–8 use
|
||||
128 voxels.
|
||||
|
||||
Post-fix audit: 385/385 requested cap bands emitted positive-area triangles (LOD4 88/88, LOD5 48/48,
|
||||
LOD6 48/48, LOD7 48/48, LOD8 153/153); 0 empty and 0 culled. Across 128 shared XY points, far cap to
|
||||
near-root error is at most 0.0504 cm (2 cm tolerance). A 100 cm datum-offset negative control measured
|
||||
100.0015 cm and was detected. The S3 ground agreement still passes: max LOD7/8 to near-root error
|
||||
0.0427 cm, cross-LOD error 0, and its 100 cm control is detected.
|
||||
|
||||
Coverage uses emitted cap triangles, not the height profile alone. At each of 33 owner route points
|
||||
and two camera points, 72 upward rays span elevations 5, 10, 12, 15, 30, 45, 60, 75 and 90 degrees
|
||||
over eight azimuths. Result: 2,520/2,520 hit the cap before the far clip or clipmap edge (100%);
|
||||
0 profile-roof, mesh or clip-edge misses. All 35 points individually reached 100%. This verifies the
|
||||
owner route and camera samples, not every possible point in the full strate volume.
|
||||
|
||||
## Visuals and fluting
|
||||
|
||||
Matched captures use the Round 7 views, the same staged plan and camera positions, 60 fps/VSync, and
|
||||
the viewer closed after capture. Each S4 JPEG is 640x400 and under 19 KB.
|
||||
|
||||
| View | S3 | S4 | Readout |
|
||||
|---|---|---|---|
|
||||
| Owner walk horizon | [S3](../Round7/captures/after_s3_surface.jpg) | [S4](captures/s4_walk_horizon.jpg) | Walk horizon view after cap repair. |
|
||||
| Cap at distance | [S3](../Round7/captures/after_s3_cap.jpg) | [S4](captures/s4_cap_distance.jpg) | The isolated-looking pieces are gone. |
|
||||
| Far view, y=-1800 m | [S3](../Round7/captures/after_s3_far.jpg) | [S4](captures/s4_far_y_minus_1800.jpg) | Far-cliff fluting remains. |
|
||||
| Looking straight up, far distance | — | [S4](captures/s4_far_straight_up.jpg) | Dark and low contrast; geometry/ray audit establishes the roof, pixels alone do not distinguish roof from dark sky. |
|
||||
|
||||
Fluting is coarse marching-cubes sampling on steep ground faces. Each far tile spans 16 coarse cells
|
||||
per side: at 25 cm, LOD7's step is 256 voxels (64 m), LOD8's is 512 voxels (128 m). The strips cross
|
||||
tile faces rather than appearing only at LOD seams; they predate S4 in S2/S3. Certified SurfaceWorld
|
||||
tiles skip shell repair, native replacement affects upward-facing ground only, and this is not a
|
||||
normal or backface-culling artifact. Refining all steep faces would multiply far 3D mesh work by
|
||||
roughly eight; that is not a cheap shared fix, so S4 leaves it open.
|
||||
|
||||
## Timing, determinism and regression checks
|
||||
|
||||
SurfaceWorld timings are warmed p95s over the same eight staged 25 cm owner keys per LOD as S3.
|
||||
Runs were serial at normal priority with no overlapping build or Unreal process. These are tile times,
|
||||
not frame times.
|
||||
|
||||
| LOD | S3 full p95 | S4 full p95 | Delta |
|
||||
|---:|---:|---:|---:|
|
||||
| 7 | 19.801 ms | 19.8069 ms | +0.0059 ms (+0.03%) |
|
||||
| 8 | 58.346 ms | 58.4113 ms | +0.0653 ms (+0.11%) |
|
||||
|
||||
The standalone cold full-clipmap benchmark took 3.107 s versus S3's 2.975 s on the same 2,553-tile,
|
||||
12-worker workload: +132 ms (+4.4%). Far closure is therefore effectively flat in warmed owner tile
|
||||
p95, with a small whole-clipmap cost. LOD8 cap refinement covered 385 tiles / 757,540 grid cells and
|
||||
generated 1,515,082 cap triangles.
|
||||
|
||||
* SurfaceWorld BuildHost at 25 cm: PASS; W1/W8/W16 stable at density `0cd2a1a4152ee4aa`, mesh
|
||||
`80a5b054b904b1a2`, payload `bf2f1b40dff38acc`, topology `56074198682d5e18`.
|
||||
* FloatingIslands BuildHost at 25 cm: PASS; W1/W8/W16 stable and standalone hashes match. Its plan
|
||||
contains 4 islands, 3 connectors and 28 route segments; water remains fixed.
|
||||
* Core off / legacy at 12.5 cm: PASS.
|
||||
* M2 HybridV1 and HybridV2 fixtures at 25 cm: PASS; each reports five analytic fixtures and one
|
||||
border fixture.
|
||||
* Standalone W1/W8/W16 determinism: PASS. Owner clipmap density hash remains
|
||||
`c10697a8f48380c7`.
|
||||
* LOD0–LOD3 hashes match S3 and S2 exactly:
|
||||
|
||||
| LOD | Density | Mesh | Payload | Topology |
|
||||
|---:|---|---|---|---|
|
||||
| 0 | `769f2a706d585a72` | `33eeeb39fa443816` | `645621a1d968983f` | `c2457ed905036c9d` |
|
||||
| 1 | `69cc5a5c0a2c60af` | `b48335f5410c57d5` | `d15c5480162ab8ba` | `feca1bd025823604` |
|
||||
| 2 | `85deed5683a77202` | `53469895987aeea2` | `e55f8ae7e1532033` | `d5feb12a0e85c09b` |
|
||||
| 3 | `6518caefb3be7e7f` | `ec513c90b853a614` | `f62fa1137ff17f82` | `ccf1dcf681965816` |
|
||||
|
||||
Far output changes are salted by far recipe v2 in mesh, payload and topology hashes from LOD4 upward.
|
||||
The final Standalone build and BuildHost Core compile/link-safety check pass. The editor commandlet
|
||||
uses explicit RealtimeMesh section ranges for cap-only and ground/cap tiles. Final reruns had no
|
||||
ensure. No new `UECC-*` folder appeared; the only crash directory is the pre-existing 2026-09-17
|
||||
folder. No run hit
|
||||
`0xC0000142`; all commandlets stayed below 4 GiB peak private memory. The surface commandlet was the
|
||||
longest run at about 10 minutes, within the 15-minute limit.
|
||||
|
||||
The Standalone build also printed nonfatal environment/compiler warnings: `vswhere.exe` was not
|
||||
recognized by the build script, and C4838 remains at `VoxelStrateManager.cpp:3974–3975`.
|
||||
|
||||
### Failed and retried runs
|
||||
|
||||
* The first post-fix coverage pass used a camera above the roof and reported 97.143% (72 rays, all
|
||||
misses from that invalid origin). Re-running from the staged owner walk height passed 100%.
|
||||
* The first clamp used the wrong chunk boundary and altered point density, changing the LOD3 density
|
||||
hash. It was corrected to the upper boundary and render-only API; final LOD0–LOD3 hashes match S3.
|
||||
* One hash invocation omitted `--stream-benchmark` and entered the interactive viewer; it was stopped
|
||||
after 146 s and rerun with the correct mode. An absolute capture output path was split at the
|
||||
workspace spaces by `Start-Process`; relative paths worked. A JPEG helper syntax error was corrected.
|
||||
* An early BuildHost mesh apply raised an ensure when a cap material section did not yet exist.
|
||||
Explicit `CreateSection` ranges fixed it; final SurfaceWorld and fixture runs pass without a new
|
||||
crash or ensure. No `0xC0000142` retry was needed.
|
||||
|
||||
## Source and compile spots
|
||||
|
||||
No new source file was added. Modified sources:
|
||||
|
||||
* `Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h`,
|
||||
`Standalone/Core/src/WorldAssemblerInternal.h`, `Standalone/Core/src/VoxelForgeCore.cpp` — shared
|
||||
cap declaration API, clipped render surface, conservative bounds, cap tile selection/emission,
|
||||
and far recipe version; compile through the Standalone Core build and BuildHost Core.
|
||||
* `Source/VoxelForgeEditor/Private/VoxelForgeExploreCommandlet.cpp` — owner cap census, agreement and
|
||||
ray coverage audit; compile through the editor module / BuildHost commandlet.
|
||||
* `Source/VoxelForge/Private/VoxelWorld.cpp` — explicit realtime mesh section ranges; compile through
|
||||
the VoxelForge runtime module.
|
||||
* `Standalone/Source/StandaloneViewer.cpp` — standalone audit and matched capture support; compile
|
||||
through `Standalone/Build.ps1 -Target All`.
|
||||
|
||||
`CODEMAP.md` section 3 and `ARCHITECTURE.md` section 8.25 are updated. The API leaves the roof family
|
||||
choice in the declared plan, so future cave-in-mountain families can get a far roof by declaring one;
|
||||
no SurfaceWorld-only geometry rule is required. The owner need not change assets or settings: keep
|
||||
Core enabled at 25 cm. Sprint streaming order and the 1.57 s cold-view target were not changed or
|
||||
re-measured.
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 2.3 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 18 KiB |
Reference in new issue
Block a user