diff --git a/.gitignore b/.gitignore index 7f1d4d5..a9bcfb1 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ !*.md /Standalone/data/*.log /Standalone/data/*.err +/Standalone/data/*.vfmesh diff --git a/Standalone/Build.ps1 b/Standalone/Build.ps1 index f995402..128232b 100644 --- a/Standalone/Build.ps1 +++ b/Standalone/Build.ps1 @@ -2,6 +2,9 @@ param([string]$OutputName = 'VoxelForgeStandalone.exe') $ErrorActionPreference = 'Stop' +$BuildHostProcess = Get-Process -Id $PID +$BuildHostProcess.PriorityClass = 'BelowNormal' +$BuildHostProcess.ProcessorAffinity = [IntPtr]0xFF00 $Root = [IO.Path]::GetFullPath($PSScriptRoot) $BuildDir = Join-Path $Root 'Build' $BinDir = Join-Path $Root 'bin' @@ -48,6 +51,7 @@ $RspLines = @( ('/I"{0}"' -f (Join-Path $Root 'Source\VoxelForge\Private')), ('/Fe"{0}"' -f $OutputPath) ) +# This build stays serial (no /MP); the daytime ceiling is four compiler processes. foreach ($Source in $Sources) { $RspLines += ('"{0}"' -f $Source) } $RspLines += @('/link','d3d11.lib','dxgi.lib','d3dcompiler.lib','user32.lib','gdi32.lib') [IO.File]::WriteAllLines($ResponsePath,$RspLines,[Text.UTF8Encoding]::new($false)) diff --git a/Standalone/README.md b/Standalone/README.md index 699d61b..3d96188 100644 --- a/Standalone/README.md +++ b/Standalone/README.md @@ -1,7 +1,7 @@ # VoxelForge standalone world This C++20 program loads the owner snapshot from `data/owner_world.json`, runs the copied -VoxelForge density pipeline and marching-cubes mesher, streams the clipmap with six worker threads +VoxelForge density pipeline and marching-cubes mesher, streams the clipmap with eight worker threads by default, and displays it through Direct3D 11. Unreal is not linked or needed at run time. ## Build and launch @@ -22,10 +22,10 @@ JSON beside itself under `Standalone\data\`. ### Daytime resource limit Run tests and benchmarks at Idle or BelowNormal priority and use no more than 8 of this PC's 16 -logical CPUs. The default viewer uses six workers. Use `Build\LaunchBelowNormal.ps1` for any test or -benchmark process; it starts the child at BelowNormal and verifies the priority. Builds use no more -than four compiler processes (the current build is serial) and retain `/fp:precise`. The all-core -16-worker runs documented below were the owner's one-night exception. +logical CPUs. The default viewer uses eight workers. Use `Build\LaunchBelowNormal.ps1` for any test or +benchmark process; it starts the child at BelowNormal, applies affinity `0xFF00`, and verifies both. +Builds use no more than four compiler processes (the current build is serial) and retain +`/fp:precise`. The all-core 16-worker runs documented below were the owner's one-night exception. ## Controls @@ -33,8 +33,9 @@ than four compiler processes (the current build is serial) and retain `/fp:preci - WASD moves; Space/Ctrl or E/Q moves vertically; Shift moves faster; the wheel changes speed. - F toggles wireframe. - 1 through 7 toggle clipmap levels 0 through 6 individually; 0 toggles every level. -- N/P changes the seed. T switches between the owner's base tunnels and the research-shaped round, - winding tunnel option; `--round-tunnels` starts in that variant. Either action rebuilds the clipmap. +- N/P changes the seed. T switches between the owner's base world and the added research-shaped + round, winding tunnels; `--round-tunnels` starts in that variant. G switches between legacy smooth + and detailed/smoothed tunnel walls. Either action rebuilds the clipmap. Crossing a chunk recenters streaming: tiles still desired stay resident, only new tiles are generated, and leaving tiles are dropped. - Esc exits. @@ -75,11 +76,15 @@ and seed. The export also records their geometry in JSON for reference. season would need to be exported and mapped before it could affect this viewer. - `WITH_EDITOR` research/debug branches, Unreal logging, startup trace, profiling counters, and reflection metadata do not run in the standalone. The base generator path is the default. -- T selects a standalone-only tunnel-shape port. It disables the owner's first-strate tunnel - connections and adds the research field's cubic winding centerline and round elliptical tunnel +- T selects a standalone-only tunnel-shape port. It preserves the owner's rooms, tunnels, and + passages, then adds the research field's cubic winding centerline and round elliptical tunnel profile (144-voxel pitch, 28-voxel radius, 26-voxel half-height, deterministic variable radius - and vertical wave), anchored around the camera's current height. It reuses the base rooms and - passages; it does not port the research field's room planner or full parameterized density field. + and vertical wave) at the fixed world height -80 voxels. Detailed walls use deterministic relief + at 8-, 16-, and 32-voxel wavelengths; the fixed-height field and copied `DetSin` keep the world + independent of camera placement and CRT trigonometry. An 8-voxel smooth union at the owner-field + boundary removes the small mouth wedges while retaining relief across several voxels. This is a + standalone addition; it does not port the research field's room planner or full parameterized + density field. ## Owner data and parity @@ -244,3 +249,61 @@ BelowNormal workers: | Before palette pass | After palette pass | |---|---| | ![Before tunnel palette](data/night18_tunnel_view_before.png) | ![After tunnel palette](data/night19_tunnel_view_after.png) | + +## 2026-10 speed round + +The owner export still says `ClipRadius=6`, which selects a 112 m full-detail cube. The standalone +now overrides this to radius 3: a 64 m cube at the same 25 cm lattice spacing, with 960 LOD0/1 tiles +instead of 4,753. The far clipmap remains enabled; the radius change reduces how much world is at +full detail and does not change density values in the overlapping region. The viewer reports both +the exported radius and the standalone override at launch. + +| Path | Before | After | +|---|---:|---:| +| Full detail, uncached | 112.243 s, radius 6, 4,753 tiles, 8 workers | 20.266 s, radius 3, 960 tiles, 6 workers | +| Full detail, seed-0 base cache hit | — | 0.270 s cache read + 0.028 s headless handoff; viewer full-detail ready at 0.059 s | +| Full clipmap, uncached | 175.056 s, radius 6, 12,054 tiles, 16-worker historical night run | 170.642 s, radius 3, 6,498 tiles, 8 workers | +| Full clipmap, seed-0 base 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 ready at 0.058 s | +| Detailed round full clipmap, cache hit | — | 0.282 s cache read + 0.092 s headless; viewer ready at 0.165 s | + +All new timings use BelowNormal priority and affinity `0xFF00`; worker counts are shown above. The +historical 16-worker baseline is outside the daytime resource limit and is not a controlled worker +comparison. Raw generation still misses both time targets. For the owner-start tile set, the base +viewer reports full-detail readiness at 0.059 s and full-clipmap readiness at 0.161 s after +generation starts. The detailed round viewer reports 0.058 s and 0.165 s. Including their 0.266 s / +0.284 s cache reads, both modes are below 0.45 s from cache-read start. The base cache is +`data/VoxelForge_seed0_r3_base.vfmesh` (215.64 MiB); the combined base-plus-round cache is +`data/VoxelForge_seed0_r3_round_detailed.vfmesh` (226.55 MiB). Their raw bakes took 170.642 s and +173.114 s. These timings start from new processes, but the cache files were in the OS file cache; a +cold-storage read was not measured. Cache metadata includes seed, radius, source data, and tunnel +mode. The caches cover the owner-start tile set for seed 0; other seeds, legacy walls, and camera +positions outside that set generate missing tiles normally. + +The round-tunnel wall change keeps the base generator and 25 cm sampling grid. Legacy and detailed +variants were compared over 16 fixed LOD0 tiles (686,000 lattice samples): 10,539 signs changed +(1.5363%). Symmetric nearest-vertex distance was 0.1955 m mean and 2.0457 m maximum, with no +unmatched vertices. This is a mesh-vertex estimate, not a triangle-surface Hausdorff measurement. +The larger maximum is local to tunnel/room joins. Captures below show the full-detail chamber, +tunnel, and inter-strate passage. The far pair waits for all 6,498 clipmap tiles to upload. + +| Fixed view | Legacy walls | Detailed/smoothed walls | +|---|---|---| +| Chamber `(-11.75,-123.25,-19.85) m`, yaw 0° | [capture](Research/VoxelSpeedRound/final/chamber_legacy.png) | [capture](Research/VoxelSpeedRound/final/chamber_detailed.png) | +| Tunnel `(-11.75,-123.25,-19.85) m`, yaw 90° | [capture](Research/VoxelSpeedRound/final/tunnel_legacy.png) | [capture](Research/VoxelSpeedRound/final/tunnel_detailed.png) | +| Passage `(-39.19,6.27,-28.51) m`, yaw 63° | [capture](Research/VoxelSpeedRound/final/passage_legacy.png) | [capture](Research/VoxelSpeedRound/final/passage_detailed.png) | +| Full clipmap `(-11.75,-123.25,-19.85) m`, yaw 90° | [capture](Research/VoxelSpeedRound/final/farclip_legacy.png) | [capture](Research/VoxelSpeedRound/final/farclip_detailed.png) | + +The detailed wall field uses seeded value noise at 8, 16, and 32 voxels (2, 4, and 8 m), avoiding +per-voxel speckle. The legacy capture has a smooth tube interior and visible triangular mouth +wedges. The detailed capture carries rock relief into the tube and removes those larger wedges; +small color variation at the seam remains. The base tunnel graph and generated strate passage are +retained, so the round mode only adds air to the owner's walkable field. + +`Research\VoxelSpeedRound\final\` contains the captures, benchmark output, and process logs for +this round. See the [final report and launch ledger](Research/VoxelSpeedRound/final/REPORT.md) for +PIDs and discarded runs. Each viewer/benchmark was started with `Build\LaunchBelowNormal.ps1`, which +prints its PID, BelowNormal priority, and `0xFF00` affinity. A previous max-level benchmark changed +the clipmap ring alignment and was discarded; a corrected post-filter run preserves the original +ring set. diff --git a/Standalone/Research/VoxelSpeedRound/final/REPORT.md b/Standalone/Research/VoxelSpeedRound/final/REPORT.md new file mode 100644 index 0000000..e781707 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/REPORT.md @@ -0,0 +1,163 @@ +# 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. diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_view.png b/Standalone/Research/VoxelSpeedRound/final/base_cache_view.png new file mode 100644 index 0000000..2745be1 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/base_cache_view.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_view.stderr.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_view.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_view.stdout.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_view.stdout.log new file mode 100644 index 0000000..5929d5e --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/base_cache_view.stdout.log @@ -0,0 +1,23 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.61, -118.22, -19.85) m. +Density parity: 3436/3436 bit-identical; mismatches=0 + inter_strate_passage 10 + passage_landing 4 + room_interior 12 + strate_boundary 2420 + tunnel_interior 222 + varied_world 768 +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.266 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +Streaming seed 0: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[ChunkCrossingWork] id=0 submitted=6498 finished=6498 generated=6498 cancelled_queued=0 stale=0 samples=79.15M worker_sum=0.267s wall=0.042s avg=0.041ms +[FullDetailReady] 0.059 s after spawn; resident=6498/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=0.019s avg=0.037ms p50=0.000ms p95=0.156ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=0.013s avg=0.029ms p50=0.000ms p95=0.140ms +[TileTiming] LOD=2 generated=320 target=320 samples=2.19M worker_sum=0.006s avg=0.019ms p50=0.001ms p95=0.098ms +[TileTiming] LOD=3 generated=208 target=208 samples=1.43M worker_sum=0.005s avg=0.023ms p50=0.008ms p95=0.078ms +[TileTiming] LOD=4 generated=144 target=144 samples=0.99M worker_sum=0.003s avg=0.024ms p50=0.009ms p95=0.096ms +[TileTiming] LOD=5 generated=96 target=96 samples=0.66M worker_sum=0.003s avg=0.035ms p50=0.009ms p95=0.158ms +[TileTiming] LOD=6 generated=4770 target=4770 samples=32.72M worker_sum=0.218s avg=0.046ms p50=0.029ms p95=0.163ms +[InitialClipmapReady] 0.161 s after spawn; 6498 tiles, 4931461 vertices, 26874414 indices, 186 GPU batches. +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\base_cache_view.png (0.215 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1.stdout.log new file mode 100644 index 0000000..8f6c79e --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.270 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=1 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.028s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.092s generated=6498/6498 worker_sum=0.073s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.005s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.004s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.001s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.001s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.001s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.001s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.061s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final.stderr.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final.stdout.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final.stdout.log new file mode 100644 index 0000000..721c6ed --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.260 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=1 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.016s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.079s generated=6498/6498 worker_sum=0.072s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.005s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.003s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.001s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.001s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.001s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.001s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.059s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final_repeat.stdout.log new file mode 100644 index 0000000..93b905f --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_final_repeat.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.259 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=1 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.012s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.090s generated=6498/6498 worker_sum=0.069s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.005s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.003s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.001s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.001s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.000s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.001s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.057s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_repeat.stdout.log new file mode 100644 index 0000000..7929fbc --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/base_cache_w1_repeat.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.268 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=1 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.018s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.083s generated=6498/6498 worker_sum=0.069s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.005s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.003s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.001s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.001s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.001s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.001s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.057s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w6.stdout.log new file mode 100644 index 0000000..c5a0f6b --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/base_cache_w6.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.269 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=6 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.017s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.049s generated=6498/6498 worker_sum=0.196s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.014s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.009s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.003s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.004s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.002s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.003s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.160s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w6_final.stderr.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w6_final.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/base_cache_w6_final.stdout.log b/Standalone/Research/VoxelSpeedRound/final/base_cache_w6_final.stdout.log new file mode 100644 index 0000000..1503a70 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/base_cache_w6_final.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.258 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=6 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.010s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.043s generated=6498/6498 worker_sum=0.179s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.012s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.009s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.003s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.005s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.003s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.002s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.144s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/chamber_detailed.png b/Standalone/Research/VoxelSpeedRound/final/chamber_detailed.png new file mode 100644 index 0000000..e49684f Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/chamber_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/chamber_detailed_view.stderr.log b/Standalone/Research/VoxelSpeedRound/final/chamber_detailed_view.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/chamber_detailed_view.stdout.log b/Standalone/Research/VoxelSpeedRound/final/chamber_detailed_view.stdout.log new file mode 100644 index 0000000..854e464 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/chamber_detailed_view.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 21.411 s after spawn; resident=1114/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=86.427s avg=168.803ms p50=117.353ms p95=553.840ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=78.231s avg=174.623ms p50=83.555ms p95=568.057ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\chamber_detailed.png (21.470 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/chamber_legacy.png b/Standalone/Research/VoxelSpeedRound/final/chamber_legacy.png new file mode 100644 index 0000000..91adde8 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/chamber_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/chamber_legacy_view.stderr.log b/Standalone/Research/VoxelSpeedRound/final/chamber_legacy_view.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/chamber_legacy_view.stdout.log b/Standalone/Research/VoxelSpeedRound/final/chamber_legacy_view.stdout.log new file mode 100644 index 0000000..8b83881 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/chamber_legacy_view.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 21.225 s after spawn; resident=1112/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=85.801s avg=167.580ms p50=117.504ms p95=551.353ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=77.445s avg=172.868ms p50=83.015ms p95=572.058ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\chamber_legacy.png (21.284 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/farclip_detailed.png b/Standalone/Research/VoxelSpeedRound/final/farclip_detailed.png new file mode 100644 index 0000000..23dbd46 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/farclip_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/farclip_detailed.stderr.log b/Standalone/Research/VoxelSpeedRound/final/farclip_detailed.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/farclip_detailed.stdout.log b/Standalone/Research/VoxelSpeedRound/final/farclip_detailed.stdout.log new file mode 100644 index 0000000..2461734 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/farclip_detailed.stdout.log @@ -0,0 +1,15 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 21.647 s after spawn; resident=1110/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=87.598s avg=171.089ms p50=117.631ms p95=561.230ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=79.085s avg=176.528ms p50=84.967ms p95=577.839ms +[ChunkCrossingWork] id=0 submitted=6498 finished=6498 generated=6498 cancelled_queued=0 stale=0 samples=79.15M worker_sum=1472.735s wall=184.204s avg=226.644ms +[InitialClipmapReady] 184.204 s after spawn; 6498 tiles, 5219760 vertices, 28509696 indices, 189 GPU batches. +[TileTiming] LOD=2 generated=320 target=320 samples=2.19M worker_sum=13.664s avg=42.700ms p50=24.335ms p95=94.784ms +[TileTiming] LOD=3 generated=208 target=208 samples=1.43M worker_sum=24.132s avg=116.019ms p50=109.914ms p95=157.206ms +[TileTiming] LOD=4 generated=144 target=144 samples=0.99M worker_sum=30.499s avg=211.797ms p50=168.818ms p95=356.849ms +[TileTiming] LOD=5 generated=96 target=96 samples=0.66M worker_sum=17.956s avg=187.046ms p50=179.621ms p95=241.588ms +[TileTiming] LOD=6 generated=4770 target=4770 samples=32.72M worker_sum=1219.802s avg=255.724ms p50=258.391ms p95=297.769ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\farclip_detailed.png (184.376 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/farclip_detailed_cached.png b/Standalone/Research/VoxelSpeedRound/final/farclip_detailed_cached.png new file mode 100644 index 0000000..23dbd46 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/farclip_detailed_cached.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/farclip_legacy.png b/Standalone/Research/VoxelSpeedRound/final/farclip_legacy.png new file mode 100644 index 0000000..4cc9c82 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/farclip_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/farclip_legacy.stderr.log b/Standalone/Research/VoxelSpeedRound/final/farclip_legacy.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/farclip_legacy.stdout.log b/Standalone/Research/VoxelSpeedRound/final/farclip_legacy.stdout.log new file mode 100644 index 0000000..fcd5eca --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/farclip_legacy.stdout.log @@ -0,0 +1,15 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 21.159 s after spawn; resident=1114/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=84.865s avg=165.752ms p50=113.790ms p95=554.274ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=77.757s avg=173.565ms p50=82.070ms p95=573.359ms +[ChunkCrossingWork] id=0 submitted=6498 finished=6498 generated=6498 cancelled_queued=0 stale=0 samples=79.15M worker_sum=1462.856s wall=182.941s avg=225.124ms +[InitialClipmapReady] 182.941 s after spawn; 6498 tiles, 5227818 vertices, 28555560 indices, 189 GPU batches. +[TileTiming] LOD=2 generated=320 target=320 samples=2.19M worker_sum=13.567s avg=42.396ms p50=24.026ms p95=94.973ms +[TileTiming] LOD=3 generated=208 target=208 samples=1.43M worker_sum=23.994s avg=115.357ms p50=110.426ms p95=153.005ms +[TileTiming] LOD=4 generated=144 target=144 samples=0.99M worker_sum=29.813s avg=207.034ms p50=163.291ms p95=348.831ms +[TileTiming] LOD=5 generated=96 target=96 samples=0.66M worker_sum=17.943s avg=186.908ms p50=181.111ms p95=244.778ms +[TileTiming] LOD=6 generated=4770 target=4770 samples=32.72M worker_sum=1214.917s avg=254.699ms p50=257.694ms p95=297.145ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\farclip_legacy.png (183.188 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/passage_detailed.png b/Standalone/Research/VoxelSpeedRound/final/passage_detailed.png new file mode 100644 index 0000000..313a287 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/passage_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/passage_detailed_view.stderr.log b/Standalone/Research/VoxelSpeedRound/final/passage_detailed_view.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/passage_detailed_view.stdout.log b/Standalone/Research/VoxelSpeedRound/final/passage_detailed_view.stdout.log new file mode 100644 index 0000000..51df3ab --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/passage_detailed_view.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-39.19, 6.27, -28.51) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 19.352 s after spawn; resident=1140/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=58.336s avg=113.937ms p50=109.468ms p95=188.036ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=89.163s avg=199.025ms p50=111.314ms p95=589.697ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\passage_detailed.png (19.411 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/passage_legacy.png b/Standalone/Research/VoxelSpeedRound/final/passage_legacy.png new file mode 100644 index 0000000..b1db5a2 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/passage_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/passage_legacy_view.stderr.log b/Standalone/Research/VoxelSpeedRound/final/passage_legacy_view.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/passage_legacy_view.stdout.log b/Standalone/Research/VoxelSpeedRound/final/passage_legacy_view.stdout.log new file mode 100644 index 0000000..ca6c871 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/passage_legacy_view.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-39.19, 6.27, -28.51) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 19.063 s after spawn; resident=1124/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=56.801s avg=110.939ms p50=106.564ms p95=180.071ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=88.974s avg=198.602ms p50=109.855ms p95=590.665ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\passage_legacy.png (19.122 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_bake.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_bake.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_bake.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_bake.stdout.log new file mode 100644 index 0000000..a778549 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_cache_bake.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=8 full_detail_tiles=960 desired_tiles=6498 variant=round-detailed +[StreamFullDetail] wall=20.724s generated=960/960 resident_tiles_cpu_only=1 density_hash=0x9114331b8aefc1dd +[StreamFullClipmap] wall=173.114s generated=6498/6498 worker_sum=1384.165s tiles=6498 density_hash=0xad97c5fd7667e1e6 +[StreamCacheUse] hits=0 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=80.980s vertices=384689 indices=2193123 density_hash=0x93cc1370722d9d66 +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=76.195s vertices=311455 indices=1776477 density_hash=0x5480c635ae418fa2 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=13.018s vertices=93863 indices=519900 density_hash=0xc1149727b4bad25a +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=23.177s vertices=113116 indices=627114 density_hash=0x93918aad8e52b13b +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=28.969s vertices=96332 indices=535950 density_hash=0x59c6c20ac2365e2d +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=17.130s vertices=87279 indices=474666 density_hash=0xfe15a030e07e753a +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=1144.695s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc +[MeshCacheBake] saved 6498 tiles, 226.55 MiB to E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_round_detailed.vfmesh diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_view.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_view.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_view.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_view.stdout.log new file mode 100644 index 0000000..9b60ab8 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_cache_view.stdout.log @@ -0,0 +1,16 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 226.55 MiB in 0.281 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_round_detailed.vfmesh +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[ChunkCrossingWork] id=0 submitted=6498 finished=6498 generated=6498 cancelled_queued=0 stale=0 samples=79.15M worker_sum=23.823s wall=3.205s avg=3.666ms +[FullDetailReady] 3.205 s after spawn; resident=6498/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=21.440s avg=41.875ms p50=0.007ms p95=171.694ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=2.279s avg=5.087ms p50=0.000ms p95=0.055ms +[TileTiming] LOD=2 generated=320 target=320 samples=2.19M worker_sum=0.002s avg=0.005ms p50=0.002ms p95=0.021ms +[TileTiming] LOD=3 generated=208 target=208 samples=1.43M worker_sum=0.002s avg=0.010ms p50=0.007ms p95=0.027ms +[TileTiming] LOD=4 generated=144 target=144 samples=0.99M worker_sum=0.002s avg=0.013ms p50=0.008ms p95=0.032ms +[TileTiming] LOD=5 generated=96 target=96 samples=0.66M worker_sum=0.002s avg=0.020ms p50=0.011ms p95=0.044ms +[TileTiming] LOD=6 generated=4770 target=4770 samples=32.72M worker_sum=0.097s avg=0.020ms p50=0.011ms p95=0.048ms +[InitialClipmapReady] 3.205 s after spawn; 6498 tiles, 5219760 vertices, 28509696 indices, 189 GPU batches. +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\farclip_detailed_cached.png (3.376 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_view_default.png b/Standalone/Research/VoxelSpeedRound/final/round_cache_view_default.png new file mode 100644 index 0000000..bd83714 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/round_cache_view_default.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_view_default.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_view_default.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_view_default.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_view_default.stdout.log new file mode 100644 index 0000000..817d057 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_cache_view_default.stdout.log @@ -0,0 +1,16 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.61, -118.22, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 226.55 MiB in 0.284 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_round_detailed.vfmesh +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[ChunkCrossingWork] id=0 submitted=6498 finished=6498 generated=6498 cancelled_queued=0 stale=0 samples=79.15M worker_sum=0.288s wall=0.046s avg=0.044ms +[FullDetailReady] 0.058 s after spawn; resident=6498/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=0.021s avg=0.041ms p50=0.005ms p95=0.153ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=0.018s avg=0.041ms p50=0.001ms p95=0.183ms +[TileTiming] LOD=2 generated=320 target=320 samples=2.19M worker_sum=0.006s avg=0.019ms p50=0.002ms p95=0.104ms +[TileTiming] LOD=3 generated=208 target=208 samples=1.43M worker_sum=0.007s avg=0.032ms p50=0.009ms p95=0.116ms +[TileTiming] LOD=4 generated=144 target=144 samples=0.99M worker_sum=0.005s avg=0.032ms p50=0.011ms p95=0.117ms +[TileTiming] LOD=5 generated=96 target=96 samples=0.66M worker_sum=0.005s avg=0.055ms p50=0.039ms p95=0.182ms +[TileTiming] LOD=6 generated=4770 target=4770 samples=32.72M worker_sum=0.226s avg=0.047ms p50=0.027ms p95=0.165ms +[InitialClipmapReady] 0.165 s after spawn; 6498 tiles, 5176759 vertices, 28264062 indices, 187 GPU batches. +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\round_cache_view_default.png (0.220 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_w1.stdout.log new file mode 100644 index 0000000..4fbcdce --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_cache_w1.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 226.55 MiB in 0.282 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_round_detailed.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=1 full_detail_tiles=960 desired_tiles=6498 variant=round-detailed +[StreamFullDetail] wall=0.028s generated=960/960 resident_tiles_cpu_only=1 density_hash=0x9114331b8aefc1dd +[StreamFullClipmap] wall=0.092s generated=6498/6498 worker_sum=0.075s tiles=6498 density_hash=0xad97c5fd7667e1e6 +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.006s vertices=384689 indices=2193123 density_hash=0x93cc1370722d9d66 +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.005s vertices=311455 indices=1776477 density_hash=0x5480c635ae418fa2 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.001s vertices=93863 indices=519900 density_hash=0xc1149727b4bad25a +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.001s vertices=113116 indices=627114 density_hash=0x93918aad8e52b13b +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.001s vertices=96332 indices=535950 density_hash=0x59c6c20ac2365e2d +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.001s vertices=87279 indices=474666 density_hash=0xfe15a030e07e753a +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.059s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_w1_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_w1_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_w1_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_w1_repeat.stdout.log new file mode 100644 index 0000000..5f2598a --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_cache_w1_repeat.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 226.55 MiB in 0.280 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_round_detailed.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=1 full_detail_tiles=960 desired_tiles=6498 variant=round-detailed +[StreamFullDetail] wall=0.027s generated=960/960 resident_tiles_cpu_only=1 density_hash=0x9114331b8aefc1dd +[StreamFullClipmap] wall=0.090s generated=6498/6498 worker_sum=0.076s tiles=6498 density_hash=0xad97c5fd7667e1e6 +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.006s vertices=384689 indices=2193123 density_hash=0x93cc1370722d9d66 +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.005s vertices=311455 indices=1776477 density_hash=0x5480c635ae418fa2 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.002s vertices=93863 indices=519900 density_hash=0xc1149727b4bad25a +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.002s vertices=113116 indices=627114 density_hash=0x93918aad8e52b13b +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.001s vertices=96332 indices=535950 density_hash=0x59c6c20ac2365e2d +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.001s vertices=87279 indices=474666 density_hash=0xfe15a030e07e753a +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.060s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_cache_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_cache_w6.stdout.log new file mode 100644 index 0000000..04dd78e --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_cache_w6.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 226.55 MiB in 0.289 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_round_detailed.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=6 full_detail_tiles=960 desired_tiles=6498 variant=round-detailed +[StreamFullDetail] wall=0.011s generated=960/960 resident_tiles_cpu_only=1 density_hash=0x9114331b8aefc1dd +[StreamFullClipmap] wall=0.045s generated=6498/6498 worker_sum=0.200s tiles=6498 density_hash=0xad97c5fd7667e1e6 +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.015s vertices=384689 indices=2193123 density_hash=0x93cc1370722d9d66 +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.012s vertices=311455 indices=1776477 density_hash=0x5480c635ae418fa2 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.005s vertices=93863 indices=519900 density_hash=0xc1149727b4bad25a +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.006s vertices=113116 indices=627114 density_hash=0x93918aad8e52b13b +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.003s vertices=96332 indices=535950 density_hash=0x59c6c20ac2365e2d +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.003s vertices=87279 indices=474666 density_hash=0xfe15a030e07e753a +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.157s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/final/round_compare_16.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_compare_16.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_compare_16.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_compare_16.stdout.log new file mode 100644 index 0000000..9b4a5eb --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_compare_16.stdout.log @@ -0,0 +1 @@ +[RoundTunnelCompare] tiles=16 lattice_samples=686000 changed_signs=10539 changed_share=1.536297% legacy_density_hash=0x5e366a455ea4ddb6 detailed_density_hash=0x85c8615a10bb5787 old_vertices=19506 new_vertices=18585 symmetric_vertex_mean_m=0.1955 symmetric_vertex_max_m=2.0457 unmatched_vertices=0 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_compare_16_final.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_compare_16_final.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_compare_16_final.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_compare_16_final.stdout.log new file mode 100644 index 0000000..9b4a5eb --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_compare_16_final.stdout.log @@ -0,0 +1 @@ +[RoundTunnelCompare] tiles=16 lattice_samples=686000 changed_signs=10539 changed_share=1.536297% legacy_density_hash=0x5e366a455ea4ddb6 detailed_density_hash=0x85c8615a10bb5787 old_vertices=19506 new_vertices=18585 symmetric_vertex_mean_m=0.1955 symmetric_vertex_max_m=2.0457 unmatched_vertices=0 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_raw_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_raw_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_raw_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_raw_w1.stdout.log new file mode 100644 index 0000000..ce40c3d --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_raw_w1.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=5.510s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x73721f3f6bc15756 +[StreamFullClipmap] wall=5.510s generated=64/64 worker_sum=5.505s tiles=64 density_hash=0x73721f3f6bc15756 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=5.505s vertices=84259 indices=479682 density_hash=0x73721f3f6bc15756 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_raw_w1_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_raw_w1_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_raw_w1_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_raw_w1_repeat.stdout.log new file mode 100644 index 0000000..5b61004 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_raw_w1_repeat.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=5.483s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x73721f3f6bc15756 +[StreamFullClipmap] wall=5.483s generated=64/64 worker_sum=5.469s tiles=64 density_hash=0x73721f3f6bc15756 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=5.469s vertices=84259 indices=479682 density_hash=0x73721f3f6bc15756 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_raw_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_raw_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_raw_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_raw_w6.stdout.log new file mode 100644 index 0000000..1d9c461 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_raw_w6.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=6 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=1.300s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x73721f3f6bc15756 +[StreamFullClipmap] wall=1.300s generated=64/64 worker_sum=7.587s tiles=64 density_hash=0x73721f3f6bc15756 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=7.587s vertices=84259 indices=479682 density_hash=0x73721f3f6bc15756 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_w1.stdout.log new file mode 100644 index 0000000..0a6a4f0 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_w1.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=5.513s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x73721f3f6bc15756 +[StreamFullClipmap] wall=5.513s generated=64/64 worker_sum=5.511s tiles=64 density_hash=0x73721f3f6bc15756 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=5.511s vertices=84259 indices=479682 density_hash=0x73721f3f6bc15756 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_w1_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_w1_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_w1_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_w1_repeat.stdout.log new file mode 100644 index 0000000..c9422c5 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_w1_repeat.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=5.484s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x73721f3f6bc15756 +[StreamFullClipmap] wall=5.484s generated=64/64 worker_sum=5.471s tiles=64 density_hash=0x73721f3f6bc15756 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=5.471s vertices=84259 indices=479682 density_hash=0x73721f3f6bc15756 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/final/round_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/round_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/final/round_w6.stdout.log new file mode 100644 index 0000000..bbe06f3 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/round_w6.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=6 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=1.300s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x73721f3f6bc15756 +[StreamFullClipmap] wall=1.300s generated=64/64 worker_sum=7.594s tiles=64 density_hash=0x73721f3f6bc15756 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=7.594s vertices=84259 indices=479682 density_hash=0x73721f3f6bc15756 diff --git a/Standalone/Research/VoxelSpeedRound/final/tunnel_detailed.png b/Standalone/Research/VoxelSpeedRound/final/tunnel_detailed.png new file mode 100644 index 0000000..23dbd46 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/tunnel_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/tunnel_detailed_view.stderr.log b/Standalone/Research/VoxelSpeedRound/final/tunnel_detailed_view.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/tunnel_detailed_view.stdout.log b/Standalone/Research/VoxelSpeedRound/final/tunnel_detailed_view.stdout.log new file mode 100644 index 0000000..2517fe8 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/tunnel_detailed_view.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 21.434 s after spawn; resident=1123/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=86.331s avg=168.616ms p50=118.642ms p95=549.445ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=78.220s avg=174.598ms p50=83.954ms p95=572.079ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\tunnel_detailed.png (21.493 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/final/tunnel_legacy.png b/Standalone/Research/VoxelSpeedRound/final/tunnel_legacy.png new file mode 100644 index 0000000..4cc9c82 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/final/tunnel_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/final/tunnel_legacy_view.stderr.log b/Standalone/Research/VoxelSpeedRound/final/tunnel_legacy_view.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/final/tunnel_legacy_view.stdout.log b/Standalone/Research/VoxelSpeedRound/final/tunnel_legacy_view.stdout.log new file mode 100644 index 0000000..e13c349 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/final/tunnel_legacy_view.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 21.032 s after spawn; resident=1112/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=84.672s avg=165.375ms p50=112.752ms p95=548.246ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=77.238s avg=172.406ms p50=82.831ms p95=570.248ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\final\tunnel_legacy.png (21.157 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/LOG_INDEX.md b/Standalone/Research/VoxelSpeedRound/preliminary/LOG_INDEX.md new file mode 100644 index 0000000..0abaec8 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/LOG_INDEX.md @@ -0,0 +1,65 @@ +# Preliminary launch logs + +Each linked stdout log is one executable child launch; its matching `.stderr.log` is empty. Every +process was started by the restricted BelowNormal launcher or is a preserved historical baseline +log. PIDs for the speed2/speed3 exploratory launches are listed in +`..\final\REPORT.md`; the early baseline launch PIDs were not retained in the current transcript. + +## Radius and full-detail measurements + +- [before_l0_64](before_l0_64.stdout.log), [after_l0_64](after_l0_64.stdout.log), + [after_l0_64_radius6](after_l0_64_radius6.stdout.log) +- [before_full_detail_r6_w8](before_full_detail_r6_w8.stdout.log) +- [after_full_detail_w1](after_full_detail_w1.stdout.log), + [after_full_detail_w6](after_full_detail_w6.stdout.log) +- [after_full_detail_r3_w1](after_full_detail_r3_w1.stdout.log), + [after_full_detail_r3_w6](after_full_detail_r3_w6.stdout.log), + [bake_full_detail_w6](bake_full_detail_w6.stdout.log) +- [aborted_expanded_lod1](aborted_expanded_lod1.stdout.log), + [aborted_before_r6_lod1_alignment](aborted_before_r6_lod1_alignment.stdout.log) + +## Base mesh-cache runs + +- [cached_full_detail_w8](cached_full_detail_w8.stdout.log), + [cached_full_detail_r3_w8](cached_full_detail_r3_w8.stdout.log) +- [cold_full_clipmap_r3_w8](cold_full_clipmap_r3_w8.stdout.log) +- [cached_full_clipmap_r3_w1](cached_full_clipmap_r3_w1.stdout.log), + [cached_full_clipmap_r3_w6](cached_full_clipmap_r3_w6.stdout.log), + [cached_full_clipmap_r3_w8](cached_full_clipmap_r3_w8.stdout.log), + [cached_full_clipmap_r3_w1_repeat](cached_full_clipmap_r3_w1_repeat.stdout.log) +- [viewer_fullclip_cache](viewer_fullclip_cache.stdout.log) + +## Round-field probes and hashes (superseded by the final fixed-height runs) + +- [round_legacy_probe16](round_legacy_probe16.stdout.log), + [round_detail_probe16](round_detail_probe16.stdout.log), + [round_wall_comparison_16](round_wall_comparison_16.stdout.log) +- [round_stream_w1](round_stream_w1.stdout.log), + [round_stream_w6](round_stream_w6.stdout.log), + [round_stream_w1_repeat](round_stream_w1_repeat.stdout.log) +- [round_final_w1](round_final_w1.stdout.log), + [round_final_w6](round_final_w6.stdout.log), + [round_final_w1_repeat](round_final_w1_repeat.stdout.log), + [round_final_comparison_16](round_final_comparison_16.stdout.log) +- [round_final_fixedz_w1](round_final_fixedz_w1.stdout.log), + [round_final_fixedz_w6](round_final_fixedz_w6.stdout.log), + [round_final_fixedz_w1_repeat](round_final_fixedz_w1_repeat.stdout.log), + [round_final_fixedz_comparison_16](round_final_fixedz_comparison_16.stdout.log) + +## Superseded wall captures + +These were captured before the owner tunnel graph was retained. The matching final capture pairs are +under `..\final\`. + +- [chamber_legacy](chamber_legacy.stdout.log), [chamber_detailed](chamber_detailed.stdout.log) +- [tunnel_legacy](tunnel_legacy.stdout.log), [tunnel_detailed](tunnel_detailed.stdout.log) +- [passage_legacy](passage_legacy.stdout.log), [passage_detailed](passage_detailed.stdout.log) +- [farclip_legacy](farclip_legacy.stdout.log), [farclip_detailed](farclip_detailed.stdout.log) +- [viewer_round_legacy](viewer_round_legacy.stdout.log), + [viewer_round_detailed](viewer_round_detailed.stdout.log), + [viewer_round_detailed_smoothed](viewer_round_detailed_smoothed.stdout.log), + [viewer_round_final](viewer_round_final.stdout.log) + +The `far_legacy` / `far_detailed` camera was outside the exported strata and showed a boundary view; +it was discarded. Logs: [far_legacy](far_legacy.stdout.log), +[far_detailed](far_detailed.stdout.log). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/aborted_before_r6_lod1_alignment.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/aborted_before_r6_lod1_alignment.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/aborted_before_r6_lod1_alignment.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/aborted_before_r6_lod1_alignment.stdout.log new file mode 100644 index 0000000..73429b1 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/aborted_before_r6_lod1_alignment.stdout.log @@ -0,0 +1,7 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=6 (112 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=6 lod0_cube=64m voxel=25cm fullres_levels=2 max_level=1 workers=8 full_detail_tiles=4429 desired_tiles=4429 variant=base +[StreamFullDetail] wall=102.750s generated=4429/4429 resident_tiles_cpu_only=1 density_hash=0x4367f87ece832392 +[StreamFullClipmap] wall=102.750s generated=4429/4429 worker_sum=820.256s tiles=4429 density_hash=0x4367f87ece832392 +[StreamCacheUse] hits=0 requested=4429 +[StreamLevel] lod=0 tiles=2744 samples=117.649M worker_sum=462.196s vertices=957655 indices=5466810 density_hash=0x9086728f6384a179 +[StreamLevel] lod=1 tiles=1685 samples=72.244M worker_sum=358.059s vertices=555009 indices=3170910 density_hash=0x68c7e0173019062e diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/aborted_expanded_lod1.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/aborted_expanded_lod1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/aborted_expanded_lod1.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/aborted_expanded_lod1.stdout.log new file mode 100644 index 0000000..a0dcaf5 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/aborted_expanded_lod1.stdout.log @@ -0,0 +1,2 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (6400 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level=1 workers=1 full_detail_tiles=35435983 desired_tiles=35435983 variant=base diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w1.stdout.log new file mode 100644 index 0000000..98f790d --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w1.stdout.log @@ -0,0 +1,7 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=1 workers=1 full_detail_tiles=960 desired_tiles=960 variant=base +[StreamFullDetail] wall=92.938s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=92.938s generated=960/960 worker_sum=92.927s tiles=960 density_hash=0xbec99c900abeecb5 +[StreamCacheUse] hits=0 requested=960 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=44.410s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=48.517s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w6.stdout.log new file mode 100644 index 0000000..e164dd2 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_r3_w6.stdout.log @@ -0,0 +1,8 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=1 workers=6 full_detail_tiles=960 desired_tiles=960 variant=base +[StreamFullDetail] wall=20.266s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=20.266s generated=960/960 worker_sum=120.177s tiles=960 density_hash=0xbec99c900abeecb5 +[StreamCacheUse] hits=0 requested=960 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=58.175s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=62.002s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[MeshCacheBake] saved 960 tiles, 24.54 MiB to E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w1.stdout.log new file mode 100644 index 0000000..7f5fa89 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w1.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level=1 workers=1 full_detail_tiles=791 desired_tiles=791 variant=base +[StreamFullDetail] wall=79.000s generated=791/791 resident_tiles_cpu_only=1 density_hash=0x4c0aa70a668a042c +[StreamFullClipmap] wall=79.001s generated=791/791 worker_sum=78.984s tiles=791 density_hash=0x4c0aa70a668a042c +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=44.431s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=279 samples=11.962M worker_sum=34.553s vertices=156610 indices=893667 density_hash=0x394a5f384360cb3d diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w6.stdout.log new file mode 100644 index 0000000..98d28b1 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/after_full_detail_w6.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level=1 workers=6 full_detail_tiles=791 desired_tiles=791 variant=base +[StreamFullDetail] wall=17.127s generated=791/791 resident_tiles_cpu_only=1 density_hash=0x4c0aa70a668a042c +[StreamFullClipmap] wall=17.127s generated=791/791 worker_sum=101.842s tiles=791 density_hash=0x4c0aa70a668a042c +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=58.292s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=279 samples=11.962M worker_sum=43.550s vertices=156610 indices=893667 density_hash=0x394a5f384360cb3d diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64.stdout.log new file mode 100644 index 0000000..4631e9d --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64.stdout.log @@ -0,0 +1,3 @@ +[BenchmarkConfig] tile_cache_window=1 fused_min_lod=3 room_graph_cache_slots=1 command='--benchmark-level=0 --benchmark-count=64 --density-hash' +[TileBenchmark] LOD=0 generated=64 samples=2.74M worker_sum=3.252s avg=50.809ms p50=51.780ms p95=63.622ms vertices=71131 indices=406239 profiling=off +[TileDensityHash] LOD=0 tiles=64 hash=0x6c2ec3dbe818deec diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64_radius6.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64_radius6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64_radius6.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64_radius6.stdout.log new file mode 100644 index 0000000..914f8ff --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/after_l0_64_radius6.stdout.log @@ -0,0 +1,3 @@ +[BenchmarkConfig] tile_cache_window=1 fused_min_lod=3 room_graph_cache_slots=1 command='--benchmark-level=0 --benchmark-count=64 --density-hash --clip-radius=6' +[TileBenchmark] LOD=0 generated=64 samples=2.74M worker_sum=3.179s avg=49.676ms p50=50.463ms p95=61.955ms vertices=68317 indices=390195 profiling=off +[TileDensityHash] LOD=0 tiles=64 hash=0x3d31a090650399d3 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/bake_full_detail_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/bake_full_detail_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/bake_full_detail_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/bake_full_detail_w6.stdout.log new file mode 100644 index 0000000..a8893b6 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/bake_full_detail_w6.stdout.log @@ -0,0 +1,8 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level=1 workers=6 full_detail_tiles=791 desired_tiles=791 variant=base +[StreamFullDetail] wall=17.023s generated=791/791 resident_tiles_cpu_only=1 density_hash=0x4c0aa70a668a042c +[StreamFullClipmap] wall=17.023s generated=791/791 worker_sum=101.276s tiles=791 density_hash=0x4c0aa70a668a042c +[StreamCacheUse] hits=0 requested=791 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=58.012s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=279 samples=11.962M worker_sum=43.264s vertices=156610 indices=893667 density_hash=0x394a5f384360cb3d +[MeshCacheBake] saved 791 tiles, 21.81 MiB to E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/before_full_detail_r6_w8.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/before_full_detail_r6_w8.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/before_full_detail_r6_w8.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/before_full_detail_r6_w8.stdout.log new file mode 100644 index 0000000..a934eb9 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/before_full_detail_r6_w8.stdout.log @@ -0,0 +1,7 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=6 (112 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=6 lod0_cube=112m voxel=25cm fullres_levels=2 max_level_filter=1 workers=8 full_detail_tiles=4753 desired_tiles=4753 variant=base +[StreamFullDetail] wall=112.243s generated=4753/4753 resident_tiles_cpu_only=1 density_hash=0x7ec2262370fa1684 +[StreamFullClipmap] wall=112.243s generated=4753/4753 worker_sum=896.106s tiles=4753 density_hash=0x7ec2262370fa1684 +[StreamCacheUse] hits=0 requested=4753 +[StreamLevel] lod=0 tiles=2744 samples=117.649M worker_sum=466.027s vertices=957655 indices=5466810 density_hash=0x9086728f6384a179 +[StreamLevel] lod=1 tiles=2009 samples=86.136M worker_sum=430.079s vertices=657423 indices=3755712 density_hash=0xaa2f11c34633d718 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/before_l0_64.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/before_l0_64.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/before_l0_64.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/before_l0_64.stdout.log new file mode 100644 index 0000000..51a7440 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/before_l0_64.stdout.log @@ -0,0 +1,7 @@ +[BenchmarkConfig] tile_cache_window=1 fused_min_lod=3 room_graph_cache_slots=1 command='--benchmark-level=0 --benchmark-count=64 --profile-attribution --density-hash' +[TileBenchmark] LOD=0 generated=64 samples=2.74M worker_sum=3.400s avg=53.123ms p50=53.975ms p95=65.668ms vertices=68317 indices=390195 profiling=Attribution +[TileDensityHash] LOD=0 tiles=64 hash=0x3d31a090650399d3 +[TileProfile] LOD=0 GetDensityAt=3396.306ms ApplyDisturbances=0.381ms PassageModifier=0.440ms PassageLandingAir=0.392ms PassageLandingFloor=0.911ms PassageLandingRoomFloor=0.062ms PassageStructuralPosts=0.425ms StructuralTail=5.714ms FusedEvaluator=38.837ms RoomGraphBuild=24.652ms RoomGraphSdf=6.418ms TunnelCoreWorld=9.514ms FusedDetail=1.215ms FusedStructural=1.905ms DensityPrologue=0.809ms DensityCore=40.115ms DensityDisturbances=1.122ms DensityStructuralPosts=6.895ms DensityBoundarySeal=0.397ms DensityDiffLayer=0.377ms DensityTail=0.398ms MesherGenerateMesh=3397.194ms MesherDensityGrid=3362.267ms MesherCellClassification=33.526ms MesherGradientNormals=1.933ms MesherVertexInterpolation=1.912ms MesherStreamBuilding=14.733ms MesherOther=3.094ms +[TileCounters] sdf_builds=33 graph_tile_builds=33 graph_core_builds=0 op_block_builds=0 +[SdfRebuildCauses] strate=1 seed=0 fingerprint=1 layout=1 manager=1 terrain_ops=1 fused_policy=1 tile_policy=0 tile_identity=0 bounds_x=10 bounds_y=25 tile_window_accepted=0 tile_window_rejected=0 +[TilePolicyKeyChanges] origin=64 step=1 cells=1 fingerprint=1 layout=1 manager=1 terrain_ops=1 fused_path=1 context=0 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1.stdout.log new file mode 100644 index 0000000..bb382a2 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.262 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=1 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.023s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.087s generated=6498/6498 worker_sum=0.069s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.005s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.004s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.001s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.001s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.001s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.001s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.056s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1_repeat.stdout.log new file mode 100644 index 0000000..53fa7fd --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w1_repeat.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.284 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=1 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.013s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.092s generated=6498/6498 worker_sum=0.074s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.005s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.003s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.001s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.002s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.001s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.001s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.061s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w6.stdout.log new file mode 100644 index 0000000..24cce88 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w6.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.262 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=6 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.013s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.045s generated=6498/6498 worker_sum=0.179s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.009s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.008s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.003s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.004s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.003s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.002s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.149s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w8.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w8.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w8.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w8.stdout.log new file mode 100644 index 0000000..250e36a --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_clipmap_r3_w8.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.274 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=8 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=0.008s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.040s generated=6498/6498 worker_sum=0.213s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=6498 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.017s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.011s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=0.005s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=0.009s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=0.001s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=0.000s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=0.171s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_r3_w8.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_r3_w8.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_r3_w8.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_r3_w8.stdout.log new file mode 100644 index 0000000..b663882 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_r3_w8.stdout.log @@ -0,0 +1,8 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 960 tiles, 24.54 MiB in 0.029 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=1 workers=8 full_detail_tiles=960 desired_tiles=960 variant=base +[StreamFullDetail] wall=0.015s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=0.016s generated=960/960 worker_sum=0.027s tiles=960 density_hash=0xbec99c900abeecb5 +[StreamCacheUse] hits=960 requested=960 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.016s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=0.011s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_w8.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_w8.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_w8.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_w8.stdout.log new file mode 100644 index 0000000..2de8618 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/cached_full_detail_w8.stdout.log @@ -0,0 +1,8 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 791 tiles, 21.81 MiB in 0.026 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level=1 workers=8 full_detail_tiles=791 desired_tiles=791 variant=base +[StreamFullDetail] wall=0.014s generated=791/791 resident_tiles_cpu_only=1 density_hash=0x4c0aa70a668a042c +[StreamFullClipmap] wall=0.015s generated=791/791 worker_sum=0.025s tiles=791 density_hash=0x4c0aa70a668a042c +[StreamCacheUse] hits=791 requested=791 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=0.016s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=279 samples=11.962M worker_sum=0.009s vertices=156610 indices=893667 density_hash=0x394a5f384360cb3d diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/chamber_detailed.png b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_detailed.png new file mode 100644 index 0000000..04a1ad5 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/chamber_detailed.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_detailed.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/chamber_detailed.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_detailed.stdout.log new file mode 100644 index 0000000..09022eb --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_detailed.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 20.631 s after spawn; resident=1131/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=79.970s avg=156.190ms p50=101.620ms p95=552.678ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=77.886s avg=173.853ms p50=81.267ms p95=573.273ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\chamber_detailed.png (20.690 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/chamber_legacy.png b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_legacy.png new file mode 100644 index 0000000..2774f7c Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/chamber_legacy.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_legacy.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/chamber_legacy.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_legacy.stdout.log new file mode 100644 index 0000000..a7d75dd --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/chamber_legacy.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 20.425 s after spawn; resident=1117/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=79.071s avg=154.436ms p50=95.464ms p95=560.570ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=77.532s avg=173.062ms p50=80.573ms p95=578.995ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\chamber_legacy.png (20.557 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cold_full_clipmap_r3_w8.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/cold_full_clipmap_r3_w8.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/cold_full_clipmap_r3_w8.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/cold_full_clipmap_r3_w8.stdout.log new file mode 100644 index 0000000..5337a19 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/cold_full_clipmap_r3_w8.stdout.log @@ -0,0 +1,13 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=3 lod0_cube=64m voxel=25cm fullres_levels=2 max_level_filter=6 workers=8 full_detail_tiles=960 desired_tiles=6498 variant=base +[StreamFullDetail] wall=18.335s generated=960/960 resident_tiles_cpu_only=1 density_hash=0xbec99c900abeecb5 +[StreamFullClipmap] wall=170.642s generated=6498/6498 worker_sum=1364.438s tiles=6498 density_hash=0xa2ecb575c312870e +[StreamCacheUse] hits=0 requested=6498 +[StreamLevel] lod=0 tiles=512 samples=21.952M worker_sum=67.854s vertices=331177 indices=1890237 density_hash=0xc000c14c1347f26c +[StreamLevel] lod=1 tiles=448 samples=19.208M worker_sum=71.258s vertices=217586 indices=1241799 density_hash=0xadc78d2261814bd0 +[StreamLevel] lod=2 tiles=320 samples=2.195M worker_sum=12.642s vertices=66899 indices=368502 density_hash=0xe4814db64803def0 +[StreamLevel] lod=3 tiles=208 samples=1.427M worker_sum=22.927s vertices=89052 indices=492072 density_hash=0xd5e8475754a9ec51 +[StreamLevel] lod=4 tiles=144 samples=0.988M worker_sum=28.876s vertices=71063 indices=390630 density_hash=0x19c63388a2723dcb +[StreamLevel] lod=5 tiles=96 samples=0.658M worker_sum=16.997s vertices=65659 indices=354342 density_hash=0x2707fc085fd5a870 +[StreamLevel] lod=6 tiles=4770 samples=32.717M worker_sum=1143.884s vertices=4090025 indices=22136832 density_hash=0x0ea8af35aca739dc +[MeshCacheBake] saved 6498 tiles, 215.64 MiB to E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/far_detailed.png b/Standalone/Research/VoxelSpeedRound/preliminary/far_detailed.png new file mode 100644 index 0000000..6d65731 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/far_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/far_detailed.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/far_detailed.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/far_detailed.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/far_detailed.stdout.log new file mode 100644 index 0000000..7cf24cd --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/far_detailed.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (400.00, 400.00, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 18.557 s after spawn; resident=1166/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=69.111s avg=134.983ms p50=84.967ms p95=551.524ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=71.346s avg=159.254ms p50=59.341ms p95=573.859ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\far_detailed.png (18.615 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/far_legacy.png b/Standalone/Research/VoxelSpeedRound/preliminary/far_legacy.png new file mode 100644 index 0000000..d5cef5d Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/far_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/far_legacy.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/far_legacy.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/far_legacy.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/far_legacy.stdout.log new file mode 100644 index 0000000..1f5da43 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/far_legacy.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (400.00, 400.00, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 18.379 s after spawn; resident=1169/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=67.455s avg=131.747ms p50=78.286ms p95=556.975ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=70.861s avg=158.171ms p50=57.564ms p95=574.379ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\far_legacy.png (18.437 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/farclip_detailed.png b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_detailed.png new file mode 100644 index 0000000..ce28a69 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/farclip_detailed.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_detailed.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/farclip_detailed.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_detailed.stdout.log new file mode 100644 index 0000000..87d7907 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_detailed.stdout.log @@ -0,0 +1,15 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 20.814 s after spawn; resident=1121/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=81.020s avg=158.243ms p50=102.049ms p95=559.126ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=78.541s avg=175.314ms p50=82.868ms p95=577.629ms +[ChunkCrossingWork] id=0 submitted=6498 finished=6498 generated=6498 cancelled_queued=0 stale=0 samples=79.15M worker_sum=1424.013s wall=178.080s avg=219.146ms +[InitialClipmapReady] 178.080 s after spawn; 6498 tiles, 5215603 vertices, 28486884 indices, 189 GPU batches. +[TileTiming] LOD=2 generated=320 target=320 samples=2.19M worker_sum=13.589s avg=42.467ms p50=23.912ms p95=94.748ms +[TileTiming] LOD=3 generated=208 target=208 samples=1.43M worker_sum=23.396s avg=112.479ms p50=105.928ms p95=144.761ms +[TileTiming] LOD=4 generated=144 target=144 samples=0.99M worker_sum=29.164s avg=202.530ms p50=166.086ms p95=332.728ms +[TileTiming] LOD=5 generated=96 target=96 samples=0.66M worker_sum=17.504s avg=182.329ms p50=171.753ms p95=240.663ms +[TileTiming] LOD=6 generated=4770 target=4770 samples=32.72M worker_sum=1180.799s avg=247.547ms p50=250.700ms p95=287.130ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\farclip_detailed.png (178.251 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/farclip_legacy.png b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_legacy.png new file mode 100644 index 0000000..f00d517 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/farclip_legacy.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_legacy.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/farclip_legacy.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_legacy.stdout.log new file mode 100644 index 0000000..88008d6 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/farclip_legacy.stdout.log @@ -0,0 +1,15 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 20.335 s after spawn; resident=1111/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=78.641s avg=153.596ms p50=96.410ms p95=555.279ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=77.609s avg=173.234ms p50=81.825ms p95=578.245ms +[ChunkCrossingWork] id=0 submitted=6498 finished=6498 generated=6498 cancelled_queued=0 stale=0 samples=79.15M worker_sum=1410.955s wall=176.430s avg=217.137ms +[InitialClipmapReady] 176.430 s after spawn; 6498 tiles, 5224198 vertices, 28535646 indices, 189 GPU batches. +[TileTiming] LOD=2 generated=320 target=320 samples=2.19M worker_sum=13.538s avg=42.305ms p50=23.749ms p95=96.146ms +[TileTiming] LOD=3 generated=208 target=208 samples=1.43M worker_sum=23.048s avg=110.807ms p50=104.536ms p95=143.794ms +[TileTiming] LOD=4 generated=144 target=144 samples=0.99M worker_sum=28.831s avg=200.216ms p50=163.020ms p95=323.469ms +[TileTiming] LOD=5 generated=96 target=96 samples=0.66M worker_sum=17.198s avg=179.143ms p50=163.343ms p95=233.252ms +[TileTiming] LOD=6 generated=4770 target=4770 samples=32.72M worker_sum=1172.090s avg=245.721ms p50=248.717ms p95=286.357ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\farclip_legacy.png (176.602 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/passage_detailed.png b/Standalone/Research/VoxelSpeedRound/preliminary/passage_detailed.png new file mode 100644 index 0000000..af40980 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/passage_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/passage_detailed.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/passage_detailed.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/passage_detailed.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/passage_detailed.stdout.log new file mode 100644 index 0000000..de799ca --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/passage_detailed.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-39.19, 6.27, -28.51) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 19.338 s after spawn; resident=1118/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=58.506s avg=114.269ms p50=111.121ms p95=188.089ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=89.648s avg=200.107ms p50=111.919ms p95=588.371ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\passage_detailed.png (19.397 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/passage_legacy.png b/Standalone/Research/VoxelSpeedRound/preliminary/passage_legacy.png new file mode 100644 index 0000000..d3583ce Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/passage_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/passage_legacy.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/passage_legacy.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/passage_legacy.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/passage_legacy.stdout.log new file mode 100644 index 0000000..0ee9c57 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/passage_legacy.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-39.19, 6.27, -28.51) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 19.082 s after spawn; resident=1129/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=56.848s avg=111.031ms p50=106.629ms p95=178.391ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=88.851s avg=198.328ms p50=110.817ms p95=591.115ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\passage_legacy.png (19.141 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_detail_probe16.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_detail_probe16.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_detail_probe16.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_detail_probe16.stdout.log new file mode 100644 index 0000000..07c05c9 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_detail_probe16.stdout.log @@ -0,0 +1,3 @@ +[BenchmarkConfig] tile_cache_window=1 fused_min_lod=3 room_graph_cache_slots=1 command='--benchmark-level=0 --benchmark-count=16 --density-hash --round-tunnels --camera=-11.75,-123.25,-19.85,90,0' +[TileBenchmark] LOD=0 generated=16 samples=0.69M worker_sum=1.380s avg=86.246ms p50=80.643ms p95=97.313ms vertices=13698 indices=78207 profiling=off +[TileDensityHash] LOD=0 tiles=16 hash=0x2cf5287b33cbead6 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_comparison_16.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_comparison_16.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_comparison_16.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_comparison_16.stdout.log new file mode 100644 index 0000000..1d0bf8a --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_comparison_16.stdout.log @@ -0,0 +1 @@ +[RoundTunnelCompare] tiles=16 lattice_samples=686000 changed_signs=9596 changed_share=1.398834% legacy_density_hash=0xe32143e796767a4f detailed_density_hash=0xd32a2c1ffef67113 old_vertices=19551 new_vertices=18694 symmetric_vertex_mean_m=0.1800 symmetric_vertex_max_m=2.0726 unmatched_vertices=0 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_comparison_16.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_comparison_16.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_comparison_16.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_comparison_16.stdout.log new file mode 100644 index 0000000..eeddeb4 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_comparison_16.stdout.log @@ -0,0 +1 @@ +[RoundTunnelCompare] tiles=16 lattice_samples=686000 changed_signs=10519 changed_share=1.533382% legacy_density_hash=0x33ac6545f7898fac detailed_density_hash=0x460fa5836cd803b5 old_vertices=19588 new_vertices=18665 symmetric_vertex_mean_m=0.1944 symmetric_vertex_max_m=2.0456 unmatched_vertices=0 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1.stdout.log new file mode 100644 index 0000000..17cbef6 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=4.850s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x3a8c178ad5a531bb +[StreamFullClipmap] wall=4.850s generated=64/64 worker_sum=4.841s tiles=64 density_hash=0x3a8c178ad5a531bb +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=4.841s vertices=84351 indices=480168 density_hash=0x3a8c178ad5a531bb diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1_repeat.stdout.log new file mode 100644 index 0000000..5d90957 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w1_repeat.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=4.791s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x3a8c178ad5a531bb +[StreamFullClipmap] wall=4.791s generated=64/64 worker_sum=4.776s tiles=64 density_hash=0x3a8c178ad5a531bb +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=4.776s vertices=84351 indices=480168 density_hash=0x3a8c178ad5a531bb diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w6.stdout.log new file mode 100644 index 0000000..59524ca --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_fixedz_w6.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=6 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=1.146s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x3a8c178ad5a531bb +[StreamFullClipmap] wall=1.146s generated=64/64 worker_sum=6.642s tiles=64 density_hash=0x3a8c178ad5a531bb +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=6.642s vertices=84351 indices=480168 density_hash=0x3a8c178ad5a531bb diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1.stdout.log new file mode 100644 index 0000000..6886adf --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=4.771s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x993d63eeeeb98189 +[StreamFullClipmap] wall=4.771s generated=64/64 worker_sum=4.764s tiles=64 density_hash=0x993d63eeeeb98189 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=4.764s vertices=84221 indices=479364 density_hash=0x993d63eeeeb98189 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1_repeat.stdout.log new file mode 100644 index 0000000..1b6971a --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w1_repeat.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=4.838s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x993d63eeeeb98189 +[StreamFullClipmap] wall=4.839s generated=64/64 worker_sum=4.821s tiles=64 density_hash=0x993d63eeeeb98189 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=4.821s vertices=84221 indices=479364 density_hash=0x993d63eeeeb98189 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w6.stdout.log new file mode 100644 index 0000000..7b46fe8 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_final_w6.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=6 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=1.123s generated=64/64 resident_tiles_cpu_only=1 density_hash=0x993d63eeeeb98189 +[StreamFullClipmap] wall=1.123s generated=64/64 worker_sum=6.540s tiles=64 density_hash=0x993d63eeeeb98189 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=6.540s vertices=84221 indices=479364 density_hash=0x993d63eeeeb98189 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_legacy_probe16.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_legacy_probe16.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_legacy_probe16.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_legacy_probe16.stdout.log new file mode 100644 index 0000000..c530f2b --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_legacy_probe16.stdout.log @@ -0,0 +1,3 @@ +[BenchmarkConfig] tile_cache_window=1 fused_min_lod=3 room_graph_cache_slots=1 command='--benchmark-level=0 --benchmark-count=16 --density-hash --round-tunnels-legacy --camera=-11.75,-123.25,-19.85,90,0' +[TileBenchmark] LOD=0 generated=16 samples=0.69M worker_sum=1.302s avg=81.396ms p50=77.577ms p95=93.387ms vertices=13710 indices=78297 profiling=off +[TileDensityHash] LOD=0 tiles=16 hash=0x785522f31e7e083f diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1.stdout.log new file mode 100644 index 0000000..75724ab --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=4.248s generated=64/64 resident_tiles_cpu_only=1 density_hash=0xc590601028a86b23 +[StreamFullClipmap] wall=4.248s generated=64/64 worker_sum=4.241s tiles=64 density_hash=0xc590601028a86b23 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=4.241s vertices=85989 indices=489708 density_hash=0xc590601028a86b23 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1_repeat.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1_repeat.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1_repeat.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1_repeat.stdout.log new file mode 100644 index 0000000..a68f681 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w1_repeat.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=1 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=4.258s generated=64/64 resident_tiles_cpu_only=1 density_hash=0xc590601028a86b23 +[StreamFullClipmap] wall=4.258s generated=64/64 worker_sum=4.244s tiles=64 density_hash=0xc590601028a86b23 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=4.244s vertices=85989 indices=489708 density_hash=0xc590601028a86b23 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w6.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w6.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w6.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w6.stdout.log new file mode 100644 index 0000000..21aa138 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_stream_w6.stdout.log @@ -0,0 +1,6 @@ +Standalone clip override: exported radius=6 (112 m cube) -> radius=1 (32 m LOD0 cube), voxel size=25 cm. +[StreamBenchmarkConfig] clip_radius=1 lod0_cube=32m voxel=25cm fullres_levels=2 max_level_filter=0 workers=6 full_detail_tiles=64 desired_tiles=64 variant=round-detailed +[StreamFullDetail] wall=1.027s generated=64/64 resident_tiles_cpu_only=1 density_hash=0xc590601028a86b23 +[StreamFullClipmap] wall=1.027s generated=64/64 worker_sum=5.971s tiles=64 density_hash=0xc590601028a86b23 +[StreamCacheUse] hits=0 requested=64 +[StreamLevel] lod=0 tiles=64 samples=2.744M worker_sum=5.971s vertices=85989 indices=489708 density_hash=0xc590601028a86b23 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_wall_comparison_16.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_wall_comparison_16.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/round_wall_comparison_16.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/round_wall_comparison_16.stdout.log new file mode 100644 index 0000000..0620af5 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/round_wall_comparison_16.stdout.log @@ -0,0 +1 @@ +[RoundTunnelCompare] tiles=16 lattice_samples=686000 changed_signs=958 changed_share=0.139650% legacy_density_hash=0x785522f31e7e083f detailed_density_hash=0x43a552f86f70025a old_vertices=13710 new_vertices=13710 symmetric_vertex_mean_m=0.0234 symmetric_vertex_max_m=0.5777 unmatched_vertices=0 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_detailed.png b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_detailed.png new file mode 100644 index 0000000..ce28a69 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_detailed.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_detailed.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_detailed.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_detailed.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_detailed.stdout.log new file mode 100644 index 0000000..000689b --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_detailed.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 20.654 s after spawn; resident=1121/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=80.261s avg=156.759ms p50=100.962ms p95=554.628ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=77.972s avg=174.044ms p50=82.225ms p95=572.857ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\tunnel_detailed.png (20.746 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_legacy.png b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_legacy.png new file mode 100644 index 0000000..f00d517 Binary files /dev/null and b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_legacy.png differ diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_legacy.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_legacy.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_legacy.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_legacy.stdout.log new file mode 100644 index 0000000..569a767 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/tunnel_legacy.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 20.410 s after spawn; resident=1119/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=78.659s avg=153.631ms p50=96.637ms p95=555.471ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=77.800s avg=173.660ms p50=82.250ms p95=573.143ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\Research\VoxelSpeedRound\tunnel_legacy.png (20.469 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_fullclip_cache.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_fullclip_cache.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_fullclip_cache.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_fullclip_cache.stdout.log new file mode 100644 index 0000000..3d9c2b5 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_fullclip_cache.stdout.log @@ -0,0 +1,23 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.61, -118.22, -19.85) m. +Density parity: 3436/3436 bit-identical; mismatches=0 + inter_strate_passage 10 + passage_landing 4 + room_interior 12 + strate_boundary 2420 + tunnel_interior 222 + varied_world 768 +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +[MeshCache] loaded 6498 tiles, 215.64 MiB in 0.262 s from E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\VoxelForge_seed0_r3_base.vfmesh +Streaming seed 0: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[ChunkCrossingWork] id=0 submitted=6498 finished=6498 generated=6498 cancelled_queued=0 stale=0 samples=79.15M worker_sum=0.267s wall=0.043s avg=0.041ms +[FullDetailReady] 0.058 s after spawn; resident=6498/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=0.017s avg=0.033ms p50=0.000ms p95=0.143ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=0.010s avg=0.022ms p50=0.000ms p95=0.113ms +[TileTiming] LOD=2 generated=320 target=320 samples=2.19M worker_sum=0.006s avg=0.018ms p50=0.001ms p95=0.102ms +[TileTiming] LOD=3 generated=208 target=208 samples=1.43M worker_sum=0.006s avg=0.027ms p50=0.009ms p95=0.106ms +[TileTiming] LOD=4 generated=144 target=144 samples=0.99M worker_sum=0.003s avg=0.018ms p50=0.008ms p95=0.062ms +[TileTiming] LOD=5 generated=96 target=96 samples=0.66M worker_sum=0.002s avg=0.022ms p50=0.009ms p95=0.079ms +[TileTiming] LOD=6 generated=4770 target=4770 samples=32.72M worker_sum=0.224s avg=0.047ms p50=0.028ms p95=0.165ms +[InitialClipmapReady] 0.176 s after spawn; 6498 tiles, 4931461 vertices, 26874414 indices, 186 GPU batches. +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Saved\Research\VoxelSpeedRound\clipmap_after_r3.png (0.232 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed.stdout.log new file mode 100644 index 0000000..9a97466 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 19.891 s after spawn; resident=1108/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=76.414s avg=149.246ms p50=92.075ms p95=552.848ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=76.636s avg=171.062ms p50=79.165ms p95=574.759ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Saved\Research\VoxelSpeedRound\round_tunnel_detailed_fixed.png (19.953 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed_smoothed.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed_smoothed.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed_smoothed.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed_smoothed.stdout.log new file mode 100644 index 0000000..0f6c0be --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_detailed_smoothed.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 19.946 s after spawn; resident=1112/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=76.782s avg=149.966ms p50=92.463ms p95=554.231ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=76.301s avg=170.314ms p50=78.266ms p95=568.704ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Saved\Research\VoxelSpeedRound\round_tunnel_detailed_smoothed.png (20.004 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_final.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_final.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_final.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_final.stdout.log new file mode 100644 index 0000000..943fc9a --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_final.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with detailed round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 20.459 s after spawn; resident=1134/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=79.782s avg=155.824ms p50=101.122ms p95=550.949ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=76.806s avg=171.441ms p50=80.464ms p95=566.909ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Saved\Research\VoxelSpeedRound\round_tunnel_detailed_final.png (20.518 s after generation start; full detail uploaded). diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_legacy.stderr.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_legacy.stderr.log new file mode 100644 index 0000000..e69de29 diff --git a/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_legacy.stdout.log b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_legacy.stdout.log new file mode 100644 index 0000000..2e5c876 --- /dev/null +++ b/Standalone/Research/VoxelSpeedRound/preliminary/viewer_round_legacy.stdout.log @@ -0,0 +1,8 @@ +Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit. +Owner data: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Standalone\data\owner_world.json; starting at first-strate open-space sample (-11.75, -123.25, -19.85) m. +Standalone clip override: exported radius=6 (112 m cube) -> radius=3 (64 m LOD0 cube), voxel size=25 cm. +Streaming seed 0 with legacy round/winding tunnels: 6498 desired tiles, 960 full-detail tiles, 8 workers; upload budget 4 batches / 2.0 ms per frame. +[FullDetailReady] 19.506 s after spawn; resident=1108/960 tiles through LOD1. +[TileTiming] LOD=0 generated=512 target=512 samples=21.95M worker_sum=74.622s avg=145.745ms p50=89.223ms p95=546.036ms +[TileTiming] LOD=1 generated=448 target=448 samples=19.21M worker_sum=75.273s avg=168.019ms p50=78.001ms p95=566.783ms +Back-buffer capture saved: E:\Projet Unreal\VoxelM\Plugins\VoxelForge\Saved\Research\VoxelSpeedRound\round_tunnel_legacy_fixed.png (19.569 s after generation start; full detail uploaded). diff --git a/Standalone/Source/StandaloneResearchTunnels.h b/Standalone/Source/StandaloneResearchTunnels.h index ae5cbc3..ea44da6 100644 --- a/Standalone/Source/StandaloneResearchTunnels.h +++ b/Standalone/Source/StandaloneResearchTunnels.h @@ -8,7 +8,8 @@ namespace FStandaloneResearchTunnels { inline std::atomic Enabled{false}; - inline std::atomic CenterZVoxels{0.0f}; + inline std::atomic EnhancedWalls{true}; + inline constexpr float WorldCenterZVoxels=-80.0f; inline uint32 Mix(uint32 X) { @@ -33,16 +34,63 @@ namespace FStandaloneResearchTunnels return static_cast(Mix(X) >> 8) * (1.0f / 16777216.0f); } - inline void Set(bool bEnabled, float CenterZ) + inline void Set(bool bEnabled, bool bEnhancedWalls = true) { - CenterZVoxels.store(CenterZ,std::memory_order_relaxed); + EnhancedWalls.store(bEnhancedWalls,std::memory_order_relaxed); Enabled.store(bEnabled,std::memory_order_release); } + inline uint32 NoiseHash(int32 X,int32 Y,int32 Z,uint32 Seed) + { + uint32 H=Mix(Seed^0xB5297A4Du); + H=Mix(H^static_cast(X)*0x68E31DA4u); + H=Mix(H^static_cast(Y)*0x1B56C4E9u); + return Mix(H^static_cast(Z)*0x9E3779B9u); + } + + inline float NoiseValue(int32 X,int32 Y,int32 Z,uint32 Seed) + { + return static_cast(NoiseHash(X,Y,Z,Seed)>>8)*(2.0f/16777215.0f)-1.0f; + } + + inline float Fade(float T) + { + return T*T*(3.0f-2.0f*T); + } + + inline float ValueNoise(float X,float Y,float Z,int32 Wavelength,uint32 Seed) + { + const float Inv=1.0f/static_cast(Wavelength); + const float FX=X*Inv,FY=Y*Inv,FZ=Z*Inv; + const int32 X0=FMath::FloorToInt(FX),Y0=FMath::FloorToInt(FY),Z0=FMath::FloorToInt(FZ); + const float TX=Fade(FX-static_cast(X0)); + const float TY=Fade(FY-static_cast(Y0)); + const float TZ=Fade(FZ-static_cast(Z0)); + const float Z00=FMath::Lerp(NoiseValue(X0,Y0,Z0,Seed),NoiseValue(X0+1,Y0,Z0,Seed),TX); + const float Z10=FMath::Lerp(NoiseValue(X0,Y0+1,Z0,Seed),NoiseValue(X0+1,Y0+1,Z0,Seed),TX); + const float Z01=FMath::Lerp(NoiseValue(X0,Y0,Z0+1,Seed),NoiseValue(X0+1,Y0,Z0+1,Seed),TX); + const float Z11=FMath::Lerp(NoiseValue(X0,Y0+1,Z0+1,Seed),NoiseValue(X0+1,Y0+1,Z0+1,Seed),TX); + return FMath::Lerp(FMath::Lerp(Z00,Z10,TY),FMath::Lerp(Z01,Z11,TY),TZ); + } + + inline float WallRelief(float X,float Y,float Z,uint32 Seed) + { + return 0.70f*ValueNoise(X,Y,Z,8,Seed^0xA511E9B3u) + +1.05f*ValueNoise(X,Y,Z,16,Seed^0x63D83595u) + +1.45f*ValueNoise(X,Y,Z,32,Seed^0xB5297A4Du); + } + + inline float SmoothMax(float A,float B,float Width) + { + const float H=FMath::Max(Width-FMath::Abs(A-B),0.0f)/Width; + return FMath::Max(A,B)+(H*H)*(Width*0.25f); + } + inline float Apply(float BaseDensity, float X, float Y, float Z, uint32 Seed) { if (!Enabled.load(std::memory_order_acquire)) return BaseDensity; - const float CenterZ = CenterZVoxels.load(std::memory_order_relaxed); + constexpr float CenterZ = WorldCenterZVoxels; + const bool bEnhancedWalls=EnhancedWalls.load(std::memory_order_relaxed); if (FMath::Abs(Z-CenterZ) > 36.0f) return BaseDensity; constexpr float Pitch = 144.0f; @@ -106,15 +154,17 @@ namespace FStandaloneResearchTunnels const float Distance=FMath::Sqrt(DX*DX+DY*DY); const float Phase=Unit(H^0xA511E9B3u)*6.2831853071795864769f; const float Radius=RadiusBase*(0.82f+0.36f*Unit(H^0x63D83595u)) - *(1.0f+0.22f*FMath::Sin(6.2831853071795864769f*T+Phase)); - const float VerticalWave=4.0f*FMath::Sin(3.14159265358979323846f*T) - *FMath::Sin(6.2831853071795864769f*T+Phase); + *(1.0f+0.22f*VoxelMath::DetSin(6.2831853071795864769f*T+Phase)); + const float VerticalWave=4.0f*VoxelMath::DetSin(3.14159265358979323846f*T) + *VoxelMath::DetSin(6.2831853071795864769f*T+Phase); const float VerticalOffset=Z-(CenterZ+VerticalWave); const float HorizontalDistance=FMath::Max(0.0f,Distance); const float Normalized=FMath::Sqrt( FMath::Square(HorizontalDistance/FMath::Max(Radius,1.0f)) +FMath::Square(VerticalOffset/FMath::Max(HalfHeight,1.0f))); - Best=FMath::Max(Best,(1.0f-Normalized)*FMath::Min(Radius,HalfHeight)); + const float EdgeDensity=(1.0f-Normalized)*FMath::Min(Radius,HalfHeight); + Best=bEnhancedWalls&&Best>-FLT_MAX + ?SmoothMax(Best,EdgeDensity,4.0f):FMath::Max(Best,EdgeDensity); }; for (int32 CY=BaseCellY-1;CY<=BaseCellY+1;++CY) @@ -123,6 +173,11 @@ namespace FStandaloneResearchTunnels EvaluateEdge(CX,CY,0); EvaluateEdge(CX,CY,1); } - return bHasEdge ? FMath::Max(BaseDensity,Best) : BaseDensity; + if(!bHasEdge)return BaseDensity; + if(bEnhancedWalls)Best+=WallRelief(X,Y,Z,Seed); + // The wider base/round-field blend removes tiny marching-cubes wedges where a round + // branch meets an existing room or passage wall. Relief remains active on the tunnel + // wall; this only rounds the structural union boundary. + return bEnhancedWalls?SmoothMax(BaseDensity,Best,8.0f):FMath::Max(BaseDensity,Best); } } diff --git a/Standalone/Source/StandaloneViewer.cpp b/Standalone/Source/StandaloneViewer.cpp index 046aa5d..9094511 100644 --- a/Standalone/Source/StandaloneViewer.cpp +++ b/Standalone/Source/StandaloneViewer.cpp @@ -27,6 +27,7 @@ #include #include #include +#include #include #include #include @@ -120,12 +121,49 @@ namespace bool bReported=false; }; + uint64 HashStandaloneFile(const std::string& Path) + { + std::ifstream File(Path,std::ios::binary); + if(!File)return 0; + uint64 Hash=14695981039346656037ull; + char Buffer[65536]; + while(File) + { + File.read(Buffer,sizeof(Buffer)); + const std::streamsize Count=File.gcount(); + for(std::streamsize I=0;I(Buffer[I]); + Hash*=1099511628211ull; + } + } + return Hash; + } + FStandaloneBatchKey BatchForTile(const FVoxelTileKey& Tile) { return {Tile.Level,VoxelClipmapDesiredTiles::FloorDiv(Tile.Coord.X,8), VoxelClipmapDesiredTiles::FloorDiv(Tile.Coord.Y,8),Tile.Coord.Z}; } + bool PrepareStandaloneDensityWorld(FStandaloneOwnerWorld& World,int32 Seed, + bool bRoundTunnels,bool bEnhancedWalls,std::string& Error) + { + World.Generator.reset();World.Manager.reset(); + World.Settings->Seed=Seed;World.Seed=Seed; + // Keep the owner's walkable rooms, tunnels, and strate passages intact. The research + // round field composes as additional air after the owner field, so it can widen/connect + // spaces but cannot remove the authored entrance-to-exit route. + FStandaloneResearchTunnels::Set(bRoundTunnels,bEnhancedWalls); + World.Manager=std::make_unique(); + if(!World.Manager->Initialize(World.Settings.get(),Seed)) + {Error="standalone copied strate manager failed while applying viewer settings";return false;} + World.Generator=std::make_unique(); + World.Generator->InitializeSettings(World.Settings.get()); + World.Generator->SetStrateManager(World.Manager.get()); + return true; + } + struct FApp { HWND Window=nullptr; @@ -142,6 +180,7 @@ namespace ID3D11RasterizerState* WireRasterizer=nullptr; std::unique_ptr World; std::unique_ptr Streamer; + FStandaloneMeshCache MeshCache; std::string DataPath; bool bHasCameraOverride=false; V3 CameraPositionOverride{}; @@ -163,6 +202,7 @@ namespace bool bRebuildPending=false; bool bParityChecked=false; bool bRoundTunnels=false; + bool bRoundTunnelEnhanced=true; bool bWireframe=false; bool bCaptured=false; bool bAutoCaptureWritten=false; @@ -179,12 +219,16 @@ namespace std::chrono::steady_clock::time_point CrossingMoveStopTime{}; bool bCaptureAfterClipmap=false; bool bQuitAfterClipmap=false; + bool bPrintedClipOverride=false; + bool bForceGenerate=false; std::string CapturePath; + std::string MeshCachePath; std::chrono::steady_clock::time_point GenerationStart{}; bool bShowLevel[MaxLevels+1]={true,true,true,true,true,true,true,true,true}; bool Keys[256]{}; int32 Seed=0; - int32 WorkerCount=6; + int32 WorkerCount=8; + int32 ClipRadius=3; int32 Width=1280,Height=800; float Yaw=0.0f,Pitch=0.0f,MoveSpeed=8.0f; V3 Position{}; @@ -423,32 +467,64 @@ float3 Lit=Rock*(Ambient+0.88*Diffuse)+float3(0.50,0.69,0.82)*Head*0.75; World=std::make_unique(); if(!StandaloneOwnerLoader::Load(DataPath,*World,Error))return false; if(!bParityChecked&&Seed==World->Seed&&!bRoundTunnels)PrintParity(); - World->Generator.reset();World->Manager.reset(); - World->Settings->Seed=Seed;World->Seed=Seed; - if(bRoundTunnels) + const int32 ExportClipRadius=World->ClipRadius; + World->ClipRadius=ClipRadius; + World->Settings->ClipRadius=ClipRadius; + if(!bPrintedClipOverride) { - // The research tunnel graph replaces the owner's first-strate corridor graph. - for(auto& Pair:World->Settings->FixedStrates) - { - UVoxelStrateDefinition* Definition=Pair.Value.Get(); - if(Pair.Key==0&&Definition&&Definition->GeneratorType==ECaveGeneratorType::TunnelNetwork) - { - Definition->GenerationParams.TunnelDensity=0.0f; - Definition->GenerationParams.TunnelWarpStrength=0.0f; - } - } - FStandaloneResearchTunnels::Set(true,Position.Z*4.0f); + bPrintedClipOverride=true; + const double FullDetailWidth=static_cast(2*ClipRadius+2) + *CHUNK_SIZE*VOXEL_SIZE/100.0; + std::printf("Standalone clip override: exported radius=%d (112 m cube) -> radius=%d (%.0f m LOD0 cube), voxel size=25 cm.\n", + ExportClipRadius,ClipRadius,FullDetailWidth); } - else FStandaloneResearchTunnels::Set(false,0.0f); - World->Manager=std::make_unique(); - if(!World->Manager->Initialize(World->Settings.get(),Seed)) - {Error="standalone copied strate manager failed while applying viewer seed";return false;} - World->Generator=std::make_unique(); - World->Generator->InitializeSettings(World->Settings.get()); - World->Generator->SetStrateManager(World->Manager.get()); + if(!PrepareStandaloneDensityWorld(*World,Seed,bRoundTunnels, + bRoundTunnelEnhanced,Error))return false; + LoadMeshCache(); return true; } + FStandaloneMeshCacheMetadata MakeMeshCacheMetadata()const + { + FStandaloneMeshCacheMetadata Metadata; + Metadata.SourceDataHash=HashStandaloneFile(DataPath); + Metadata.Seed=Seed;Metadata.ClipRadius=ClipRadius; + Metadata.FullResClipLevels=World->FullResClipLevels; + Metadata.CoarseTileCells=World->CoarseTileCells; + Metadata.StrateContentCutMinLevel=World->StrateContentCutMinLevel; + Metadata.SkirtCells=World->SkirtCells; + Metadata.LODOctaveDrop=World->LODOctaveDrop; + Metadata.bGenerateSkirts=World->bGenerateSkirts?1:0; + Metadata.AlgorithmVersion=FStandaloneMeshCache::CurrentVersion; + Metadata.TunnelMode=bRoundTunnels?(bRoundTunnelEnhanced?2u:1u):0u; + return Metadata; + } + + void LoadMeshCache() + { + MeshCache.Clear(); + if(bForceGenerate||!World)return; + const char* ModeSuffix=!bRoundTunnels?"_base": + (bRoundTunnelEnhanced?"_round_detailed":"_round_legacy"); + const std::filesystem::path CachePath=std::filesystem::path(DataPath).parent_path() + /(std::string("VoxelForge_seed")+std::to_string(Seed)+"_r" + +std::to_string(ClipRadius)+ModeSuffix+".vfmesh"); + MeshCachePath=CachePath.string(); + const auto Begin=std::chrono::steady_clock::now(); + std::string CacheError; + if(MeshCache.Load(MeshCachePath,MakeMeshCacheMetadata(),CacheError)) + { + const double Seconds=std::chrono::duration( + std::chrono::steady_clock::now()-Begin).count(); + std::printf("[MeshCache] loaded %zu tiles, %.2f MiB in %.3f s from %s\n", + MeshCache.Num(),static_cast(MeshCache.GetBytesLoaded())/1048576.0, + Seconds,MeshCachePath.c_str()); + std::fflush(stdout); + } + else if(CacheError!="cache file is missing or unreadable") + std::printf("[MeshCache] ignored %s: %s\n",MeshCachePath.c_str(),CacheError.c_str()); + } + void StartGeneration() { StopGeneration(); @@ -471,14 +547,17 @@ float3 Lit=Rock*(Ambient+0.88*Diffuse)+float3(0.50,0.69,0.82)*Head*0.75; DesiredTiles=Desired.Tiles; for(int32 I=0;I<=MaxLevels;++I)DesiredByLevel[I]=0; for(const FVoxelTileKey& Tile:DesiredTiles)++DesiredByLevel[Tile.Level]; - Streamer=std::make_unique(*World,WorkerCount); + Streamer=std::make_unique(*World,WorkerCount,false, + MeshCache.IsLoaded()?&MeshCache:nullptr); const FStandaloneStreamingUpdate Update=Streamer->Start(CameraVoxels,{},CrossingIndex); FCrossingWork& InitialWork=CrossingWork[CrossingIndex]; InitialWork.SubmittedJobs=Update.NewJobs;InitialWork.PendingJobs=Update.NewJobs; InitialWork.StartTime=GenerationStart; bGenerationRunning=true;bRebuildPending=false; + const char* TunnelMode=!bRoundTunnels?"":(bRoundTunnelEnhanced + ?" with detailed round/winding tunnels":" with legacy round/winding tunnels"); std::printf("Streaming seed %d%s: %d desired tiles, %d full-detail tiles, %d workers; upload budget %d batches / %.1f ms per frame.\n", - Seed,bRoundTunnels?" with research round/winding tunnels":"",Update.DesiredTiles, + Seed,TunnelMode,Update.DesiredTiles, Update.FullResTiles,Streamer->GetWorkerCount(),MaxBatchUploadsPerFrame,BatchUploadBudgetMilliseconds); std::fflush(stdout); } @@ -795,6 +874,7 @@ float3 Lit=Rock*(Ambient+0.88*Diffuse)+float3(0.50,0.69,0.82)*Head*0.75; { uint64 VisibleIndices=0;for(const auto& Pair:StreamingBatches)if(bShowLevel[Pair.first.Level])VisibleIndices+=Pair.second.IndexCount; std::ostringstream S;S<<"VoxelForge standalone | seed "<bCaptured)GApp->Capture(false);else DestroyWindow(H);} if(!bWasDown&&W=='F')GApp->bWireframe=!GApp->bWireframe; if(!bWasDown&&W=='T'){GApp->bRoundTunnels=!GApp->bRoundTunnels;GApp->bRebuildPending=true;} + if(!bWasDown&&W=='G'&&GApp->bRoundTunnels) + { + GApp->bRoundTunnelEnhanced=!GApp->bRoundTunnelEnhanced; + GApp->bRebuildPending=true; + std::printf("Round-tunnel comparison: %s wall field.\n", + GApp->bRoundTunnelEnhanced?"detailed/smoothed":"legacy smooth tube"); + } if(!bWasDown&&(W=='N'||W=='P'))GApp->RequestSeed(W=='N'?1:-1); if(!bWasDown&&W>='1'&&W<='8'){const int32 I=static_cast(W-'1');GApp->bShowLevel[I]=!GApp->bShowLevel[I];} if(!bWasDown&&W=='9')GApp->bShowLevel[8]=!GApp->bShowLevel[8]; @@ -1063,6 +1150,293 @@ float3 Lit=Rock*(Ambient+0.88*Diffuse)+float3(0.50,0.69,0.82)*Head*0.75; std::fflush(stdout); return 0; } + + struct FComparePoint + { + double X=0.0,Y=0.0,Z=0.0; + }; + + struct FCompareBucketHash + { + size_t operator()(const FIntVector& K)const noexcept + { + uint64 H=static_cast(K.X)*0x9E3779B185EBCA87ull; + H^=static_cast(static_cast(K.Y))*0xC2B2AE3D27D4EB4Full; + H^=static_cast(static_cast(K.Z))*0x165667B19E3779F9ull; + return static_cast(H^(H>>32)); + } + }; + + struct FDirectedSurfaceDistance + { + double Sum=0.0,Maximum=0.0; + uint64 Count=0,Unmatched=0; + }; + + FDirectedSurfaceDistance DirectedSurfaceDistance( + const std::vector& From,const std::vector& To) + { + FDirectedSurfaceDistance Result; + if(From.empty()||To.empty()){Result.Unmatched=From.size();return Result;} + constexpr double BucketWidth=1.0; + std::unordered_map,FCompareBucketHash> Buckets; + Buckets.reserve(To.size()); + const auto BucketOf=[=](const FComparePoint& P) + { + return FIntVector(static_cast(std::floor(P.X/BucketWidth)), + static_cast(std::floor(P.Y/BucketWidth)), + static_cast(std::floor(P.Z/BucketWidth))); + }; + for(const FComparePoint& P:To)Buckets[BucketOf(P)].push_back(&P); + for(const FComparePoint& P:From) + { + const FIntVector Center=BucketOf(P); + double BestSquared=std::numeric_limits::infinity(); + for(int32 Z=-3;Z<=3;++Z)for(int32 Y=-3;Y<=3;++Y)for(int32 X=-3;X<=3;++X) + { + const auto It=Buckets.find(Center+FIntVector(X,Y,Z)); + if(It==Buckets.end())continue; + for(const FComparePoint* Candidate:It->second) + { + const double DX=P.X-Candidate->X,DY=P.Y-Candidate->Y,DZ=P.Z-Candidate->Z; + BestSquared=std::min(BestSquared,DX*DX+DY*DY+DZ*DZ); + } + } + if(std::isfinite(BestSquared)) + { + const double Distance=std::sqrt(BestSquared); + Result.Sum+=Distance;Result.Maximum=std::max(Result.Maximum,Distance);++Result.Count; + } + else ++Result.Unmatched; + } + return Result; + } + + int RunRoundWallComparison(FStandaloneOwnerWorld& World,V3 CameraPosition,int32 TileCount) + { + const FVector CameraVoxels(CameraPosition.X*4.0,CameraPosition.Y*4.0,CameraPosition.Z*4.0); + const FStandaloneDesiredTileSet Desired=StandaloneWorldMesher::BuildDesiredSet(World,CameraVoxels); + std::vector Tiles;Tiles.reserve(static_cast(TileCount)); + for(const FVoxelTileKey& Tile:Desired.Tiles) + if(Tile.Level==0&&static_cast(Tiles.size()) Densities; + std::vector Surface; + }; + std::vector Legacy(Tiles.size()); + std::vector Detailed(Tiles.size()); + UVoxelMarchingCubesMesher Mesher; + Mesher.SetGenerator(World.Generator.get());Mesher.bGenerateSkirts=World.bGenerateSkirts; + Mesher.SkirtCells=static_cast(World.SkirtCells);Mesher.LODOctaveDrop=World.LODOctaveDrop; + int32 MinChunkZ=MIN_int32,MaxChunkZ=MAX_int32,TopChunkZ=0,BottomChunkZ=0; + if(World.Settings->bClampViewToStrate&&World.Manager->GetStrateChunkZBounds( + StandaloneWorldMesher::CameraChunk(CameraVoxels).Z,TopChunkZ,BottomChunkZ)) + { + MinChunkZ=BottomChunkZ*CHUNK_SIZE; + MaxChunkZ=(TopChunkZ+1)*CHUNK_SIZE; + } + uint64 TotalSamples=0,ChangedSigns=0; + uint64 LegacyHash=14695981039346656037ull,DetailedHash=14695981039346656037ull; + const auto Evaluate=[&](bool bEnhanced,std::vector& Out) + { + FStandaloneResearchTunnels::Set(true,bEnhanced); + for(size_t I=0;I(Mesh.Vertices.Num())); + for(const FVector& P:Mesh.Vertices) + Out[I].Surface.push_back({P.X*0.01,P.Y*0.01,P.Z*0.01}); + } + }; + Evaluate(false,Legacy); + Evaluate(true,Detailed); + FDirectedSurfaceDistance LegacyToDetailed,DetailedToLegacy; + std::vector AllLegacySurface,AllDetailedSurface; + for(size_t TileIndex=0;TileIndex(A.Densities[I]);LegacyHash*=1099511628211ull; + DetailedHash^=std::bit_cast(B.Densities[I]);DetailedHash*=1099511628211ull; + } + AllLegacySurface.insert(AllLegacySurface.end(),A.Surface.begin(),A.Surface.end()); + AllDetailedSurface.insert(AllDetailedSurface.end(),B.Surface.begin(),B.Surface.end()); + } + LegacyToDetailed=DirectedSurfaceDistance(AllLegacySurface,AllDetailedSurface); + DetailedToLegacy=DirectedSurfaceDistance(AllDetailedSurface,AllLegacySurface); + const uint64 DistanceSamples=LegacyToDetailed.Count+DetailedToLegacy.Count; + const double MeanDistance=DistanceSamples>0 + ?(LegacyToDetailed.Sum+DetailedToLegacy.Sum)/static_cast(DistanceSamples):0.0; + const double Hausdorff=std::max(LegacyToDetailed.Maximum,DetailedToLegacy.Maximum); + std::printf("[RoundTunnelCompare] tiles=%zu lattice_samples=%llu changed_signs=%llu changed_share=%.6f%% legacy_density_hash=0x%016llx detailed_density_hash=0x%016llx old_vertices=%zu new_vertices=%zu symmetric_vertex_mean_m=%.4f symmetric_vertex_max_m=%.4f unmatched_vertices=%llu\n", + Tiles.size(),static_cast(TotalSamples), + static_cast(ChangedSigns),TotalSamples?100.0*ChangedSigns/TotalSamples:0.0, + static_cast(LegacyHash),static_cast(DetailedHash), + AllLegacySurface.size(),AllDetailedSurface.size(),MeanDistance,Hausdorff, + static_cast(LegacyToDetailed.Unmatched+DetailedToLegacy.Unmatched)); + FStandaloneResearchTunnels::Set(true,true); + return TotalSamples>0&&LegacyToDetailed.Unmatched+DetailedToLegacy.Unmatched==0?0:10; + } + + void HashWord(uint64& Hash,uint64 Word,int32 Bytes=8) + { + for(int32 I=0;I(Word>>(I*8)); + Hash*=1099511628211ull; + } + } + + struct FHashedTile + { + FVoxelTileKey Key; + uint64 Hash=14695981039346656037ull; + }; + + bool TileKeyLessForHash(const FVoxelTileKey& A,const FVoxelTileKey& B) + { + if(A.Level!=B.Level)return A.Level& Rows) + { + std::sort(Rows.begin(),Rows.end(),[](const FHashedTile& A,const FHashedTile& B) + {return TileKeyLessForHash(A.Key,B.Key);}); + uint64 Hash=14695981039346656037ull; + for(const FHashedTile& Row:Rows) + { + HashWord(Hash,static_cast(Row.Key.Level),4); + HashWord(Hash,static_cast(Row.Key.Coord.X),4); + HashWord(Hash,static_cast(Row.Key.Coord.Y),4); + HashWord(Hash,static_cast(Row.Key.Coord.Z),4); + HashWord(Hash,Row.Hash); + } + return Hash; + } + + int RunStreamingBenchmark(FStandaloneOwnerWorld& World,const FVector& CameraPositionVoxels, + int32 WorkerCount,int32 MaxLevel,bool bRoundTunnels, + bool bEnhancedWalls,const FStandaloneMeshCache* Cache, + const std::string& BakeCachePath, + const FStandaloneMeshCacheMetadata& CacheMetadata) + { + FStandaloneDesiredTileSet Desired=StandaloneWorldMesher::BuildDesiredSet(World,CameraPositionVoxels); + if(MaxLevel>=0) + Desired.Tiles.erase(std::remove_if(Desired.Tiles.begin(),Desired.Tiles.end(), + [&](const FVoxelTileKey& Tile){return Tile.Level>MaxLevel;}),Desired.Tiles.end()); + if(Desired.Tiles.size()>1000000) + { + std::fprintf(stderr,"Stream benchmark rejected an unsafe desired set of %zu tiles.\n", + Desired.Tiles.size()); + return 7; + } + const int32 FullDetailExpected=static_cast(std::count_if( + Desired.Tiles.begin(),Desired.Tiles.end(),[&](const FVoxelTileKey& Tile) + {return Tile.Level,MaxLevels+1> HashRows; + std::array SamplesByLevel{}; + std::array VerticesByLevel{}; + std::array IndicesByLevel{}; + std::array WorkerSecondsByLevel{}; + std::vector CacheTiles; + if(!BakeCachePath.empty())CacheTiles.reserve(Desired.Tiles.size()); + const auto Start=std::chrono::steady_clock::now(); + FStandaloneStreamingGenerator Streamer(World,WorkerCount,true,Cache,MaxLevel); + const FStandaloneStreamingUpdate Update=Streamer.Start(CameraPositionVoxels); + const double LOD0Width=static_cast(2*World.ClipRadius+2) + *CHUNK_SIZE*VOXEL_SIZE/100.0; + std::printf("[StreamBenchmarkConfig] clip_radius=%d lod0_cube=%.0fm voxel=25cm fullres_levels=%d max_level_filter=%d workers=%d full_detail_tiles=%d desired_tiles=%d variant=%s\n", + World.ClipRadius,LOD0Width,World.FullResClipLevels,MaxLevel<0?World.MaxClipLevel:MaxLevel, + Streamer.GetWorkerCount(),FullDetailExpected,Update.DesiredTiles, + bRoundTunnels?(bEnhancedWalls?"round-detailed":"round-legacy"):"base"); + std::fflush(stdout); + int32 Finished=0,FullDetailFinished=0; + bool bFullDetailTimeReported=false; + double FullDetailSeconds=0.0; + const int32 DesiredTotal=Update.DesiredTiles; + while(Finished Ready=Streamer.TakeReady(); + if(Ready.empty()) + { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + continue; + } + for(FStandaloneCpuTile& Tile:Ready) + { + ++Finished; + const int32 Level=Tile.Key.Level; + if(Level>=0&&Level<=MaxLevels) + { + SamplesByLevel[Level]+=Tile.DensitySamples; + VerticesByLevel[Level]+=Tile.Vertices.size(); + IndicesByLevel[Level]+=Tile.Indices.size(); + WorkerSecondsByLevel[Level]+=Tile.WorkerSeconds; + if(Tile.bHasDensityHash)HashRows[Level].push_back({Tile.Key,Tile.DensityHash}); + } + if(Level=FullDetailExpected) + { + bFullDetailTimeReported=true; + FullDetailSeconds=std::chrono::duration( + std::chrono::steady_clock::now()-Start).count(); + std::vector FullRows; + for(int32 Level=0;Level(HashTileRows(FullRows))); + std::fflush(stdout); + } + } + const double FullClipSeconds=std::chrono::duration( + std::chrono::steady_clock::now()-Start).count(); + std::vector AllRows; + for(auto& LevelRows:HashRows)AllRows.insert(AllRows.end(),LevelRows.begin(),LevelRows.end()); + std::printf("[StreamFullClipmap] wall=%.3fs generated=%d/%d worker_sum=%.3fs tiles=%d density_hash=0x%016llx\n", + FullClipSeconds,Finished,DesiredTotal, + std::accumulate(WorkerSecondsByLevel.begin(),WorkerSecondsByLevel.end(),0.0), + DesiredTotal,static_cast(HashTileRows(AllRows))); + std::printf("[StreamCacheUse] hits=%llu requested=%d\n", + static_cast(Streamer.GetCacheHits()),DesiredTotal); + for(int32 Level=0;Level<=MaxLevels;++Level) + { + if(HashRows[Level].empty())continue; + const uint64 LevelHash=HashTileRows(HashRows[Level]); + std::printf("[StreamLevel] lod=%d tiles=%zu samples=%.3fM worker_sum=%.3fs vertices=%llu indices=%llu density_hash=0x%016llx\n", + Level,HashRows[Level].size(),static_cast(SamplesByLevel[Level])/1.0e6, + WorkerSecondsByLevel[Level],static_cast(VerticesByLevel[Level]), + static_cast(IndicesByLevel[Level]), + static_cast(LevelHash)); + } + if(!BakeCachePath.empty()) + { + std::string CacheError; + if(!FStandaloneMeshCache::Save(BakeCachePath,CacheMetadata,CacheTiles,CacheError)) + { + std::fprintf(stderr,"[MeshCacheBake] failed: %s\n",CacheError.c_str()); + return 8; + } + const uint64 Bytes=std::filesystem::file_size(BakeCachePath); + std::printf("[MeshCacheBake] saved %zu tiles, %.2f MiB to %s\n",CacheTiles.size(), + static_cast(Bytes)/1048576.0,BakeCachePath.c_str()); + } + return (Finished==DesiredTotal&&FullDetailFinished==FullDetailExpected)?0:6; + } } int main(int Argc,char** Argv) @@ -1072,7 +1446,11 @@ int main(int Argc,char** Argv) for(int32 I=1;I(2*App.ClipRadius+2) + *CHUNK_SIZE*VOXEL_SIZE/100.0; + std::printf("Standalone clip override: exported radius=%d (112 m cube) -> radius=%d (%.0f m LOD0 cube), voxel size=25 cm.\n", + ExportClipRadius,App.ClipRadius,FullDetailWidth); + if(!App.bForceGenerate)App.LoadMeshCache(); + return RunStreamingBenchmark(*App.World, + FVector(App.Position.X*4.0,App.Position.Y*4.0,App.Position.Z*4.0), + App.WorkerCount,StreamBenchmarkMaxLevel,App.bRoundTunnels, + App.bRoundTunnelEnhanced,App.MeshCache.IsLoaded()?&App.MeshCache:nullptr, + BakeMeshCachePath,App.MakeMeshCacheMetadata()); + } if(BenchmarkLevel>=0) return RunTileBenchmark(*App.World,App.Position,BenchmarkLevel,BenchmarkCount, App.bProfileAttribution,App.bCompareEvaluators,App.bDensityHash); @@ -1133,7 +1546,7 @@ int main(int Argc,char** Argv) GApp=&App; if(!App.Window||!App.InitializeDevice()){MessageBoxA(nullptr,"Direct3D 11 initialization failed.","VoxelForge standalone",MB_ICONERROR);return 3;} ShowWindow(App.Window,SW_SHOW);UpdateWindow(App.Window); - std::printf("Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swap to round/winding research tunnels; Esc quit.\n"); + std::printf("Controls: hold right mouse to look; WASD move; Space/Ctrl (E/Q) up/down; Shift faster; wheel changes speed; F wireframe; G toggles legacy/detailed round walls; 1-9 toggle LOD; 0 toggle all levels; N/P change seed; T swaps base/round tunnels; Esc quit.\n"); std::printf("Owner data: %s; starting at first-strate open-space sample (%.2f, %.2f, %.2f) m.\n", App.DataPath.c_str(),App.Position.X,App.Position.Y,App.Position.Z); std::fflush(stdout); diff --git a/Standalone/Source/StreamingWorld.h b/Standalone/Source/StreamingWorld.h index 60ffca1..0e17967 100644 --- a/Standalone/Source/StreamingWorld.h +++ b/Standalone/Source/StreamingWorld.h @@ -3,7 +3,12 @@ #include "WorldMesher.h" #include +#include #include +#include +#include +#include +#include #include struct FStandaloneTileKeyHash @@ -31,9 +36,172 @@ struct FStandaloneCpuTile std::vector Indices; uint64 DensitySamples=0; double WorkerSeconds=0.0; + uint64 DensityHash=14695981039346656037ull; + bool bHasDensityHash=false; std::array ProfileCycles{}; }; +struct FStandaloneMeshCacheMetadata +{ + uint64 SourceDataHash=0; + int32 Seed=0; + int32 ClipRadius=3; + int32 FullResClipLevels=2; + int32 CoarseTileCells=16; + int32 StrateContentCutMinLevel=9; + int32 SkirtCells=0; + int32 LODOctaveDrop=0; + int32 bGenerateSkirts=0; + uint32 AlgorithmVersion=1; + uint32 TunnelMode=0; + uint32 VoxelSizeCm=25; +}; + +class FStandaloneMeshCache +{ +public: + static constexpr uint32 CurrentVersion=1; + + void Clear(){Tiles.clear();bLoaded=false;BytesLoaded=0;} + bool IsLoaded()const{return bLoaded;} + size_t Num()const{return Tiles.size();} + uint64 GetBytesLoaded()const{return BytesLoaded;} + const FStandaloneCpuTile* Find(const FVoxelTileKey& Key)const + { + const auto It=Tiles.find(Key); + return It==Tiles.end()?nullptr:&It->second; + } + + static bool Save(const std::string& Path,const FStandaloneMeshCacheMetadata& Metadata, + std::vector& InTiles,std::string& Error) + { + std::vector Ordered; + Ordered.reserve(InTiles.size()); + for(FStandaloneCpuTile& Tile:InTiles)Ordered.push_back(&Tile); + std::sort(Ordered.begin(),Ordered.end(),[](const FStandaloneCpuTile* A,const FStandaloneCpuTile* B) + { + if(A->Key.Level!=B->Key.Level)return A->Key.LevelKey.Level; + if(A->Key.Coord.Z!=B->Key.Coord.Z)return A->Key.Coord.ZKey.Coord.Z; + if(A->Key.Coord.Y!=B->Key.Coord.Y)return A->Key.Coord.YKey.Coord.Y; + return A->Key.Coord.XKey.Coord.X; + }); + std::ofstream File(Path,std::ios::binary|std::ios::trunc); + if(!File){Error="could not open mesh cache for writing: "+Path;return false;} + struct FHeader + { + char Magic[8];uint32 Version;uint32 Endian;uint64 SourceDataHash; + int32 Seed,ClipRadius,FullResClipLevels,CoarseTileCells,StrateContentCutMinLevel; + int32 SkirtCells,LODOctaveDrop,bGenerateSkirts; + uint32 AlgorithmVersion,TunnelMode,VoxelSizeCm; + uint64 TileCount; + }; + static_assert(sizeof(FHeader)==80); + const FHeader Header{{'V','F','M','E','S','H','1','\0'},1,0x01020304u, + Metadata.SourceDataHash,Metadata.Seed,Metadata.ClipRadius,Metadata.FullResClipLevels, + Metadata.CoarseTileCells,Metadata.StrateContentCutMinLevel,Metadata.SkirtCells, + Metadata.LODOctaveDrop,Metadata.bGenerateSkirts,Metadata.AlgorithmVersion, + Metadata.TunnelMode,Metadata.VoxelSizeCm,static_cast(Ordered.size())}; + File.write(reinterpret_cast(&Header),sizeof(Header)); + struct FRecord + { + int32 Level,X,Y,Z;uint64 Samples,DensityHash;uint32 VertexCount,IndexCount; + }; + static_assert(sizeof(FRecord)==40); + for(const FStandaloneCpuTile* Tile:Ordered) + { + if(Tile->Vertices.size()>UINT32_MAX||Tile->Indices.size()>UINT32_MAX + ||Tile->Indices.size()%3!=0) + {Error="mesh cache tile exceeds the 32-bit record limits";return false;} + const FRecord Record{Tile->Key.Level,Tile->Key.Coord.X,Tile->Key.Coord.Y, + Tile->Key.Coord.Z,Tile->DensitySamples,Tile->DensityHash, + static_cast(Tile->Vertices.size()),static_cast(Tile->Indices.size())}; + File.write(reinterpret_cast(&Record),sizeof(Record)); + if(!Tile->Vertices.empty())File.write(reinterpret_cast(Tile->Vertices.data()), + static_cast(Tile->Vertices.size()*sizeof(FStandaloneCpuVertex))); + if(!Tile->Indices.empty())File.write(reinterpret_cast(Tile->Indices.data()), + static_cast(Tile->Indices.size()*sizeof(uint32))); + if(!File){Error="mesh cache write failed: "+Path;return false;} + } + File.flush(); + if(!File){Error="mesh cache flush failed: "+Path;return false;} + return true; + } + + bool Load(const std::string& Path,const FStandaloneMeshCacheMetadata& Expected,std::string& Error) + { + Clear(); + std::ifstream File(Path,std::ios::binary); + if(!File){Error="cache file is missing or unreadable";return false;} + struct FHeader + { + char Magic[8];uint32 Version;uint32 Endian;uint64 SourceDataHash; + int32 Seed,ClipRadius,FullResClipLevels,CoarseTileCells,StrateContentCutMinLevel; + int32 SkirtCells,LODOctaveDrop,bGenerateSkirts; + uint32 AlgorithmVersion,TunnelMode,VoxelSizeCm; + uint64 TileCount; + }; + static_assert(sizeof(FHeader)==80); + FHeader H{};File.read(reinterpret_cast(&H),sizeof(H)); + const char ExpectedMagic[8]={'V','F','M','E','S','H','1','\0'}; + if(!File||std::memcmp(H.Magic,ExpectedMagic,sizeof(ExpectedMagic))!=0 + ||H.Version!=1||H.Endian!=0x01020304u||H.TileCount>1000000) + {Error="mesh cache header is invalid";return false;} + if(H.SourceDataHash!=Expected.SourceDataHash||H.Seed!=Expected.Seed + ||H.ClipRadius!=Expected.ClipRadius||H.FullResClipLevels!=Expected.FullResClipLevels + ||H.CoarseTileCells!=Expected.CoarseTileCells + ||H.StrateContentCutMinLevel!=Expected.StrateContentCutMinLevel + ||H.SkirtCells!=Expected.SkirtCells||H.LODOctaveDrop!=Expected.LODOctaveDrop + ||H.bGenerateSkirts!=Expected.bGenerateSkirts + ||H.AlgorithmVersion!=Expected.AlgorithmVersion||H.TunnelMode!=Expected.TunnelMode + ||H.VoxelSizeCm!=Expected.VoxelSizeCm) + {Error="mesh cache metadata does not match this world configuration";return false;} + struct FRecord + { + int32 Level,X,Y,Z;uint64 Samples,DensityHash;uint32 VertexCount,IndexCount; + }; + static_assert(sizeof(FRecord)==40); + std::unordered_map Loaded; + Loaded.reserve(static_cast(H.TileCount)*2+1); + for(uint64 I=0;I(&Record),sizeof(Record)); + if(!File||Record.Level<0||Record.Level>8||Record.VertexCount>10000000 + ||Record.IndexCount>60000000) + {Error="mesh cache contains an invalid tile record";return false;} + FStandaloneCpuTile Tile;Tile.Key=FVoxelTileKey(FIntVector(Record.X,Record.Y,Record.Z),Record.Level); + Tile.DensitySamples=Record.Samples;Tile.DensityHash=Record.DensityHash;Tile.bHasDensityHash=true; + Tile.Vertices.resize(Record.VertexCount);Tile.Indices.resize(Record.IndexCount); + if(!Tile.Vertices.empty())File.read(reinterpret_cast(Tile.Vertices.data()), + static_cast(Tile.Vertices.size()*sizeof(FStandaloneCpuVertex))); + if(!Tile.Indices.empty())File.read(reinterpret_cast(Tile.Indices.data()), + static_cast(Tile.Indices.size()*sizeof(uint32))); + if(!File){Error="mesh cache ended inside tile geometry";return false;} + for(const uint32 Index:Tile.Indices) + if(Index>=Tile.Vertices.size()) + {Error="mesh cache contains an out-of-range mesh index";return false;} + for(const FStandaloneCpuVertex& Vertex:Tile.Vertices) + for(const float Value:Vertex.Position) + if(!std::isfinite(Value)) + {Error="mesh cache contains a non-finite vertex";return false;} + for(const FStandaloneCpuVertex& Vertex:Tile.Vertices) + for(const float Value:Vertex.Normal) + if(!std::isfinite(Value)) + {Error="mesh cache contains a non-finite normal";return false;} + if(!Loaded.emplace(Tile.Key,std::move(Tile)).second) + {Error="mesh cache contains duplicate tile keys";return false;} + } + const std::streamoff End=File.tellg(); + if(End<0){Error="could not determine mesh cache size";return false;} + BytesLoaded=static_cast(End);Tiles.swap(Loaded);bLoaded=true; + return true; + } + +private: + std::unordered_map Tiles; + bool bLoaded=false; + uint64 BytesLoaded=0; +}; + struct FStandaloneStreamingUpdate { FIntVector CenterChunk=FIntVector::ZeroValue; @@ -113,8 +281,12 @@ namespace StandaloneWorldMesher class FStandaloneStreamingGenerator { public: - explicit FStandaloneStreamingGenerator(FStandaloneOwnerWorld& InWorld,int32 InWorkerCount=6) - :World(&InWorld),WorkerCount(FMath::Clamp(InWorkerCount,1,32)) + explicit FStandaloneStreamingGenerator(FStandaloneOwnerWorld& InWorld,int32 InWorkerCount=8, + bool bInHashDensity=false, + const FStandaloneMeshCache* InMeshCache=nullptr, + int32 InMaxLevelFilter=-1) + :World(&InWorld),WorkerCount(FMath::Clamp(InWorkerCount,1,8)),bHashDensity(bInHashDensity), + MeshCache(InMeshCache),MaxLevelFilter(InMaxLevelFilter) { VoxelGenLOD::InitializeConsoleSwitches(); UVoxelMarchingCubesMesher::InitializeConsoleSwitches(); @@ -155,6 +327,9 @@ public: uint64 CrossingIndex=0) { FStandaloneDesiredTileSet NewDesired=StandaloneWorldMesher::BuildDesiredSet(*World,CameraPositionVoxels); + if(MaxLevelFilter>=0) + NewDesired.Tiles.erase(std::remove_if(NewDesired.Tiles.begin(),NewDesired.Tiles.end(), + [&](const FVoxelTileKey& Key){return Key.Level>MaxLevelFilter;}),NewDesired.Tiles.end()); FStandaloneStreamingUpdate Stats; Stats.CenterChunk=NewDesired.CenterChunk; Stats.DesiredTiles=static_cast(NewDesired.Tiles.size()); @@ -221,12 +396,23 @@ public: FIntVector CenterChunk()const {std::lock_guard Lock(Mutex);return CurrentDesired.CenterChunk;} int32 GetWorkerCount()const{return WorkerCount;} + uint64 GetCacheHits()const{return CacheHitCount.load(std::memory_order_relaxed);} private: FStandaloneCpuTile Generate(const FStandaloneTileJob& Job) { const auto StartTime=FClock::now(); FStandaloneCpuTile Out;Out.Key=Job.Key;Out.RequestedCrossing=Job.RequestedCrossing; + if(MeshCache) + { + if(const FStandaloneCpuTile* Cached=MeshCache->Find(Job.Key)) + { + Out=*Cached;Out.RequestedCrossing=Job.RequestedCrossing; + Out.WorkerSeconds=std::chrono::duration(FClock::now()-StartTime).count(); + CacheHitCount.fetch_add(1,std::memory_order_relaxed); + return Out; + } + } UVoxelMarchingCubesMesher Mesher; Mesher.SetGenerator(World->Generator.get()); Mesher.bGenerateSkirts=World->bGenerateSkirts; @@ -240,8 +426,19 @@ private: const bool bProfile=VoxelDensityProfile::GetMode()!=VoxelDensityProfile::EMode::Disabled; const VoxelDensityProfile::FSnapshot Before=bProfile ? VoxelDensityProfile::SnapshotCurrentThread():VoxelDensityProfile::FSnapshot{}; + std::vector DensityValues; FVoxelMeshData Mesh=Mesher.GenerateMesh(Job.Key.OriginVoxels(),Step,Cells,nullptr, - Job.BandZMin,Job.BandZMax,&SampleCount); + Job.BandZMin,Job.BandZMax,&SampleCount,nullptr,nullptr, + bHashDensity?&DensityValues:nullptr); + if(bHashDensity) + { + Out.bHasDensityHash=true; + for(const float Density:DensityValues) + { + Out.DensityHash^=std::bit_cast(Density); + Out.DensityHash*=1099511628211ull; + } + } if(bProfile) { const VoxelDensityProfile::FSnapshot After=VoxelDensityProfile::SnapshotCurrentThread(); @@ -290,7 +487,11 @@ private: using FClock=std::chrono::steady_clock; FStandaloneOwnerWorld* World=nullptr; - int32 WorkerCount=6; + int32 WorkerCount=8; + bool bHashDensity=false; + const FStandaloneMeshCache* MeshCache=nullptr; + int32 MaxLevelFilter=-1; + std::atomic CacheHitCount{0}; mutable std::mutex Mutex; std::condition_variable Wake; bool bStop=true;