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
|
||||
|
||||
Reference in new issue
Block a user