- AddLanding no longer adds a shallow positive ellipsoid (floor plate check 71.3% -> 0%). - Round 10 had removed all relief on passage walls to pass the ring check (smooth tube; rejected). Cause found instead: the owner roughness's 8-voxel Z anchors with linear interpolation. Passage- controlled walls now use 2-voxel anchors, blended smoothly into the 8-voxel ones. - Ring gate (lag-20 correlation) 0.376 -> 0.038 AND shaft relief RMS 1.294 (smooth-tube control 0.276 fails); passage/cave relief ratio 1.152. Faint rings remain deep in the shaft. - Whole view 0.984 s cold @8w (interleaved, full payload); W1/W8 44/44 hash fields equal; routes 5642/5642; look and far-survival audits pass; bad-shell control fails. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
13 KiB
Round 11 — passage shaft anchor spacing
Result
Round 11 restores the passage-wall relief removed in Round 10 and keeps the AddLanding plate fix. The broad, regularly spaced shaft bands track the owner roughness interpolation anchors: changing only passage-controlled owner roughness from 8-voxel to 2-voxel Z anchors drops the 20-pixel radial-profile correlation from 0.37625 to 0.03793. Fine rock relief remains: final shaft high-pass RMS is 1.29366 versus 1.33143 on the full-detail baseline, and the field-level passage relief RMS is 1.152× the nearby cave-wall RMS.
The final W8 cold full-payload runs are 0.983 s and 0.985 s. Their mean is 0.984 s, versus 0.9855 s for Round 10's 0.985 s and 0.986 s. Both final samples stay below one second. The full 110.90 MiB payload is enabled, all 2,226/2,226 tiles are generated, and every direct run reports zero cache hits.
Final executable: Standalone/bin/VoxelForgeRound11Final.exe. The final /MP8, /arch:AVX2, /fp:precise build is build_round11_final.log.
Cause and tests
The fixed close-up is 1280×800. The ring analyzer samples a radial profile around the shaft and reports autocorrelation at fixed pixel lags. The restored full-detail image has its broad peak at 20 px, with lag-20 correlation 0.37625. In the same view, lag 8 is -0.17880 and lag 32 is -0.11875. Changing only the owner-roughness anchor interval removes this repeated period while keeping relief. Phase and domain-warp probes could lower lag-20 correlation, but they moved the repeat elsewhere—for example, the independent-phase probe has lag-20 correlation 0.10099 and lag-32 correlation 0.41219—or made the relief visibly stronger and less even.
| Probe | Owner Z anchors on passage walls | Lag 8 | Lag 20 | Lag 32 | Shaft high-pass RMS | Result |
|---|---|---|---|---|---|---|
| Restored full-detail baseline | 8 voxels | -0.17880 | 0.37625 | -0.11875 | 1.33143 | Repeated broad bands |
SurfaceDistanceQ scale refined from 1/16 to 1/256 |
8 voxels | -0.16419 | 0.36106 | -0.10573 | 1.26432 | Quantization is not the cause |
| Cubic Hermite owner-anchor interpolation | 8 voxels | -0.22643 | 0.37990 | -0.08620 | 1.41653 | Does not remove the repeat |
| Per-voxel owner roughness | 1 voxel | 0.03742 | 0.02828 | 0.06502 | 1.36528 | Repeat removed; relief retained |
| Final passage interpolation | 2 voxels | 0.00533 | 0.03793 | 0.07640 | 1.29366 | Repeat removed; relief retained |
The screen-space period is camera-dependent; the causal test is the change in the field's Z anchor interval while keeping the noise function and relief amplitude. Reducing the anchor interval to one voxel moves the strongest measured 5–40 px profile correlation to the 5 px lower limit of that band scan. Two-voxel anchors keep lag-20 correlation low and cost less than evaluating the owner roughness independently at every voxel.
OwnerCaveRoughnessForDetail uses the two-voxel anchors when passage influence is at least 0.60. A smooth blend from the existing eight-voxel anchors covers passage influence 0.40–0.60. Other cave walls keep their existing eight-voxel interpolation. The landing ellipsoid remains removed from AddLanding.
The ring gate is check_passage_rings.py. It checks lag-20 correlation below 0.15 and a shaft 2 px high-pass relief floor above 0.70. This makes the full-detail baseline fail for rings, makes the smooth Round 10 control fail for missing relief, and makes the final capture pass both:
| Capture | Lag-20 correlation | Shaft relief RMS | Gate |
|---|---|---|---|
| Full-detail before | 0.37625 | 1.33143 | Fail: rings |
| Round 10 smooth-tube control | -0.09955 | 0.27577 | Fail: detail |
| Round 11 final | 0.03793 | 1.29366 | Pass |
The independent passage wall detail audit samples the actual density-field relief: 13,271 passage-wall samples, RMS 1.0020; 465,563 nearby ordinary cave-wall samples, RMS 0.8701; ratio 1.152, within the 0.75–1.25 range. The explicit --shape-detail=smooth control reports ratio 0.000 and exits 8 as intended: control log.
Distance quantization and Hermite interpolation therefore do not explain the broad repeat. The owner Z-anchor interval does. The 5 px peak and pixel-scale correlations remain in the final image as fine texture; the two-voxel result is not obtained by suppressing relief.
Profile and cold interleave
The interleave order was Round 10 A, Round 11 A, Round 11 B, Round 10 B. Each executable ran directly with --stream-benchmark --shape-world --force-generate --workers=8 --clip-radius=3, in a fresh process through RunMachine.ps1.
| Measure | Round 10 A | Round 11 A | Round 11 B | Round 10 B | Round 10 mean | Round 11 mean |
|---|---|---|---|---|---|---|
| Process wall | 0.985 s | 0.983 s | 0.985 s | 0.986 s | 0.9855 s | 0.984 s |
| Shape stage | 399.310 ms | 411.659 ms | 415.237 ms | 404.777 ms | 402.044 ms | 413.448 ms |
| Detail band | 206.815 ms | 219.364 ms | 217.363 ms | 212.613 ms | 209.714 ms | 218.364 ms |
| Far-shape stage | 43.770 ms | 43.573 ms | 49.788 ms | 43.824 ms | 43.797 ms | 46.681 ms |
| Full clipmap | 460 ms | 464 ms | 462 ms | 460 ms | 460 ms | 463 ms |
| Payload / cache | 110.90 MiB / 0 hits | 110.90 MiB / 0 hits | 110.90 MiB / 0 hits | 110.90 MiB / 0 hits |
Raw logs: Round 10 A, Round 11 A, Round 11 B, Round 10 B. The process-wall remainder after subtracting shape stage and full-clipmap time is approximately 123 ms for Round 10 and 108 ms for Round 11; this is a derived startup/setup/finalization remainder, not a separately timed stage.
The final attributed profile is here: shape stage 406.865 ms, surface-detail band 217.383 ms, far-shape build 43.548 ms, full clipmap 459 ms. It processes 9,389,017 candidate distance samples and 3,527,283 detail evaluations. Sampled EffectiveRockDistance work averages 66.3 ns per distance evaluation; detail work averages 334.0 ns, including 111.6 ns owner roughness and 83.0 ns surface relief. The shape allocation profile reports 36.71 MiB candidate-axis words, 131.79 MiB proxy address capacity, and 11.25 MiB primitive storage; the full stream payload remains 110.90 MiB. Profile sampling uses 1/256 of distance evaluations and 1/64 of detail evaluations, so the estimated worker sums are not wall-clock durations.
Determinism, audits, and payload
- The final 1-worker and 8-worker full-payload hash runs match all 44/44 density, mesh, payload, and topology fields both at the default benchmark position and with the stream centered on the passage camera. The default-position W8 hashes also match all 44/44 fields from the restored full-detail pre-fix executable. Against the retained
VoxelForgeShapeRound8Final.exeexecutable for16612ac, 35/44 default-position fields match; the nine differing fields are the whole-view hashes, LOD2 density, and all four LOD3 hashes. Comparison output: hash comparison, default W1, default W8, passage W1, passage W8, restored baseline W8, 16612ac W8. - The standard shape/look audit passes: log. Routes remain 5,642/5,642. GridStair relative join step is 0.090 / 0.400; surface-band family checks, flat-patch share (6.5%), detail, floor joins, and tunnel radius pass. The default audit footprint contains no tagged passage wall, so its passage-only ratio is marked
SKIP; the focused passage-wall audit above runs in the passage region and passes. - Far survival passes 7,200/7,200 boundary surfaces and all 10,976 connectors across 178,351 sampled sections. Missing surfaces, holes, unsampled connectors, and boundary holes are zero: audit.
- The damaged-shell control remains red as intended: 512 triangles removed, 16 boundary surfaces missing, 16 holes, exit 14: control.
- Direct benchmarks and hash runs generated 2,226/2,226 tiles with the full 110.90 MiB payload and zero mesh-cache hits.
Captures
All “before” captures use the local VoxelForgeRound11FullDetail.exe baseline before the anchor change; “after” captures use VoxelForgeRound11Final.exe. Each image is 1280×800. Cameras are in metres followed by yaw/pitch degrees. Pixel deltas are from round11_capture_pixel_compare.stdout.log, generated by compare_round11_captures.py.
| Fixed view | Camera (x,y,z,yaw,pitch) |
Before | After | Changed pixels |
|---|---|---|---|---|
| Chamber | (-11.75,-123.25,-19.85,0,0) |
before | after | 0 |
| Tunnel | (-11.75,-123.25,-19.85,90,0) |
before | after | 0 |
| Passage | (-39.19,6.27,-28.51,63,0) |
before | after | 265,844 |
| Far | (-11.61244,-118.2212,-19.8452,0,0) |
before | after | 0 |
| Passage-floor close-up | (-39.19,6.27,-25.51,63,-25) |
before | after | 528,282 |
| Tunnel bend | (-198.97,-99.57,-45.58,33.59,23.17) |
before | after | 0 |
The four remote views use (500,0,0,yaw,0):
| Yaw | Before | After | Changed pixels | Mean channel delta | Max channel delta |
|---|---|---|---|---|---|
| 0 | before | after | 53,752 | 2.919636 | 96 |
| 90 | before | after | 1 | 0.000000 | 1 |
| 180 | before | after | 113,721 | 4.021039 | 117 |
| 270 | before | after | 219,245 | 6.364519 | 126 |
The chamber, tunnel, far, and bend captures are pixel-identical. Passage and passage-floor views change as the relief interpolation changes; the remote comparisons also record the pixels affected in those four views for owner review.
Failed attempts and machine limits
- All final builds succeeded with
/MP8,/arch:AVX2, and/fp:precise; they emit the existingvswhere.exelookup diagnostic andC4838narrowing warnings inVoxelStrateManager.cpp. No process returned0xC0000142. - The first exploratory build log wrapper used a relative
Tee-Objectpath afterBuild.ps1changed toStandalone/Build; the wrapper returned 1 even though the executable had been produced. It was rerun with an absolute log path. The first analytic-normal probe build had aC2065undeclaredActiveShapeWorld; the source was corrected and the probe rebuilt successfully. - Two early Python helper launches omitted required wrapper arguments and exited 1. The first ring-gate launches also resolved image paths from the wrong working directory and raised
FileNotFoundError; each was rerun with Standalone-relative paths. No viewer started in those failed helper launches. - The first standard shape audit treated an empty passage sample set in its default region as a failure. The audit now marks that passage-only subcheck
SKIPwhen no passage samples are present; the standard audit then passes, and the dedicated passage-region detail audit provides the non-skipped measurement. - A forced axis-aligned passage-camera
--shape-auditreturned 7 because the view measured 74.8% axis-locked normals against a 60% threshold; the pre-fix full-detail executable also failed that down-shaft camera. A separate earlier close-up camera audit measured 65.0% and also failed. These were orientation diagnostics, not the standard owner-start acceptance audit; the dedicated detail audit avoids that unrelated ray-normal criterion. - The baseline ring image and smooth-tube image intentionally exit 1 in the ring/relief gate; the
--shape-detail=smoothfield control intentionally exits 8; the bad-shell control intentionally exits 14.
All workload, capture, audit, and helper processes ran BelowNormal on affinity 0xFF00; no viewer that this work did not start was closed. All edits and outputs are confined to Standalone\. No commit, push, or stash was made.