passages: two-pass swept-tube tunnels (owner design, L99, v215) - pending owner visual review
Route plan unchanged. Per tile, route segments whose bounded influence (tube + 4 m) touches the tile write min-combined tube distance (base sweep); relief/floor/mouth shaping only in the shell (detail sweep); 0.5 m edge blend into the strate field. Near-ready @W12: SW 1.01->0.80, FI 2.23->1.43, TN 2.18->1.37, VS 1.09->0.98 s; whole view FI 3.38->2.37 s. All passage walk audits pass (21,425/21,425 canonical, 3/3 interfaces); 24-run Clang/GCC W1/W8/W12 determinism; 0 sign flips. Change: mean 0.02 cm / 0.05 deg; max 25.9 cm (passage walls/roofs ~3.5 m from route, LOD2) and 49.8 deg (rock walls 13-25 m from routes, LOD2). Captures with diffs in Linux99/captures. Fast tier PASS (v215 pins). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
36140b573f
commit
fa6363b31a
67 files changed
+2022
-45
No files matched your search
@@ -140,6 +140,8 @@ namespace StandaloneStreamBenchmark
|
||||
double maxAbsDensityDelta=0.0,maxSurfaceDisplacementCm=0.0;
|
||||
double sumSurfaceDisplacementCm=0.0,maxNormalAngleDegrees=0.0;
|
||||
double sumNormalAngleDegrees=0.0;
|
||||
std::array<double,3> maxSurfaceLocationVoxels{},maxNormalLocationVoxels{};
|
||||
std::int32_t maxSurfaceRegion=3,maxNormalRegion=3;
|
||||
std::array<std::uint64_t,4> movedEdgeRegions{},normalVertexRegions{};
|
||||
bool meshChanged=false,valid=false;
|
||||
};
|
||||
@@ -253,6 +255,7 @@ namespace StandaloneStreamBenchmark
|
||||
const double ta=static_cast<double>(a0)/(static_cast<double>(a0)-a1);
|
||||
const double tb=static_cast<double>(b0)/(static_cast<double>(b0)-b1);
|
||||
const double displacementCm=std::abs(ta-tb)*step*voxelSizeCm;
|
||||
const bool newMaximum=displacementCm>result.maxSurfaceDisplacementCm;
|
||||
result.maxSurfaceDisplacementCm=std::max(result.maxSurfaceDisplacementCm,
|
||||
displacementCm);
|
||||
result.sumSurfaceDisplacementCm+=displacementCm;
|
||||
@@ -266,6 +269,11 @@ namespace StandaloneStreamBenchmark
|
||||
location[2]+=(nz-z)*step*(ta+tb)*0.5;
|
||||
const int region=ClassifyPassageRegion(Layout,location).category;
|
||||
++result.movedEdgeRegions[static_cast<std::size_t>(region)];
|
||||
if(newMaximum)
|
||||
{
|
||||
result.maxSurfaceLocationVoxels=location;
|
||||
result.maxSurfaceRegion=region;
|
||||
}
|
||||
};
|
||||
for(std::int32_t z=0;z<dim;++z)
|
||||
for(std::int32_t y=0;y<dim;++y)
|
||||
@@ -292,6 +300,7 @@ namespace StandaloneStreamBenchmark
|
||||
const double cosine=std::clamp((a.x*b.x+a.y*b.y+a.z*b.z)
|
||||
/(lengthA*lengthB),-1.0,1.0);
|
||||
const double angle=std::acos(cosine)*RadiansToDegrees;
|
||||
const bool newMaximum=angle>result.maxNormalAngleDegrees;
|
||||
result.maxNormalAngleDegrees=std::max(result.maxNormalAngleDegrees,angle);
|
||||
result.sumNormalAngleDegrees+=angle;
|
||||
++result.normalVertices;
|
||||
@@ -304,6 +313,11 @@ namespace StandaloneStreamBenchmark
|
||||
position.y/geometryVoxelSizeCm,position.z/geometryVoxelSizeCm};
|
||||
const int region=ClassifyPassageRegion(Layout,location).category;
|
||||
++result.normalVertexRegions[static_cast<std::size_t>(region)];
|
||||
if(newMaximum)
|
||||
{
|
||||
result.maxNormalLocationVoxels=location;
|
||||
result.maxNormalRegion=region;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -497,7 +511,7 @@ namespace StandaloneStreamBenchmark
|
||||
movedRegions[floorIndex][region]+=comparison.movedEdgeRegions[region];
|
||||
normalRegions[floorIndex][region]+=comparison.normalVertexRegions[region];
|
||||
}
|
||||
std::printf("[%s] %s=%.2f key=(%d,%d,%d,lod%d) samples=%llu changed=%llu sign_flips=%llu moved_edges=%llu max_displacement_cm=%.6g normal_vertices=%llu max_normal_degrees=%.6g changed_mesh=%d\n",
|
||||
std::printf("[%s] %s=%.2f key=(%d,%d,%d,lod%d) samples=%llu changed=%llu sign_flips=%llu moved_edges=%llu max_displacement_cm=%.6g max_displacement_xyz_vox=(%.6g,%.6g,%.6g) displacement_region=%d normal_vertices=%llu max_normal_degrees=%.6g max_normal_xyz_vox=(%.6g,%.6g,%.6g) normal_region=%d changed_mesh=%d\n",
|
||||
tileTag,valueName,Candidates[floorIndex],key.coordinate.x,
|
||||
key.coordinate.y,key.coordinate.z,key.lod,
|
||||
static_cast<unsigned long long>(comparison.samples),
|
||||
@@ -505,8 +519,15 @@ namespace StandaloneStreamBenchmark
|
||||
static_cast<unsigned long long>(comparison.signFlips),
|
||||
static_cast<unsigned long long>(comparison.movedCrossingEdges),
|
||||
comparison.maxSurfaceDisplacementCm,
|
||||
comparison.maxSurfaceLocationVoxels[0],
|
||||
comparison.maxSurfaceLocationVoxels[1],
|
||||
comparison.maxSurfaceLocationVoxels[2],comparison.maxSurfaceRegion,
|
||||
static_cast<unsigned long long>(comparison.normalVertices),
|
||||
comparison.maxNormalAngleDegrees,comparison.meshChanged?1:0);
|
||||
comparison.maxNormalAngleDegrees,
|
||||
comparison.maxNormalLocationVoxels[0],
|
||||
comparison.maxNormalLocationVoxels[1],
|
||||
comparison.maxNormalLocationVoxels[2],comparison.maxNormalRegion,
|
||||
comparison.meshChanged?1:0);
|
||||
}
|
||||
}
|
||||
bool acceptedAtAllFloors=generationFailures==0&&invalidComparisons==0
|
||||
|
||||
@@ -1493,7 +1493,7 @@ private:
|
||||
static_cast<unsigned long long>(D.islandSharedCacheConflictReplacements),
|
||||
static_cast<double>(D.islandSharedCacheLockWaitNanoseconds)/1000.0);
|
||||
if(D.passageComposerProfiled)
|
||||
std::printf("[PassageComposerTile] key=(%d,%d,%d,lod%d) worker_ms=%.3f samples=%llu native_field_calls=%llu features=%llu route_candidates=%llu mouth_candidates=%llu boundary_band_queries=%llu queries=%llu passage_iterations=%llu tile_bound_checks=%llu tile_bound_rejects=%llu tile_bound_skipped_iterations=%llu upper_mouth_checks=%llu column_candidates=%llu column_distance_calls=%llu negative_bounds=%llu negative_rejects=%llu positive_bounds=%llu positive_rejects=%llu carve_segment_visits=%llu smooth_carve_joins=%llu support_segment_visits=%llu smooth_support_joins=%llu support_capsule_checks=%llu later_bore_checks=%llu other_capsule_checks=%llu mouth_support_calls=%llu mouth_route_segment_checks=%llu relief_field_calls=%llu smoothstep_evaluations=%llu\n",
|
||||
std::printf("[PassageComposerTile] key=(%d,%d,%d,lod%d) worker_ms=%.3f samples=%llu native_field_calls=%llu features=%llu route_candidates=%llu mouth_candidates=%llu boundary_band_queries=%llu queries=%llu passage_iterations=%llu tile_bound_checks=%llu tile_bound_rejects=%llu tile_bound_skipped_iterations=%llu upper_mouth_checks=%llu column_candidates=%llu column_distance_calls=%llu negative_bounds=%llu negative_rejects=%llu positive_bounds=%llu positive_rejects=%llu carve_segment_visits=%llu smooth_carve_joins=%llu support_segment_visits=%llu smooth_support_joins=%llu support_capsule_checks=%llu later_bore_checks=%llu other_capsule_checks=%llu mouth_support_calls=%llu mouth_route_segment_checks=%llu relief_field_calls=%llu smoothstep_evaluations=%llu sweep_segments=%llu sweep_pairs=%llu sweep_outside_pairs=%llu sweep_min_updates=%llu sweep_base_samples=%llu sweep_detail_samples=%llu sweep_grid_samples=%llu sweep_no_influence_samples=%llu sweep_lookups=%llu sweep_cache_hits=%llu sweep_base_hits=%llu sweep_outside_hits=%llu sweep_missing=%llu\n",
|
||||
Event.Key.Coord.X,Event.Key.Coord.Y,Event.Key.Coord.Z,Event.Key.Level,
|
||||
Event.WorkerMilliseconds,static_cast<unsigned long long>(Event.DensitySamples),
|
||||
static_cast<unsigned long long>(D.fieldCalls),
|
||||
@@ -1523,7 +1523,20 @@ private:
|
||||
static_cast<unsigned long long>(D.passageMouthSupportCalls),
|
||||
static_cast<unsigned long long>(D.passageMouthRouteSegmentChecks),
|
||||
static_cast<unsigned long long>(D.passageReliefFieldCalls),
|
||||
static_cast<unsigned long long>(D.passageSmoothstepEvaluations));
|
||||
static_cast<unsigned long long>(D.passageSmoothstepEvaluations),
|
||||
static_cast<unsigned long long>(D.passageSweepRouteSegmentCandidates),
|
||||
static_cast<unsigned long long>(D.passageSweepSegmentSamplePairs),
|
||||
static_cast<unsigned long long>(D.passageSweepOutsideInfluencePairs),
|
||||
static_cast<unsigned long long>(D.passageSweepMinimumUpdates),
|
||||
static_cast<unsigned long long>(D.passageSweepBaseInfluenceSamples),
|
||||
static_cast<unsigned long long>(D.passageSweepDetailShellSamples),
|
||||
static_cast<unsigned long long>(D.passageSweepGridSamples),
|
||||
static_cast<unsigned long long>(D.passageSweepNoInfluenceGridSamples),
|
||||
static_cast<unsigned long long>(D.passageSweepLookups),
|
||||
static_cast<unsigned long long>(D.passageSweepCacheHits),
|
||||
static_cast<unsigned long long>(D.passageSweepBaseInfluenceHits),
|
||||
static_cast<unsigned long long>(D.passageSweepOutOfInfluenceHits),
|
||||
static_cast<unsigned long long>(D.passageSweepMissingSamples));
|
||||
}
|
||||
void RecordTimelineEvent(FStandaloneCpuTileTimelineEvent::EType Type,
|
||||
const FVoxelTileKey& Key,int32 WorkerId,size_t QueueDepth,size_t ActiveWorkers,
|
||||
|
||||
Reference in new issue
Block a user