standalone: landing plate removed; passage shaft rings reduced with the rock detail kept
- 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
This commit is contained in:
1 parent
2656d81ac9
commit
631dd57eb4
14 files changed
+552
-48
No files matched your search
@@ -0,0 +1,97 @@
|
||||
# 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](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](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](before_passage_floor_closeup.png) | 0.37625 | 1.33143 | Fail: rings |
|
||||
| [Round 10 smooth-tube control](../round10/after_fixed_passage_floor_closeup.png) | -0.09955 | 0.27577 | Fail: detail |
|
||||
| [Round 11 final](after_passage_floor_closeup.png) | 0.03793 | 1.29366 | Pass |
|
||||
|
||||
The independent [passage wall detail audit](../round11_passage_detail_audit_w8.stdout.log) 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](../round11_passage_detail_smooth_control_w8.stdout.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](../round11_round10_oldA_w8.stdout.log), [Round 11 A](../round11_round11_newA_w8.stdout.log), [Round 11 B](../round11_round11_newB_w8.stdout.log), [Round 10 B](../round11_round10_oldB_w8.stdout.log). 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](../round11_final_profile_attribution_w8.stdout.log): 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.exe` executable for `16612ac`, **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](round11_hash_compare.stdout.log), [default W1](../round11_final_hash_w1.stdout.log), [default W8](../round11_final_hash_w8.stdout.log), [passage W1](../round11_passage_hash_w1.stdout.log), [passage W8](../round11_passage_hash_w8.stdout.log), [restored baseline W8](../round11_full_detail_hash_w8.stdout.log), [16612ac W8](../round11_16612ac_hash_w8.stdout.log).
|
||||
- The standard shape/look audit passes: [log](../round11_final_shape_audit_w8.stdout.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](../round11_far_survival_w8.stdout.log).
|
||||
- The damaged-shell control remains red as intended: **512** triangles removed, **16** boundary surfaces missing, **16** holes, exit **14**: [control](../round11_bad_shell_control_w8.stdout.log).
|
||||
- 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](round11_capture_pixel_compare.stdout.log), generated by [compare_round11_captures.py](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](before_chamber.png) | [after](after_chamber.png) | 0 |
|
||||
| Tunnel | `(-11.75,-123.25,-19.85,90,0)` | [before](before_tunnel.png) | [after](after_tunnel.png) | 0 |
|
||||
| Passage | `(-39.19,6.27,-28.51,63,0)` | [before](before_passage.png) | [after](after_passage.png) | 265,844 |
|
||||
| Far | `(-11.61244,-118.2212,-19.8452,0,0)` | [before](before_far.png) | [after](after_far.png) | 0 |
|
||||
| Passage-floor close-up | `(-39.19,6.27,-25.51,63,-25)` | [before](before_passage_floor_closeup.png) | [after](after_passage_floor_closeup.png) | 528,282 |
|
||||
| Tunnel bend | `(-198.97,-99.57,-45.58,33.59,23.17)` | [before](before_tunnel_bend.png) | [after](after_tunnel_bend.png) | 0 |
|
||||
|
||||
The four remote views use `(500,0,0,yaw,0)`:
|
||||
|
||||
| Yaw | Before | After | Changed pixels | Mean channel delta | Max channel delta |
|
||||
| ---: | --- | --- | ---: | ---: | ---: |
|
||||
| 0 | [before](before_remote_yaw0.png) | [after](after_remote_yaw0.png) | 53,752 | 2.919636 | 96 |
|
||||
| 90 | [before](before_remote_yaw90.png) | [after](after_remote_yaw90.png) | 1 | 0.000000 | 1 |
|
||||
| 180 | [before](before_remote_yaw180.png) | [after](after_remote_yaw180.png) | 113,721 | 4.021039 | 117 |
|
||||
| 270 | [before](before_remote_yaw270.png) | [after](after_remote_yaw270.png) | 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 existing `vswhere.exe` lookup diagnostic and `C4838` narrowing warnings in `VoxelStrateManager.cpp`. No process returned `0xC0000142`.
|
||||
- The first exploratory build log wrapper used a relative `Tee-Object` path after `Build.ps1` changed to `Standalone/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 a `C2065` undeclared `ActiveShapeWorld`; 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 `SKIP` when 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-audit` returned 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=smooth` field 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.
|
||||
BIN
Binary file not shown.
|
After Width: | Height: | Size: 3.9 MiB |
Reference in new issue
Block a user