New verify.py sanitize tier (Clang address,undefined,float-cast-overflow; GCC address,undefined; -fno-sanitize-recover) runs 19 cases per compiler at LOD0-8 across every generator, passages and the crossing: 0 runtime reports; a planted signed-overflow control is caught by both. A static scan fixed INT_MIN negation in floor division, unbounded signed LOD shifts and coordinate-times-extent overflow in VoxelClipmapDesiredTiles.h and VoxelTypes.h (plugin and standalone), and VoxelWorld.cpp, VoxelContentManager.cpp and VoxelDensityVolume.cpp (plugin only, uncompiled here). Supported-input output unchanged (version 211). fast/medium/full PASS. Research R31 (self-checked): far-LOD 4-8 cut plan. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
8.3 KiB
R31 — Far LOD (4–8) inventory and cuts
Worker-seconds below are summed CPU time across workers, not wall time. The L55, R28 and L60 runs have different tile counts; treat them as cost evidence, not a matched before/after comparison.
Inventory and visibility
Far LODs are not automatically offscreen. On the 25 cm owner plan, the L15 gate puts the closest displayed tiles at about 192, 384, 768, 1,536 and 3,072 m for LOD4–8. At the owner’s 0.61 mrad/pixel reference, one pixel spans roughly 0.12, 0.23, 0.47, 0.94 and 1.87 m. The corresponding MC cell widths are about 8–128 m. That spacing alone does not predict surface error, but it rules out treating the far rings as invisible: terrain silhouettes, exposed caps and tunnel openings can reach the near-field camera. Linux15 gate
| Work | Output and visibility | Measured cost |
|---|---|---|
Grid MC — generateTile |
Coarse 3D field surface: terrain, strata and passage walls. It contributes to horizon silhouettes and can be directly visible inside passages. | SW LOD4–8 MC exclusive work totals 2.248 worker-s; LOD8 alone is 1.244 s. This is the full MC stage excluding columns and skirts, not just its grid-fill timer. |
Connector repair — AppendFarConnectorShells |
Detects missing coarse passage walls and adds shell panels. LOD6+ uses axial samples and four cross-section directions; these walls can be visible down a passage. | R22 reports 1.335 worker-s at SW LOD6. L55 per-tile records show long connector spans (one LOD6 tile: 17.6 ms) alongside 15.9 ms of column computation. These timers overlap; don’t add them as independent costs. Native surface horizon tiles at LOD7–8 can skip far-shell repair (code). |
Cap refinement — RefineFarNativeCap |
Adds downward-facing ceiling triangles from the cap heightfield. Visible from below or within exposed strata. | 0.870 worker-s across SW LOD4–8, excluding its column work. |
Ground columns/refinement — RefineFarNativeGround |
LOD5+ samples columns to add the ground sheet and replace nearby upward-facing MC faces. The resulting ground and horizon remain visible from above. | Ground-refinement geometry itself is only about 0.00044 worker-s exclusive in the SW summary. Its heightfield evaluations are counted in the larger column pool. |
Skirts — EmitSkirts |
Extends tile edges to cover cracks. Only faces exposed by the active neighbor mask need drawing; outer clip edges can remain visible. | 0.789 worker-s and 425,784 triangles across SW LOD4–8. The viewer already filters skirt faces by neighbor mask (mask logic). |
The L55 SW LOD4–8 pool is 7.878 worker-s: LOD4 1.426, LOD5 0.553, LOD6 1.940, LOD7 1.103, LOD8 2.857. The measured column-evaluation share is 2.700 worker-s. Remaining work includes MC, cap refinement, skirts and shell/boundary work; connector timers overlap column computation. L55 per-LOD rows R28 cost ledger
Cuts and ranked plan
-
Reuse exact samples across tiles and LODs. Reuse heightfield or density results only for identical recipe, plan and integer sample coordinates, preserving the calculation order. This can leave output unchanged. But the shared heightfield cache is already on by default, so 2.700 worker-s is only the ceiling for eliminating all remaining SW far-column computation, not expected duplicate work. Count actual cross-LOD misses before crediting savings. Cache path
-
Skip skirt faces hidden by the current neighbor mask. This preserves rendered output for a fixed neighbor set, but changes mesh payload and hashes. Pass the mask before extrusion, include it in cache identity, and rebuild if coverage changes. Applying the prior 87.4% hidden-triangle share to SW far skirts suggests at most 0.690 worker-s gross; deleting every far skirt is an absolute 0.789 worker-s ceiling. The estimate is optimistic: triangle share is not a time share, and edge scanning remains. R23 skirt model
-
Try bounded screen-space refinement changes. This changes far geometry, so require peer determinism and a recipe version bump. Uniformly doubling refinement spacing is already rejected: LOD4–8 exceeded the 1 px geometry and shading gates and introduced holes and cracks. Connector station doubling also opened holes. Credit zero savings to those settings. The narrower cap-refinement budget at stake for SW is 0.870 worker-s, but no safe fraction is measured. Linux15 results
The existing LOD8 change is already a successful cut, not future headroom: the interior now uses MC spacing (512 voxels / 128 m at 25 cm), retaining 128-voxel boundary strips. R14 measured the 8-tile BuildHost LOD8 p95 falling 76.7%, from 59.848 to 13.933 ms; its fresh Standalone comparison reduced LOD8 work from 13.534 to 3.206 worker-s. Further coarsening should be treated as a new candidate. Round14
-
Defer far tiles only for perceived readiness. This saves 0 worker-s; it only moves when the work runs. Measure near-ring readiness and first useful presentation separately from whole-view completion.
Per-generator savings evidence: SW has the breakdown above. R28 measured 4.676 worker-s for flatField LOD4–8, but without the same stage split. L55 measured 13.653 worker-s for Floating Islands LOD4–8; its far skirt pool is 0.982 worker-s, or roughly 0.854 worker-s under the same optimistic hidden-triangle model. Do not transfer SW column or cap costs to FI. For periodic hills, mirrored relief, Motifs, Caves and Lattice, L60 reports whole-view wall times but no comparable far worker-stage breakdown; a per-generator savings estimate is not supported by these logs. R28 generator ledger L60 matrix
Gates
- Run matched LOD4–8 views and enforce the existing ≤1 px maximum geometry error, ≤1/255 shading delta, no-worse adjacent-LOD swaps, and no missing surface, hole, crack or floater. Keep the negative controls that prove the checks catch regressions. Linux15 gate
- For connectors, compare stable tile/ray/station IDs and test all four directions. For caps, check the existing ray coverage and ground/cap agreement. Review matched near and horizon captures for silhouette changes.
- Require Clang/GCC and W1/W8/W12 peer hashes. Bump recipe/cache identity for changed mesh payload or geometry.
- Compare unprofiled whole-view medians and per-LOD worker totals on matched tile sets; don’t infer wall savings by dividing every worker delta by twelve.
I read code, reports, logs and the web. Unreal’s documentation also describes LOD selection in terms of projected screen size, which supports using the owner’s screen-space gate here. Epic LOD documentation No scripts, tests, builds, binaries or tree changes were made.