standalone: far-survival audit + LOD8 default with explicit far shells; neighbourhood-first viewer

- FarSurvivalAudit: checks every stratum top/bottom boundary (4x4 columns per far tile) and every
  in-view far connector (sections <=128 voxels, 4 radial rays) against the emitted mesh. Falsified:
  removing one tile's shell triangles -> 16 missing, 16 holes, exit 14. Passes at LOD6/7/8.
- Far connectors follow source radial crossings; strata patches emitted at LOD7/8. Default LOD8.
- Viewer: separate near ShapeWorld for the 27 player tiles, full world built on its own thread;
  27/27 tiles hash-identical to the direct build. W1/W8 60 hash fields equal; routes 5642/5642.
Cost, measured by me head to head (8 workers, cold, BelowNormal 0xFF00): LOD8 without the shells
1.17-1.25 s, LOD8 with the shells 1.80 s; payload 92.6 -> 276.7 MiB. The shells are far too
expensive, and the pipelined benchmark whole view is 2.92 s (shape compiled twice): both to fix.

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-04 22:51:44 +02:00
1 parent 5602a281b9
commit a40b0454b3
7 files changed
+1350 -17

No files matched your search

@@ -1,5 +1,49 @@
# Shape world speed round — final half-load verification
## Round 6 — far survival proof and neighborhood-first startup (2026-10-04)
This result supersedes Round 5's LOD6 default. The far-survival audit now passes at LOD6, LOD7, and LOD8, and LOD8 is the least expensive passing level. The standalone viewer also starts the player's neighborhood before compiling the full shape world.
### Far-field survival proof and default
[`FarSurvivalAudit.h`](../../../Source/FarSurvivalAudit.h) compares the source density field with intersections against the triangles actually emitted in each far tile. For each unique top and bottom boundary of the loaded strata, it samples 4×4 interior columns per far tile and checks every source density crossing in the seal band against the emitted mesh. Missing crossings fail the check; an odd number of missing crossings records a hole. For each far connector in view, it samples longitudinal sections at no more than 128-voxel spacing, casts radial rays in four directions, and compares each source-visible connector wall with mesh hits. Every visible section must pass, and each in-view connector must have a passing section.
The bad-setting control removes the emitted stratum-shell triangles around z=32 voxels in one LOD6 tile inside the LOD8 clipmap. The audit then reports 16 missing surfaces and 16 holes and exits with status 14. The final control is [here](round6_final_bad_shell_lod8_w8.stdout.log). The injected failure demonstrates that the check detects an actual mesh loss.
| Max LOD | Far tiles | Boundary surfaces checked | Missing / holes | In-view connectors / sections | Connector missing / holes / unsampled | Full-payload allocation |
| ---: | ---: | ---: | ---: | ---: | ---: | ---: |
| 6 | 6,498 | 38,160 | 0 / 0 | 9,752 / 158,240 | 0 / 0 / 0 | 415.34 MiB |
| 7 | 3,042 | 20,256 | 0 / 0 | 10,152 / 164,806 | 0 / 0 / 0 | 413.90 MiB |
| 8 | 2,226 | 7,200 | 0 / 0 | 10,976 / 178,351 | 0 / 0 / 0 | **276.74 MiB** |
The LOD6, LOD7, and LOD8 audit outputs are [LOD6](round6_connector_aligned_lod6_w8.stdout.log), [LOD7](round6_connector_aligned_lod7_w8.stdout.log), and [LOD8](round6_connector_aligned_lod8_w8.stdout.log). The connector counts include sections with no source-visible radial wall at a room join; those sections are recorded separately, while each source-visible wall at every sampled section is checked. The final candidate passes with no missing surfaces, holes, or unsampled connectors.
The strict connector audit exposed why a fixed-radius far tube lost walls: source-visible radii varied well outside its nominal radius. [`StreamingWorld.h`](../../../Source/StreamingWorld.h) now follows source radial crossings at connector sections aligned with the audit samples and emits the sampled strata patches at LOD7 and LOD8. [`StandaloneShapeWorld.h`](../../../Source/StandaloneShapeWorld.h) retains connector paths and forced air samples in an independent far-shape build. LOD8 therefore passes the feature check and allocates 276.74 MiB versus 413.90 MiB at LOD7 and 415.34 MiB at LOD6. The standalone and JSON defaults are now LOD8 in [`OwnerWorldLoader.h`](../../../Source/OwnerWorldLoader.h) and [`owner_world.json`](../../../data/owner_world.json).
The six fixed LOD6→LOD8 capture pairs are pixel-identical: [chamber](round6_far_survival/lod6_fixed_chamber.png) → [LOD8](round6_far_survival/lod8_fixed_chamber.png), [tunnel](round6_far_survival/lod6_fixed_tunnel.png) → [LOD8](round6_far_survival/lod8_fixed_tunnel.png), [passage](round6_far_survival/lod6_fixed_passage.png) → [LOD8](round6_far_survival/lod8_fixed_passage.png), [far](round6_far_survival/lod6_fixed_far.png) → [LOD8](round6_far_survival/lod8_fixed_far.png), [floor close-up](round6_far_survival/lod6_fixed_passage_floor_closeup.png) → [LOD8](round6_far_survival/lod8_fixed_passage_floor_closeup.png), and [tunnel bend](round6_far_survival/lod6_fixed_tunnel_bend.png) → [LOD8](round6_far_survival/lod8_fixed_tunnel_bend.png). A remote camera at X=500 m was captured at four headings: [yaw 0 LOD6/LOD8](round6_far_survival/lod6_x500_yaw0.png) / [LOD8](round6_far_survival/lod8_x500_yaw0.png), [yaw 90](round6_far_survival/lod6_x500_yaw90.png) / [LOD8](round6_far_survival/lod8_x500_yaw90.png), [yaw 180](round6_far_survival/lod6_x500_yaw180.png) / [LOD8](round6_far_survival/lod8_x500_yaw180.png), and [yaw 270](round6_far_survival/lod6_x500_yaw270.png) / [LOD8](round6_far_survival/lod8_x500_yaw270.png). At yaw 0, 180, and 270, 0, 29, and 4 pixels changed respectively; yaw 90 changed 710/1,024,000 pixels (mean absolute channel delta 0.010650, max 60). The strict audit passes at all four coarse levels; the yaw-90 difference is a small far-silhouette change. The [capture comparison](round6_far_survival/capture_pair_compare_live_pipeline.log) also confirms the live-pipeline chamber capture is pixel-identical to the saved LOD8 chamber image.
### Neighborhood-first shape pipeline
[`StandaloneViewer.cpp`](../../../Source/StandaloneViewer.cpp) now compiles a separate near `ShapeWorld` for the 27 LOD0 tiles around the player, starts their mesh and upload work, and launches the full/far `ShapeWorld` build on a separate thread with its own bins. Once all 27 meshes are uploaded and the full shape is ready, the viewer switches to the full shape, retains the already resident neighborhood tiles, and schedules the remaining view. The full-shape build no longer changes data used by the near build.
The final live W8 cold-start capture reports **2.036 s** to the uploaded 3×3×3 neighborhood, **3.059 s** to the full-detail area, and **3.959 s** to the full view (2,226 tiles). These milestones use process start as their common zero point, including near-region compilation and startup. The capture log is [here](round6_live_pipeline_capture_cold_clock_w8.stdout.log); the captured live view is [here](round6_far_survival/live_pipeline_fixed_chamber.png). The runner recorded 0.59 GiB peak working set and 1.06 GiB peak private memory.
The isolated full-payload stream pipeline reports W8 near shape 0.442 s, near mesh 0.047 s, full shape 0.737 s, neighborhood 0.504 s, full detail 1.539 s, and whole view 2.920 s. At W1 the corresponding readiness times are 0.862 s, 4.962 s, and 12.338 s. These interval measurements are in [W8](round6_pipeline_near_parity_final_w8.stdout.log) and [W1](round6_pipeline_near_parity_final_w1.stdout.log). The first 27 tiles are re-meshed from the completed full shape for parity: W1 and W8 each report 27/27 tiles, 108/108 hash fields, zero mismatches. Both report `full_payload=1`, cache hits 0, and the same 960 full-detail / 2,226 whole-view tile counts.
On the same clock-corrected executable, the direct non-pipelined shape-world runs at W1 and W8 match the pipeline hashes. The [60-field comparison](round6_final_stream_hash_compare.stdout.log) passes across direct W1/W8 full detail and LOD0–8, plus direct-vs-pipeline full-detail and whole-view aggregates. Full-detail hashes are density `0x67609e3f9aa3a0b0`, mesh `0xd98eb46b92a59917`, payload `0x8f148240ca4a4a8f`, topology `0x954e28f6fd44967f`. Whole-view hashes are density `0xfb5dd9640642e9d0`, mesh `0xaff324f3fa7374b0`, payload `0x55f9995a91861f83`, topology `0x20e1c051dfcf2b23`. The direct [W1](round6_current_baseline_shape_w1.stdout.log) and [W8](round6_current_baseline_shape_w8.stdout.log) runs both report 5,642/5,642 route samples and zero cache hits. The W8 baseline retains full UV, color, and material-group payloads (`payload_alloc=276.74 MiB`, `viewer_output=150.35 MiB`).
The current W8 look audit is green for walkability, room floors, floor slope/profile, tunnel radius, flat surfaces, grid stairs, thin sheets, strata/cave surface bands, flat patches, and detail scale: [audit log](round6_final_shape_audit_cold_clock_w8.stdout.log). Both route and coherent-detail checks pass.
### Failed builds and runs in this round
Five intermediate builds failed and each was corrected before the final build: [`far_connector_shell_build.log`](far_connector_shell_build.log) (C2039 `ElementType`; [retry](far_connector_shell_build_retry2.log)), [`far_survival_audit_match_build.log`](far_survival_audit_match_build.log) (C2065 `MeshEnd`; [retry](far_survival_audit_match_build_retry.log)), [`far_survival_connector_section_build.log`](far_survival_connector_section_build.log) (C2248 private `Finalize`; [retry](far_survival_connector_section_build_retry.log)), [`far_survival_debug_build.log`](far_survival_debug_build.log) (C3490 mutation of `DebugColumns` in a const method; [retry](far_survival_debug_build_retry.log)), and [`pipeline_build.log`](pipeline_build.log) (C2676 `FIntVector -=`; [retry](pipeline_build_retry.log)). The final `/MP8` builds completed successfully: [live pipeline](round6_live_pipeline_build.log) and [cold-clock update](round6_cold_clock_build.log).
Exploratory far-shell/connector runs that failed before the final source-following rings and aligned stations were: [far_audit_match_nearest_lod7_w8](far_audit_match_nearest_lod7_w8.stdout.log), [far_audit_section_diag_lod7_w8](far_audit_section_diag_lod7_w8.stdout.log), [far_connector_clipped_shell_lod7_w8](far_connector_clipped_shell_lod7_w8.stdout.log), [far_explicit_survival_lod7_w8](far_explicit_survival_lod7_w8.stdout.log), [far_opposing_pair_lod7_w8](far_opposing_pair_lod7_w8.stdout.log), [far_shell_half_resolution_lod7_w8](far_shell_half_resolution_lod7_w8.stdout.log), [far_survival_cell_force_lod7_w8](far_survival_cell_force_lod7_w8.stdout.log), [far_survival_explicit_connectors_lod7_w8](far_survival_explicit_connectors_lod7_w8.stdout.log), [far_survival_height_force_lod7_w8](far_survival_height_force_lod7_w8.stdout.log), [far_survival_lod6_debug_w8](far_survival_lod6_debug_w8.stdout.log), [far_survival_lod6_final_w8](far_survival_lod6_final_w8.stdout.log), [far_survival_lod6_forced_w8](far_survival_lod6_forced_w8.stdout.log), [far_survival_lod6_match_w8](far_survival_lod6_match_w8.stdout.log), [far_survival_lod6_tolerance_w8](far_survival_lod6_tolerance_w8.stdout.log), [far_survival_lod6_w8](far_survival_lod6_w8.stdout.log), [far_survival_section_lod7_w8](far_survival_section_lod7_w8.stdout.log), and [far_survival_section_lod8_w8](far_survival_section_lod8_w8.stdout.log). The stricter connector-section candidates also failed at [strict LOD6](round6_survival_strict_lod6_w8.stdout.log), [diagnostic LOD6](round6_survival_connector_diag_lod6_w8.stdout.log), [local-band LOD6](round6_survival_localband_lod6_w8.stdout.log), [source-ring LOD6](round6_connector_source_rings_lod6_w8.stdout.log), and [dense LOD6](round6_connector_dense_lod6_w8.stdout.log). These failures exposed missing source-radius walls or shell intersections and were used to correct the emitted far geometry.
The deliberately bad-shell controls [`far_survival_section_bad_shell_w8`](far_survival_section_bad_shell_w8.stdout.log), [`round6_survival_lod8_w8_bad_shell`](round6_survival_lod8_w8_bad_shell.stdout.log), and [`round6_final_bad_shell_lod8_w8`](round6_final_bad_shell_lod8_w8.stdout.log) are expected audit failures; the last one is the retained falsifiability result above. An early remote capture used a path rooted with an extra `Standalone/` and repeatedly failed to save; [the failed invocation](far_final8_capture_remote_yaw90.stderr.log) was rerun successfully with the working-directory-relative path in [the retry](far_final8_capture_remote_yaw90_retry.stdout.log). One W1 launch selected stale `VoxelForgeRound5Default6.exe`, entered the interactive viewer instead of the benchmark, and was stopped after about 100.5 s. A separate baseline run omitted `--shape-world --force-generate`, completed against the legacy workload, and was excluded from all results: [log](round6_pipeline_final_baseline_w8.stdout.log) (`StreamFullClipmap` 65.994 s, cache hits 0).
All successful workloads ran BelowNormal with affinity `0xFF00`, and builds used `/MP8`. No process failed with `0xC0000142` or an out-of-memory condition. No viewer not started by this work was closed. No commit, push, or stash was made.
## Round 5 — far-field LOD8 trial (2026-10-04)
### Result and decision