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:
Fr0zkaandClaude Opus 5.5 committed 2026-10-28 14:38:45 +01:00
1 parent 36140b573f
commit fa6363b31a
67 files changed
+2022 -45

No files matched your search

+23 -2
View File
@@ -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
+15 -2
View File
@@ -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,