diag: passage vs boundary-band ceiling split (L88); coarse passage cache rejected

Verified ablations (zero passage work / zero band calls). LOD0-2 @W12: exact FI 2.27 / TN 2.25 s;
passages off FI 0.81 / TN 0.85; bands off FI 2.11 / TN 2.06. Passages cost ~1.4-1.6 s of near
readiness, bands ~0.1-0.2 s. A tile-local 4-voxel trilinear passage-delta cache increased carve
segment visits (FI 34.5M -> 56.2M) and slowed LOD0-2 (FI 2.58 -> 3.77 s); removed. No world change.

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 03:37:24 +01:00
1 parent 0fe7f371f7
commit fa78192c86
5 files changed
+287 -17

No files matched your search

@@ -138,6 +138,7 @@ namespace VoxelForgeCore
std::uint64_t passageTileFeatureCount = 0;
std::uint64_t passageTileRouteSegmentCandidates = 0;
std::uint64_t passageTileMouthSegmentCandidates = 0;
std::uint64_t resolvedBoundaryBandQueries = 0;
std::uint64_t passageComposerQueries = 0;
std::uint64_t passageIterations = 0;
std::uint64_t passageTileBoundChecks = 0;
+51 -16
View File
@@ -31,19 +31,37 @@
#include <variant>
#include <vector>
// L86-only ceiling measurement. This removes passage carving/support and the transition-mouth
// passage fade so timing can measure the best possible passage-representation gain. Never ship
// or expose this diagnostic as a world setting.
static bool VF_IsL86PassageCompositionDisabled()
// L88-only composition split. These switches let the timing harness remove passage work and
// resolved boundary-band work independently. They are diagnostic only, never world settings.
static bool VF_IsL88DiagnosticSwitchEnabled(const char* Name)
{
static const bool bDisabled = []()
{
const char* Value = std::getenv("VOXELFORGE_L86_DISABLE_PASSAGE_COMPOSITION");
return Value && Value[0] == '1' && Value[1] == '\0';
}();
const char* Value=std::getenv(Name);
return Value&&Value[0]=='1'&&Value[1]=='\0';
}
static bool VF_IsL88PassageCompositionDisabled()
{
static const bool bDisabled=VF_IsL88DiagnosticSwitchEnabled(
"VOXELFORGE_L88_DISABLE_PASSAGES")
||VF_IsL88DiagnosticSwitchEnabled("VOXELFORGE_L86_DISABLE_PASSAGE_COMPOSITION");
return bDisabled;
}
static bool VF_IsL88BoundaryBandsDisabled()
{
static const bool bDisabled=VF_IsL88DiagnosticSwitchEnabled(
"VOXELFORGE_L88_DISABLE_BOUNDARY_BANDS")
||VF_IsL88DiagnosticSwitchEnabled("VOXELFORGE_L86_DISABLE_PASSAGE_COMPOSITION");
return bDisabled;
}
static bool VF_IsL88AllowPassageAblationWalkabilityFailure()
{
static const bool bEnabled=VF_IsL88DiagnosticSwitchEnabled(
"VOXELFORGE_L88_ALLOW_PASSAGE_ABLATION_WALKABILITY_FAILURE");
return bEnabled;
}
// Standalone-only world compiler. It compiles the runtime room/tunnel/passages into
// axis-line intervals, composes rock/cave signs into packed Z-column words, then displaces
// only the conservative surface band. The copied Unreal generator remains the A/B reference.
@@ -197,7 +215,6 @@ public:
std::ptrdiff_t first=-1,end=-1;
std::vector<std::uint8_t> activeNodes;
};
FScopedPassageTileQueries(const FStandaloneShapeWorld& shape,
const std::array<std::int64_t,3>& minimumSubvoxels,
const std::array<std::int64_t,3>& maximumSubvoxels,
@@ -208,7 +225,9 @@ public:
{
mayContainResolvedBoundaryBand_=shape.ResolvedBoundaryBandsIntersectSubvoxelRange(
minimumSubvoxels_[2],maximumSubvoxels_[2]);
const bool disablePassageComposition = VF_IsL86PassageCompositionDisabled();
const bool disablePassageComposition=VF_IsL88PassageCompositionDisabled();
const bool disableBoundaryBands=VF_IsL88BoundaryBandsDisabled();
if(disableBoundaryBands)mayContainResolvedBoundaryBand_=false;
mayContainTransitionPassageFade_ = !disablePassageComposition
&& shape.ResolvedTransitionPassageFadeIntersectsTileXY(
minimumSubvoxels_, maximumSubvoxels_);
@@ -930,6 +949,9 @@ public:
#endif
(void)X;(void)Y;
const auto* tileQueries=ActivePassageTileQueries;
if(tileQueries&&tileQueries->matches(*this))
if(auto* profile=tileQueries->profileStats())
++profile->resolvedBoundaryBandQueries;
if(tileQueries&&tileQueries->matches(*this))
{
if(!tileQueries->mayContainResolvedBoundaryBand())
@@ -2256,9 +2278,11 @@ public:
// mouth that crosses a wide transition band. Keep that opt-in field whole;
// its host-rock value already supplies the ceiling and bedrock.
const bool disablePassageComposition=!nativeLattice
&&VF_IsL86PassageCompositionDisabled();
&&VF_IsL88PassageCompositionDisabled();
const bool disableBoundaryBands=!nativeLattice
&&VF_IsL88BoundaryBandsDisabled();
float boundary=graphDensity;
if(!nativeLattice&&!disablePassageComposition)
if(!nativeLattice&&!disableBoundaryBands)
{
VoxelForgeCore::Linux77Profiler::FScopedPhase l77BandsPhase(
VoxelForgeCore::Linux77Profiler::EPhase::Bands);
@@ -3019,10 +3043,21 @@ public:
// Route validation is world-wide. Detail regions reuse the same authored route data and
// do not need to repeat the 5,642-point world audit for every entering tile group.
Substage=Clock::now();
if(bValidatePassageRoutes&&!ValidatePassageRoutes())
const bool bPassageRoutesValid=!bValidatePassageRoutes||ValidatePassageRoutes();
if(!bPassageRoutesValid)
{
Error="compiled shape world contains a solid passage centreline sample";
return false;
if(VF_IsL88PassageCompositionDisabled()
&&!VF_IsL88BoundaryBandsDisabled()
&&VF_IsL88AllowPassageAblationWalkabilityFailure())
{
std::printf("[L88PassageAblation] route walkability failed as expected; "
"continuing only to measure passage-off/bands-on readiness\n");
}
else
{
Error="compiled shape world contains a solid passage centreline sample";
return false;
}
}
Stats.PassageValidationSeconds=std::chrono::duration<double>(Clock::now()-Substage).count();
Built=true;