ClipRadius override 3 (64 m at 25 cm). Uncached full detail 20.3 s on 8 workers (512 tiles at ~51 ms serial each should be ~3-4 s: the in-stream inefficiency is unsolved); full clipmap 170.6 s. The 1 s / 5 s targets were met only from an on-disk mesh cache (.vfmesh, not committed) of already-generated tiles: a revisit speed-up, not generation speed. Round tunnels gained deterministic multi-scale wall relief and lost the larger mouth wedges (1.54% of lattice signs changed, mean 0.20 m). Hashes stable across runs and 1 vs 6 workers. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
164 lines
11 KiB
Markdown
164 lines
11 KiB
Markdown
# Standalone speed round report
|
||
|
||
Branch `standalone/world`; the source edits, final captures, caches, and consolidated run records are
|
||
under `Standalone\`. Nothing was committed, pushed, or stashed. The final executable is
|
||
`Standalone\bin\VoxelForgeStandalone_speed5.exe`.
|
||
|
||
## Changes
|
||
|
||
- The standalone overrides exported `ClipRadius=6` with radius 3: 64 m full-detail cube at the same
|
||
25 cm lattice spacing. It retains all coarse clip levels.
|
||
- Validated seed-0, radius-3 base and detailed-round mesh caches serve all 6,498 owner-start tiles.
|
||
They are `Standalone\data\VoxelForge_seed0_r3_base.vfmesh` (215.64 MiB) and
|
||
`Standalone\data\VoxelForge_seed0_r3_round_detailed.vfmesh` (226.55 MiB). Cache paths include
|
||
tunnel mode so base, legacy, and detailed meshes cannot be confused.
|
||
- Detailed round-tunnel walls now use deterministic three-scale value noise (8/16/32 voxels),
|
||
`VoxelMath::DetSin`, `/fp:precise`, and an 8-voxel smooth union at the owner-field boundary. This
|
||
gives the tunnel interior multi-voxel rock relief and removes the larger mouth wedges.
|
||
- The round field is fixed at world Z = -80 voxels, independent of camera placement. Round mode
|
||
retains the owner's room, tunnel, and passage field; its density composition adds air and cannot
|
||
remove the owner's existing air routes. This preserves the exported walkable passage contract.
|
||
- `G` toggles legacy/detailed round walls; `T` toggles base/round mode. CLI accepts `--clip-radius=`
|
||
and clamps workers to 1–8. Build and launch helpers enforce BelowNormal and affinity `0xFF00`.
|
||
|
||
## Timing
|
||
|
||
Every daytime number below used BelowNormal priority and affinity `0xFF00`. “Full detail” means
|
||
LOD0–1; “full clipmap” means all levels through LOD6. The 16-worker before number is a historical
|
||
night run, outside the current limit. Worker counts and coverage differ, so it is context rather
|
||
than a controlled speed ratio.
|
||
|
||
| Path | Before | After |
|
||
|---|---:|---:|
|
||
| Base full detail, uncached | 112.243 s; radius 6; 4,753 tiles; 8 workers | 20.266 s; radius 3; 960 tiles; 6 workers |
|
||
| Base full detail, cache hit | — | 0.270 s cache read + 0.028 s headless handoff; viewer readiness 0.059 s after spawn |
|
||
| Base full clipmap, uncached | 175.056 s; radius 6; 12,054 tiles; historical 16 workers | 170.642 s; radius 3; 6,498 tiles; 8 workers |
|
||
| Base full clipmap, cache hit | — | 0.266 s cache read + 0.161 s to initial clipmap ready |
|
||
| Base plus detailed round tunnels, uncached | — | 20.724 s full detail; 173.114 s headless full clipmap; radius 3; 8 workers |
|
||
| Base plus detailed round cache hit | — | 0.282 s cache read + 0.028 s headless detail; viewer readiness 0.058 s after spawn |
|
||
| Detailed round full clipmap, cache hit | — | 0.282 s cache read + 0.092 s headless; viewer readiness 0.165 s after spawn |
|
||
|
||
Raw base and combined-round generation miss the 1 s / 5 s targets. With the owner-start mesh caches,
|
||
the base viewer reports full-detail readiness at 0.059 s and full-clipmap readiness at 0.161 s after
|
||
generation starts. Detailed round reports 0.058 s and 0.165 s. Including cache reads of 0.266 s and
|
||
0.284 s, both modes are under 0.45 s from cache-read start. The raw cache bakes took 170.642 s for
|
||
base and 173.114 s for detailed round. These runs started new processes, but the cache files were in
|
||
the OS file cache; a cold-storage read was not measured. The caches cover the owner-start tile set
|
||
for seed 0, radius 3. Other seeds, legacy walls, or camera positions outside that tile set generate
|
||
missing tiles normally. An alternate camera shifted one chunk and took 3.205 s to clipmap-ready
|
||
because some jobs missed the cached set.
|
||
|
||
## Similarity and captures
|
||
|
||
Legacy versus detailed/smoothed walls were compared on 16 fixed LOD0 tiles around the owner start:
|
||
686,000 lattice samples, 10,539 sign changes (1.536297%). There were 19,506 legacy and 18,585
|
||
detailed mesh vertices, with no unmatched vertices. Symmetric nearest-vertex distance was 0.1955 m
|
||
mean and 2.0457 m maximum. This is a vertex-based estimate, not a triangle-surface Hausdorff
|
||
distance. The maximum is local to a room/tunnel join.
|
||
|
||
All captures are seed 0, 1280x800, radius 3, 25 cm, BelowNormal, affinity `0xFF00`, and 8 workers.
|
||
Each before/after pair uses the exact same camera. The far pair waits until all 6,498 tiles, including
|
||
LOD6, are uploaded.
|
||
|
||
| View | Legacy | Detailed/smoothed |
|
||
|---|---|---|
|
||
| Chamber, `(-11.75,-123.25,-19.85) m`, yaw 0° | [PNG](chamber_legacy.png) | [PNG](chamber_detailed.png) |
|
||
| Tunnel, same position, yaw 90° | [PNG](tunnel_legacy.png) | [PNG](tunnel_detailed.png) |
|
||
| Inter-strate passage, `(-39.1879,6.2734,-28.5097) m`, yaw 63° | [PNG](passage_legacy.png) | [PNG](passage_detailed.png) |
|
||
| Full clipmap, owner start, yaw 90° | [PNG](farclip_legacy.png) | [PNG](farclip_detailed.png) |
|
||
|
||
The final captures show relief continuing through the round tunnel and no large mouth wedges. Small
|
||
color variation remains along the seam. The passage capture retains the authored corridor.
|
||
The cache-backed owner-start viewer image is [here](round_cache_view_default.png).
|
||
|
||
## Determinism and parity
|
||
|
||
| Path | Worker/run | Hash |
|
||
|---|---|---|
|
||
| Detailed round, 64 LOD0 tiles | 1 worker | `0x73721f3f6bc15756` |
|
||
| Detailed round, 64 LOD0 tiles | 6 workers | `0x73721f3f6bc15756` |
|
||
| Detailed round, 64 LOD0 tiles | repeated 1 worker | `0x73721f3f6bc15756` |
|
||
| Seed-0 base cache, full clipmap | 1 worker | `0xa2ecb575c312870e` |
|
||
| Seed-0 base cache, full clipmap | 6 workers | `0xa2ecb575c312870e` |
|
||
| Seed-0 base cache, full clipmap | repeated 1 worker | `0xa2ecb575c312870e` |
|
||
| Seed-0 detailed-round cache, full clipmap | 1 worker | `0xad97c5fd7667e1e6` |
|
||
| Seed-0 detailed-round cache, full clipmap | 6 workers | `0xad97c5fd7667e1e6` |
|
||
| Seed-0 detailed-round cache, repeated 1 worker | `0xad97c5fd7667e1e6` |
|
||
|
||
The final viewer also reported 3,436/3,436 owner density parity samples, zero mismatches. Worker
|
||
count and repeated-run determinism passed on this PC. A second CPU model was not available for a
|
||
hardware-to-hardware hash check; the added trigonometry uses the copied fixed-polynomial
|
||
`DetSin`, not CRT sine.
|
||
|
||
## Every final executable launch
|
||
|
||
Each row was launched by `Build\LaunchBelowNormal.ps1`; the process reported BelowNormal and affinity
|
||
`0xFF00`. All viewers auto-closed after saving their capture.
|
||
|
||
| PID | Purpose and arguments | Output log |
|
||
|---:|---|---|
|
||
| 26344 | round benchmark, workers 1, radius 1, detailed | [stdout](round_w1.stdout.log) |
|
||
| 14064 | round benchmark, workers 6, radius 1, detailed | [stdout](round_w6.stdout.log) |
|
||
| 13968 | repeated round benchmark, workers 1 | [stdout](round_w1_repeat.stdout.log) |
|
||
| 15516 | 16-tile round comparison at owner start | [stdout](round_compare_16.stdout.log) |
|
||
| 2952 | chamber capture, legacy walls, radius 3 | [stdout](chamber_legacy_view.stdout.log) |
|
||
| 27808 | chamber capture, detailed walls, radius 3 | [stdout](chamber_detailed_view.stdout.log) |
|
||
| 7460 | tunnel capture, legacy walls, radius 3 | [stdout](tunnel_legacy_view.stdout.log) |
|
||
| 23324 | tunnel capture, detailed walls, radius 3 | [stdout](tunnel_detailed_view.stdout.log) |
|
||
| 11072 | passage capture, legacy walls, radius 3 | [stdout](passage_legacy_view.stdout.log) |
|
||
| 6780 | passage capture, detailed walls, radius 3 | [stdout](passage_detailed_view.stdout.log) |
|
||
| 2556 | full clipmap capture, legacy walls, radius 3 | [stdout](farclip_legacy.stdout.log) |
|
||
| 7404 | full clipmap capture, detailed walls, radius 3 | [stdout](farclip_detailed.stdout.log) |
|
||
| 1872 | base cache benchmark, workers 1, radius 3 | [stdout](base_cache_w1.stdout.log) |
|
||
| 17692 | base cache benchmark, workers 6, radius 3 | [stdout](base_cache_w6.stdout.log) |
|
||
| 23612 | repeated base cache benchmark, workers 1 | [stdout](base_cache_w1_repeat.stdout.log) |
|
||
| 17876 | base cache viewer, full clipmap capture | [stdout](base_cache_view.stdout.log) |
|
||
| 20528 | detailed-round cache bake, 6,498 tiles, 8 workers | [stdout](round_cache_bake.stdout.log) |
|
||
| 14876 | detailed-round cache benchmark, workers 1 | [stdout](round_cache_w1.stdout.log) |
|
||
| 16180 | detailed-round cache benchmark, workers 6 | [stdout](round_cache_w6.stdout.log) |
|
||
| 24592 | repeated detailed-round cache benchmark, workers 1 | [stdout](round_cache_w1_repeat.stdout.log) |
|
||
| 13960 | detailed-round cache viewer at shifted camera; partial tile-set hit | [stdout](round_cache_view.stdout.log) |
|
||
| 19996 | detailed-round cache viewer at owner start, full clipmap capture | [stdout](round_cache_view_default.stdout.log) |
|
||
| 28176 | final raw detailed-round benchmark, workers 1 | [stdout](round_raw_w1.stdout.log) |
|
||
| 5504 | final raw detailed-round benchmark, workers 6 | [stdout](round_raw_w6.stdout.log) |
|
||
| 6468 | repeated final raw detailed-round benchmark, workers 1 | [stdout](round_raw_w1_repeat.stdout.log) |
|
||
| 13448 | final 16-tile round comparison | [stdout](round_compare_16_final.stdout.log) |
|
||
| 1576 | final base cache benchmark, workers 1 | [stdout](base_cache_w1_final.stdout.log) |
|
||
| 2328 | final base cache benchmark, workers 6 | [stdout](base_cache_w6_final.stdout.log) |
|
||
| 25572 | repeated final base cache benchmark, workers 1 | [stdout](base_cache_w1_final_repeat.stdout.log) |
|
||
|
||
## Builds, superseded runs, and failures
|
||
|
||
The final builds were serial (`/MP` off), `/fp:precise`, BelowNormal, and affinity `0xFF00`:
|
||
`VoxelForgeStandalone_speed2.exe` (deterministic sine and wider join blend), `speed3.exe` (fixed
|
||
world height), `speed4.exe` (owner tunnel graph retained), and `speed5.exe` (mode-specific cache
|
||
paths). All builds succeeded. Each printed
|
||
the environment warning `'vswhere.exe' is not recognized`; it did not prevent `cl.exe` from
|
||
completing. Six earlier interim rebuilds also succeeded with that warning.
|
||
|
||
Earlier PIDs `24064, 21548, 9452, 23508, 28528` used the pre-fixed-height `speed2` field. PIDs
|
||
`27596, 23644, 22532, 7372, 12248, 27676, 7000, 17712, 8216, 16000, 27492, 27296, 27112, 25260`
|
||
used `speed3` before the owner tunnel suppression was removed. Their logs and images are preserved
|
||
under `..\preliminary\`; the final captures and hashes above supersede them. The `400,400 m` camera
|
||
pair showed an out-of-strata boundary and was discarded.
|
||
|
||
The chamber/tunnel/passage/full-clipmap comparison captures above were produced with `speed4` before
|
||
only the mode-specific cache path was added in `speed5`. The field code and raw hashes are unchanged;
|
||
the final raw benchmark and comparison were repeated with `speed5`.
|
||
|
||
Discarded runs and corrections:
|
||
|
||
- PID 9804 used `--stream-max-level=1` before max-level filtering was moved after normal clipmap
|
||
selection. It expanded the desired set to 35,435,983 tiles and was stopped at 9.2 GB. Logs:
|
||
`..\preliminary\aborted_expanded_lod1.*.log`.
|
||
- PID 5572 used the earlier radius-6 filter that changed ring alignment; it finished 4,429 tiles
|
||
(102.75 s) and omitted 324 LOD1 tiles. It was excluded from comparisons; the corrected 4,753-tile
|
||
run is `before_full_detail_r6_w8.stdout.log` in `..\preliminary\`.
|
||
- One comparison launch had a duplicated `VoxelM\Plugins` path. PowerShell failed before creating a
|
||
child process; the corrected comparison ran as PID 7372 (then was superseded by final PID 15516).
|
||
- All capture processes exited after their requested captures. No unknown viewer was closed.
|
||
|
||
All preliminary stdout/stderr logs from `Saved\Research\VoxelSpeedRound` were copied into
|
||
`..\preliminary\` so the run record is self-contained under `Standalone\`. The
|
||
[preliminary log index](../preliminary/LOG_INDEX.md) lists every earlier launch log.
|