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:
1 parent
97a1874498
commit
41b001b652
5 files changed
+481
-55
No files matched your search
@@ -334,6 +334,10 @@ struct FExploreArguments
|
||||
float RenderMaxDistanceVoxels = DefaultRenderMaxDistanceVoxels;
|
||||
int32 ExportSize = DefaultExportSize;
|
||||
int32 ExportStep = DefaultExportStep;
|
||||
bool bExportTileOverride = false;
|
||||
int32 ExportTileX = 0;
|
||||
int32 ExportTileY = 0;
|
||||
int32 ExportTileZ = 0;
|
||||
// The canonical export owns one immutable lattice for the whole run. Batch cases can pass
|
||||
// density_grid_reuse=false to produce a matched wall-clock control.
|
||||
bool bReuseDensityGrid = true;
|
||||
@@ -463,6 +467,24 @@ bool ParseArguments(const FString& Params, FExploreArguments& OutArguments, FStr
|
||||
FParse::Value(*Params, TEXT("rendermaxdistance="), OutArguments.RenderMaxDistanceVoxels);
|
||||
FParse::Value(*Params, TEXT("exportsize="), OutArguments.ExportSize);
|
||||
FParse::Value(*Params, TEXT("exportstep="), OutArguments.ExportStep);
|
||||
const bool bExportTileXSpecified = Params.Contains(
|
||||
TEXT("exporttilex="), ESearchCase::IgnoreCase);
|
||||
const bool bExportTileYSpecified = Params.Contains(
|
||||
TEXT("exporttiley="), ESearchCase::IgnoreCase);
|
||||
const bool bExportTileZSpecified = Params.Contains(
|
||||
TEXT("exporttilez="), ESearchCase::IgnoreCase);
|
||||
if (bExportTileXSpecified || bExportTileYSpecified || bExportTileZSpecified)
|
||||
{
|
||||
if (!bExportTileXSpecified || !bExportTileYSpecified || !bExportTileZSpecified
|
||||
|| !FParse::Value(*Params, TEXT("exporttilex="), OutArguments.ExportTileX)
|
||||
|| !FParse::Value(*Params, TEXT("exporttiley="), OutArguments.ExportTileY)
|
||||
|| !FParse::Value(*Params, TEXT("exporttilez="), OutArguments.ExportTileZ))
|
||||
{
|
||||
OutError = TEXT("exporttilex, exporttiley, and exporttilez must be supplied together as level-0 tile coordinates.");
|
||||
return false;
|
||||
}
|
||||
OutArguments.bExportTileOverride = true;
|
||||
}
|
||||
int32 DensityGridReuse = OutArguments.bReuseDensityGrid ? 1 : 0;
|
||||
FParse::Value(*Params, TEXT("densitygridreuse="), DensityGridReuse);
|
||||
OutArguments.bReuseDensityGrid = DensityGridReuse != 0;
|
||||
@@ -2015,6 +2037,14 @@ FIntVector ChooseExploreMeshOrigin(
|
||||
int32 MeshSize,
|
||||
int32 TargetMiddleWorldZ)
|
||||
{
|
||||
if (Arguments.bExportTileOverride)
|
||||
{
|
||||
return FIntVector(
|
||||
Arguments.ExportTileX * CHUNK_SIZE,
|
||||
Arguments.ExportTileY * CHUNK_SIZE,
|
||||
Arguments.ExportTileZ * CHUNK_SIZE);
|
||||
}
|
||||
|
||||
FVector Centre(0.0f, 0.0f, static_cast<float>(TargetMiddleWorldZ));
|
||||
if (CameraSeedWalk != nullptr && CameraSeedWalk->CameraSeedPoses.Num() > 0)
|
||||
{
|
||||
|
||||
Reference in new issue
Block a user