proto: continuous swept road deck; coarse-LOD proxies keep thin pillars intact (L143)

Road: one swept-deck stamp on a shared cubic-Hermite centerline (stamp vocabulary V5), 376.8 m, max 8.5 deg, walk
audit clean, short-road control fails as expected. Pillars: regular fillPillar stamps get deterministic 24-sided
capped-cylinder proxies once the LOD step exceeds their radius or half-height (applies to all worlds). Owner hashes
unchanged (v227); five-fixture Clang/GCC determinism; fast tier green.

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-11-01 10:08:37 +01:00
1 parent 6cd9e4da76
commit a4e214561f
19 files changed
+1167 -73

No files matched your search

+52 -26
View File
@@ -2981,28 +2981,48 @@ namespace StandaloneStreamBenchmark
constexpr double HalfCapsuleHeightMetres=CapsuleHeightMetres*0.5;
constexpr double SlopeCapsuleClearanceMetres=0.12;
std::vector<std::array<double,3>> roadPath;
roadPath.reserve(deck.size()*4);
std::vector<std::array<double,3>> centerline;
centerline.reserve(deck.size()+1);
bool surfacePathValid=true;
for(std::size_t i=0;i<deck.size();++i)
const bool continuousDeck=deck.size()==1
&&deck.front()->kind
==VoxelForgeCore::ResolvedSdfStampKindV1::fillSweptDeckSegment
&&deck.front()->sweepPathMicrometres.size()>=2;
bool surfacePathValid=continuousDeck;
if(continuousDeck)
{
const auto* segment=deck[i];
if(segment->kind!=VoxelForgeCore::ResolvedSdfStampKindV1::fillSweptDeckSegment)
surfacePathValid=false;
const auto point=[&](std::size_t endpoint)
{return std::array<double,3>{
segment->sweepEndpointsMicrometres[endpoint][0]/1.0e6,
segment->sweepEndpointsMicrometres[endpoint][1]/1.0e6,
segment->sweepEndpointsMicrometres[endpoint][2]/1.0e6};};
const auto a=point(0),b=point(1);
if(i==0)centerline.push_back(a);
else if(std::abs(centerline.back()[0]-a[0])>1.0e-6
||std::abs(centerline.back()[1]-a[1])>1.0e-6
||std::abs(centerline.back()[2]-a[2])>1.0e-6)
surfacePathValid=false;
centerline.push_back(b);
centerline.reserve(deck.front()->sweepPathMicrometres.size());
for(const auto& point:deck.front()->sweepPathMicrometres)
centerline.push_back({point[0]/1.0e6,point[1]/1.0e6,point[2]/1.0e6});
surfacePathValid=surfacePathValid
&&centerline.front()[0]
==deck.front()->sweepEndpointsMicrometres[0][0]/1.0e6
&&centerline.back()[0]
==deck.front()->sweepEndpointsMicrometres[1][0]/1.0e6;
}
else
{
centerline.reserve(deck.size()+1);
surfacePathValid=true;
for(std::size_t i=0;i<deck.size();++i)
{
const auto* segment=deck[i];
if(segment->kind
!=VoxelForgeCore::ResolvedSdfStampKindV1::fillSweptDeckSegment)
surfacePathValid=false;
const auto point=[&](std::size_t endpoint)
{return std::array<double,3>{
segment->sweepEndpointsMicrometres[endpoint][0]/1.0e6,
segment->sweepEndpointsMicrometres[endpoint][1]/1.0e6,
segment->sweepEndpointsMicrometres[endpoint][2]/1.0e6};};
const auto a=point(0),b=point(1);
if(i==0)centerline.push_back(a);
else if(std::abs(centerline.back()[0]-a[0])>1.0e-6
||std::abs(centerline.back()[1]-a[1])>1.0e-6
||std::abs(centerline.back()[2]-a[2])>1.0e-6)
surfacePathValid=false;
centerline.push_back(b);
}
}
roadPath.reserve(centerline.size()*4);
double pathLengthMetres=0.0,maxGradeDegrees=0.0;
std::uint64_t surfaceProbes=0,surfaceMisses=0;
const auto surfaceTopAt=[&](double xMetres,double yMetres,
@@ -3010,11 +3030,18 @@ namespace StandaloneStreamBenchmark
{
++surfaceProbes;
double low=nominalTop-0.25,high=nominalTop+1.0;
if(Shape.densityAt({xMetres/coreMetres,yMetres/coreMetres,
low/coreMetres})>=0.0f
||Shape.densityAt({xMetres/coreMetres,yMetres/coreMetres,
high/coreMetres})<0.0f)
{++surfaceMisses;return false;}
const float lowDensity=Shape.densityAt({xMetres/coreMetres,
yMetres/coreMetres,low/coreMetres});
const float highDensity=Shape.densityAt({xMetres/coreMetres,
yMetres/coreMetres,high/coreMetres});
if(lowDensity>=0.0f||highDensity<0.0f)
{
++surfaceMisses;
std::printf("[LiminalRoadSurfaceProbeMiss] x_m=%.6f y_m=%.6f "
"nominal_top_m=%.6f low_density=%.6f high_density=%.6f\n",
xMetres,yMetres,nominalTop,lowDensity,highDensity);
return false;
}
for(int iteration=0;iteration<20;++iteration)
{
const double middle=(low+high)*0.5;
@@ -3059,8 +3086,7 @@ namespace StandaloneStreamBenchmark
const FWalkAudit roadAudit=auditPlayerPath(Shape,roadPath,
0.125,0.125,1.125,3,0.45);
const double widthMetres=2.0*deck.front()->halfExtentsMicrometres[1]/1.0e6;
passed=std::all_of(deck.begin(),deck.end(),[](const auto* road)
{return road->kind==VoxelForgeCore::ResolvedSdfStampKindV1::fillSweptDeckSegment;})
passed=continuousDeck
&&pathLengthMetres>=300.0&&widthMetres>=3.0
&&maxGradeDegrees<=15.0&&surfacePathValid&&roadAudit.passed;
std::printf("[LiminalRoadWalkAudit] id=liminal/road-clouds-v2 "