measure(step1): cook is 1.5-2.3 ms, RMC's route is 8-11 s; CMC cannot take a field floor; cap 16 uploads

Rebuild plan step 1 (RESEARCH-SPEED-2026-09.md), all behind default-off switches.
A. Direct cook on a dedicated thread, 27-tile support cohort: core cook p50 1.50 ms, p95 2.28 ms;
   a 3,949-tri tile 1.67 ms extract+cook. PASSES the 10 ms gate. Through RMC's route the same
   support bodies became ready 8.46 s p50 / 10.80 s p95 after their meshes existed: FAILS 150 ms.
   Exact-target capsule sweep confirmed (0.75 ms after body update).
B. 100 rapid underfoot digs on CMC with a field override: 883 false-support frames, 0 false-air,
   0 invented velocity. CMC's floor comes from collision-scene traces -> step 4 = field-aware Mover.
C. 341 prequeued tiles, render on: cap 4 = 238 applies/s, cap 8 = 476, cap 16 = 639 (drain p95
   2.22 ms vs 2 ms gate); first visible 1 frame after release; no RT/RHI backlog. Tune drain,
   no grouping needed yet.
D. Same 128^3 region, 64/64 tile hashes equal in export and game. The "263 ns/sample" was export
   WALL time with 15 workers sharing a lattice (~3.4 us CPU/sample); game tile time includes
   meshing and duplicated borders (+22%); contention cap 1 vs 14: 74 vs 112 ms per tile.
   Profiling is not the cause.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5.5 committed 2026-09-30 00:07:59 +02:00
1 parent 97a1874498
commit 41b001b652
5 files changed
+481 -55

No files matched your search

+9
View File
@@ -117,6 +117,8 @@ struct FChunkResult
uint64 GenerationEndCycles = 0;
uint64 ApplyStartCycles = 0;
EVoxelTileWorkPriority WorkPriority = EVoxelTileWorkPriority::Horizon;
// Step-1-only tag captured on the game thread for the pawn's bounded support cohort.
bool bStep1SupportCohort = false;
int32 ClassifyVerdict = -1; double ClassifySeconds = 0.0; double MeshSeconds = 0.0; double StreamSeconds = 0.0; int32 NumTriangles = 0; int32 NumCeilingTriangles = 0; int32 NumSkirtTriangles = 0;
int32 NumVertices = 0;
uint64 GeometryBytes = 0;
@@ -304,6 +306,7 @@ public:
uint64 GenerationEndCycles = 0;
uint64 ApplyStartCycles = 0;
EVoxelTileWorkPriority WorkPriority = EVoxelTileWorkPriority::Horizon;
bool bStep1SupportCohort = false;
int32 NumVertices = 0;
int32 NumTriangles = 0;
int32 NumSkirtTriangles = 0;
@@ -1040,6 +1043,12 @@ public:
// Independent from DesiredSorted: rendered LOD0 tiles outside the pawn radius remain visible
// without a Chaos body. Pawn radius, anchor boxes, and collision-gate support are unioned here.
TSet<FVoxelTileKey> CollisionDesiredTiles;
// Exact pawn-radius box used only by the default-off Step-1 cook sidecar measurement.
TSet<FVoxelTileKey> Step1SupportCohortTiles;
TSharedPtr<RealtimeMesh::FRealtimeMeshStreamSet> Step1PauseReplayStreams;
FVoxelTileKey Step1PauseReplayTile;
int32 Step1PauseReplayTriangles = 0;
bool bStep1PauseReplayQueued = false;
// A short collision-only column below an unresolved player support tile. Keeping these keys
// stamped prevents a critical request outside the render clipmap from being canceled on rebuild.
TSet<FVoxelTileKey> CollisionGateDesiredTiles;