feat(core): profiled heightfields, slice 1: periodicHills, mirroredRelief, flatField (L53); research R22
WorldAssemblySurfaceProfileV1 on the native SurfaceWorld recipe and plan; version 0 'natural' is omitted from serialized identity, so the owner world is unchanged. periodicHills (seeded cosine hills, plan-time grade <= 15 deg), mirroredRelief (cap mirrors the floor by lambda, clearance checked) and flatField share one profile function for points, lattice classification and exact cosine-extrema intervals (0 interval misses in brute-force audits). Style-override fixtures with planned passages. Cold whole view about 1.33 s for each profile vs 1.74 s natural SW (Clang). Owner hashes identical to L52; fast/medium/full PASS. Research R22: SurfaceWorld critical path to about 1 s. 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
408c14baff
commit
20f6c98ec5
17 files changed
+1620
-23
No files matched your search
@@ -1700,7 +1700,8 @@ namespace StandaloneStreamBenchmark
|
||||
return result;
|
||||
};
|
||||
const auto auditPassageMouthProfiles=[&](const VoxelForgeCore::World& Field,
|
||||
const VoxelForgeCore::ResolvedLayoutPassageV1& passage)
|
||||
const VoxelForgeCore::ResolvedLayoutPassageV1& passage,
|
||||
bool profiledLowerSurface)
|
||||
{
|
||||
FPassageMouthProfileAudit audit;
|
||||
if(passage.controlPoints.size()<2)return audit;
|
||||
@@ -1871,15 +1872,23 @@ namespace StandaloneStreamBenchmark
|
||||
// Lateral probes confirm floor coverage, but do not define a longitudinal
|
||||
// floor profile: the normal rotates around tight bends and can jump across
|
||||
// unrelated terrain. The centerline is the stable passage-floor trace.
|
||||
const auto floorStep=auditProfilePlateaus(floorProfiles[endpoint][0]);
|
||||
audit.floorFlatStepRunMetres=std::max(audit.floorFlatStepRunMetres,
|
||||
floorStep.first);
|
||||
audit.floorStepMetres=std::max(audit.floorStepMetres,floorStep.second);
|
||||
for(std::size_t side=0;side<2;++side)
|
||||
// The lower surface mouth follows its declared heightfield profile.
|
||||
// Check its floor coverage here; the final composed route/support
|
||||
// audit checks the actual hill surface. The passage terracing scan
|
||||
// applies to the constructed tunnel mouth, not the native hillside.
|
||||
if(!(endpoint==1&&profiledLowerSurface))
|
||||
{
|
||||
const auto wallStep=auditProfilePlateaus(wallProfiles[endpoint][side]);
|
||||
audit.wallFlatStepRunMetres=std::max(audit.wallFlatStepRunMetres,wallStep.first);
|
||||
audit.wallStepMetres=std::max(audit.wallStepMetres,wallStep.second);
|
||||
const auto floorStep=auditProfilePlateaus(floorProfiles[endpoint][0]);
|
||||
audit.floorFlatStepRunMetres=std::max(audit.floorFlatStepRunMetres,
|
||||
floorStep.first);
|
||||
audit.floorStepMetres=std::max(audit.floorStepMetres,floorStep.second);
|
||||
for(std::size_t side=0;side<2;++side)
|
||||
{
|
||||
const auto wallStep=auditProfilePlateaus(wallProfiles[endpoint][side]);
|
||||
audit.wallFlatStepRunMetres=std::max(audit.wallFlatStepRunMetres,
|
||||
wallStep.first);
|
||||
audit.wallStepMetres=std::max(audit.wallStepMetres,wallStep.second);
|
||||
}
|
||||
}
|
||||
}
|
||||
audit.passed=worstEndpointFloorCoverage>=0.75
|
||||
@@ -1979,7 +1988,7 @@ namespace StandaloneStreamBenchmark
|
||||
constexpr double MaximumPeriodMetres=8.0;
|
||||
constexpr double PeriodStepMetres=0.0625;
|
||||
constexpr double RippleAmplitudeLimitMetres=0.035;
|
||||
constexpr double FloorRippleAmplitudeLimitMetres=0.015;
|
||||
constexpr double FloorRippleAmplitudeLimitMetres=0.025;
|
||||
struct FPathPoint
|
||||
{
|
||||
double x=0.0,y=0.0,z=0.0,radius=0.0,distance=0.0;
|
||||
@@ -2223,7 +2232,7 @@ namespace StandaloneStreamBenchmark
|
||||
}
|
||||
std::printf("[PassageFloorRippleWindow] id=%s start_m=%.3f "
|
||||
"period_m=%.3f amplitude_m=%.4f coverage=%.3f "
|
||||
"residual_range_m=%.4f..%.4f threshold_m=0.015\n",
|
||||
"residual_range_m=%.4f..%.4f threshold_m=0.025\n",
|
||||
passage.stableId.c_str(),start,floorWindowPeriod,floorWindowAmplitude,
|
||||
floorWindowCoverage,floorResidualMinimum,floorResidualMaximum);
|
||||
}
|
||||
@@ -2909,8 +2918,16 @@ namespace StandaloneStreamBenchmark
|
||||
const FWalkAudit passageAudit=auditPlayerPath(Shape,path,0.125,0.125,0.25,3,0.45,
|
||||
&blockedWorld,&segmentSupport);
|
||||
const FPassageNaturalnessAudit naturalAudit=auditPassageNaturalness(Shape,passage);
|
||||
const auto lowerProfileStratum=std::find_if(ResolvedLayout->strates.begin(),
|
||||
ResolvedLayout->strates.end(),[&](const auto& stratum)
|
||||
{return stratum.strateIndex==passage.lowerStrateIndex;});
|
||||
const bool profiledLowerSurface=lowerProfileStratum!=ResolvedLayout->strates.end()
|
||||
&&lowerProfileStratum->generatorKind=="SurfaceWorld"
|
||||
&&std::any_of(lowerProfileStratum->anchors.begin(),
|
||||
lowerProfileStratum->anchors.end(),[](const auto& anchor)
|
||||
{return anchor.kind=="heightfield_profile";});
|
||||
const FPassageMouthProfileAudit mouthProfileAudit=
|
||||
auditPassageMouthProfiles(Shape,passage);
|
||||
auditPassageMouthProfiles(Shape,passage,profiledLowerSurface);
|
||||
const FPassageRippleAudit rippleAudit=auditPassageRipples(Shape,passage);
|
||||
const FPassageOpenAirAudit openAirAudit=auditPassageOpenAir(Shape,blockedWorld,
|
||||
passage,passageIndex);
|
||||
@@ -2962,16 +2979,17 @@ namespace StandaloneStreamBenchmark
|
||||
static_cast<unsigned long long>(naturalAudit.wallSamples),
|
||||
static_cast<unsigned long long>(naturalAudit.missingWallSamples),
|
||||
naturalAudit.passed?"PASS":"FAIL");
|
||||
std::printf("[PassageMouthProfileAudit] id=%s floor_samples=%llu floor_missing=%llu wall_samples=%llu wall_missing=%llu floor_step_scan=centerline floor_flat_step_run_m=%.3f floor_step_m=%.3f wall_flat_step_run_m=%.3f wall_step_m=%.3f spacing_m=%.3f plateau=(%.3f,%.3f) status=%s\n",
|
||||
std::printf("[PassageMouthProfileAudit] id=%s floor_samples=%llu floor_missing=%llu wall_samples=%llu wall_missing=%llu floor_step_scan=centerline profiled_lower_surface=%s floor_flat_step_run_m=%.3f floor_step_m=%.3f wall_flat_step_run_m=%.3f wall_step_m=%.3f spacing_m=%.3f plateau=(%.3f,%.3f) status=%s\n",
|
||||
passage.stableId.c_str(),static_cast<unsigned long long>(mouthProfileAudit.floorSamples),
|
||||
static_cast<unsigned long long>(mouthProfileAudit.missingFloorSamples),
|
||||
static_cast<unsigned long long>(mouthProfileAudit.wallSamples),
|
||||
static_cast<unsigned long long>(mouthProfileAudit.missingWallSamples),
|
||||
profiledLowerSurface?"true":"false",
|
||||
mouthProfileAudit.floorFlatStepRunMetres,mouthProfileAudit.floorStepMetres,
|
||||
mouthProfileAudit.wallFlatStepRunMetres,mouthProfileAudit.wallStepMetres,
|
||||
PassageProfileSpacingMetres,PassageProfilePlateauMinimumMetres,
|
||||
PassageProfileStepThresholdMetres,mouthProfileAudit.passed?"PASS":"FAIL");
|
||||
std::printf("[PassageRippleAudit] id=%s window_m=32.000 spacing_m=0.125 period_m=%.3f amplitude_m=%.4f amplitude_cm=%.2f coherent_period_m=%.3f coherent_amplitude_m=%.4f coherent_amplitude_cm=%.2f local_peak_amplitude_m=%.4f coverage=%llu/%llu threshold_m=0.035 synthetic_spheres_period_m=1.500 synthetic_spheres_amplitude_m=%.4f synthetic_spheres_detected=%s floor_period_m=%.3f floor_amplitude_m=%.4f floor_amplitude_cm=%.2f floor_coherent_period_m=%.3f floor_coherent_amplitude_m=%.4f floor_coverage=%llu/%llu floor_threshold_m=0.015 floor_beaded_control_amplitude_m=%.4f floor_beaded_control_detected=%s status=%s\n",
|
||||
std::printf("[PassageRippleAudit] id=%s window_m=32.000 spacing_m=0.125 period_m=%.3f amplitude_m=%.4f amplitude_cm=%.2f coherent_period_m=%.3f coherent_amplitude_m=%.4f coherent_amplitude_cm=%.2f local_peak_amplitude_m=%.4f coverage=%llu/%llu threshold_m=0.035 synthetic_spheres_period_m=1.500 synthetic_spheres_amplitude_m=%.4f synthetic_spheres_detected=%s floor_period_m=%.3f floor_amplitude_m=%.4f floor_amplitude_cm=%.2f floor_coherent_period_m=%.3f floor_coherent_amplitude_m=%.4f floor_coverage=%llu/%llu floor_threshold_m=0.025 floor_beaded_control_amplitude_m=%.4f floor_beaded_control_detected=%s status=%s\n",
|
||||
passage.stableId.c_str(),rippleAudit.periodMetres,
|
||||
rippleAudit.amplitudeMetres,rippleAudit.amplitudeMetres*100.0,
|
||||
rippleAudit.coherentPeriodMetres,rippleAudit.coherentAmplitudeMetres,
|
||||
|
||||
Reference in new issue
Block a user