fix(classifier): exact lattice check before a uniform verdict; ceiling cause is NOT false certificates

ParameterRoll's 5 false box verdicts are fixed: fine room-graph intervals are now checked against exact lattice samples before a uniform verdict is accepted, while the SDF bound keeps its conservative lower bound. Lattice sweep 600 tiles / 0 violations; ParameterRoll passes with 9,577 exact lattice leaves and 774 interval disagreements caught.

The owner's ceiling holes are NOT explained by this: in his recorded session outer_classifier_mode=0, solid-proof skips were 0, and air-proof skips were outside the strate. The trace points at the far-field sheet system instead: sheet tile L5 (0,1,0) is deliberately empty inside the sheet hole while its bridge tile L4 (0,1,-1) meshed 662 ceiling triangles. Continuous ceiling is NOT verified: every render launch failed (D3D12 driver error, stalls before map load, the 6 GB cap), so the round produced no matched after-render.

Cost note: this round used 3.46M tokens on Luna 6 at max, most of it burned on failed render launches. Verification by render is unreliable in this harness; verify ceiling continuity from tile/geometry data instead.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
Fr0zkaandClaude Opus 5 committed 2026-09-23 06:30:05 +02:00
1 parent 30253f0e89
commit ea3f0d9a52
7 files changed
+410 -18

No files matched your search

+94 -2
View File
@@ -39,6 +39,8 @@
#include "Materials/MaterialParameterCollection.h"
#include "Kismet/KismetMaterialLibrary.h"
#include "Engine/VolumeTexture.h"
#include "Engine/Engine.h"
#include "Camera/CameraActor.h"
#include "VoxelAtmosphereManager.h"
#include "DrawDebugHelpers.h"
#include "IImageWrapper.h"
@@ -1533,6 +1535,55 @@ void AVoxelWorld::BeginPlay()
return;
}
int32 TestRenderDistanceChunks = 0;
if (FParse::Value(FCommandLine::Get(), TEXT("voxel.TestRenderDistanceChunks="),
TestRenderDistanceChunks)
&& TestRenderDistanceChunks > 0)
{
if (UVoxelSettings* TestSettings = DuplicateObject<UVoxelSettings>(Settings, this))
{
const int32 AuthoredRenderDistance = Settings->RenderDistanceChunks;
TestSettings->RenderDistanceChunks = TestRenderDistanceChunks;
Settings = TestSettings;
UE_LOG(LogTemp, Display,
TEXT("[VoxelForgeTestCeiling] transient_render_distance_chunks=%d authored=%d"),
TestRenderDistanceChunks, AuthoredRenderDistance);
}
}
int32 TestCeilingView = 0;
FParse::Value(FCommandLine::Get(), TEXT("voxel.TestCeilingView="), TestCeilingView);
bTestCeilingViewEnabled = TestCeilingView != 0;
if (bTestCeilingViewEnabled)
{
TestCeilingCameraWorldPosition = FVector(10583.003176, 20477.525456, -38442.958976);
TestCeilingCameraRotation = FRotator(78.399901, 255.200004, 0.0);
FParse::Value(FCommandLine::Get(), TEXT("voxel.TestCeilingCameraX="),
TestCeilingCameraWorldPosition.X);
FParse::Value(FCommandLine::Get(), TEXT("voxel.TestCeilingCameraY="),
TestCeilingCameraWorldPosition.Y);
FParse::Value(FCommandLine::Get(), TEXT("voxel.TestCeilingCameraZ="),
TestCeilingCameraWorldPosition.Z);
FParse::Value(FCommandLine::Get(), TEXT("voxel.TestCeilingCameraPitch="),
TestCeilingCameraRotation.Pitch);
FParse::Value(FCommandLine::Get(), TEXT("voxel.TestCeilingCameraYaw="),
TestCeilingCameraRotation.Yaw);
FParse::Value(FCommandLine::Get(), TEXT("voxel.TestCeilingCaptureDelaySeconds="),
TestCeilingCaptureDelaySeconds);
TestCeilingCaptureDelaySeconds = FMath::Max(TestCeilingCaptureDelaySeconds, 1.0f);
TestCeilingViewBeginSeconds = FPlatformTime::Seconds();
bHeadlessStreamingTestCenterOverride = true;
HeadlessStreamingTestCenterVoxel = WorldToLocalVoxel(TestCeilingCameraWorldPosition);
UE_LOG(LogTemp, Display,
TEXT("[VoxelForgeTestCeiling] camera_world_cm=(%.3f,%.3f,%.3f) "
"camera_rotation=(%.3f,%.3f,%.3f) center_vox=(%.3f,%.3f,%.3f) capture_delay_s=%.1f"),
TestCeilingCameraWorldPosition.X, TestCeilingCameraWorldPosition.Y,
TestCeilingCameraWorldPosition.Z, TestCeilingCameraRotation.Pitch,
TestCeilingCameraRotation.Yaw, TestCeilingCameraRotation.Roll,
HeadlessStreamingTestCenterVoxel.X, HeadlessStreamingTestCenterVoxel.Y,
HeadlessStreamingTestCenterVoxel.Z, TestCeilingCaptureDelaySeconds);
}
// The owner's current DA_Settings is intentionally a one-strate surface layout, so it cannot
// exercise the separate inter-strate traversal regression. The explicit headless crossing
// switch uses a transient copy of the authored four-definition corpus; no package is modified
@@ -3667,6 +3718,45 @@ void AVoxelWorld::Tick(float DeltaTime)
ProcessUnloadQueue();
MaybeFinishHeadlessStreamingTest();
if (bTestCeilingViewEnabled)
{
UWorld* World = GetWorld();
APlayerController* PC = World ? World->GetFirstPlayerController() : nullptr;
if (PC && !TestCeilingCamera.IsValid())
{
FActorSpawnParameters SpawnParams;
SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
ACameraActor* Camera = World->SpawnActor<ACameraActor>(
ACameraActor::StaticClass(), TestCeilingCameraWorldPosition,
TestCeilingCameraRotation, SpawnParams);
if (IsValid(Camera))
{
TestCeilingCamera = Camera;
PC->SetViewTarget(Camera);
UE_LOG(LogTemp, Display,
TEXT("[VoxelForgeTestCeiling] camera_installed=1 applied_visible_tiles=%llu"),
static_cast<unsigned long long>(AppliedVisibleTileCount));
}
}
if (TestCeilingCamera.IsValid() && !bTestCeilingCaptureRequested
&& AppliedVisibleTileCount >= 16
&& FPlatformTime::Seconds() - TestCeilingViewBeginSeconds
>= static_cast<double>(TestCeilingCaptureDelaySeconds))
{
bTestCeilingCaptureRequested = true;
const bool bExecSucceeded = GEngine
&& GEngine->Exec(World, TEXT("HighResShot 1"));
UE_LOG(LogTemp, Display,
TEXT("[VoxelForgeTestCeiling] capture_requested=%d elapsed_s=%.3f "
"visible_tiles=%llu triangles=%llu"),
bExecSucceeded ? 1 : 0,
FPlatformTime::Seconds() - TestCeilingViewBeginSeconds,
static_cast<unsigned long long>(AppliedVisibleTileCount),
static_cast<unsigned long long>(AppliedTriangleCount));
}
}
#if ENABLE_DRAW_DEBUG
// Density-volume overlay (step 1a): cyan boxes for solid level-0 cells near the player.
if (DensityVolume) { DensityVolume->DebugDraw(); }
@@ -6068,7 +6158,7 @@ void AVoxelWorld::GenerateTileResult(const FVoxelTileKey& Tile, const FIntVector
/ static_cast<double>(WormEligibleSamples)
: 0.0;
UE_LOG(LogTemp, Display,
TEXT("[VoxelForgeTileProfile] tile=(%d,%d,%d) level=%d step=%d cells=%d sheet=%d aborted=%d empty=%d triangles=%d "
TEXT("[VoxelForgeTileProfile] tile=(%d,%d,%d) level=%d step=%d cells=%d sheet=%d aborted=%d empty=%d triangles=%d ceiling_triangles=%d "
"band=(%d,%d) "
"verdict=%d proof=%d air_proof=%d classify=%.6f mesh=%.6f streams=%.6f seconds=%.6f "
"cache_build=%.6f evaluation=%.6f "
@@ -6089,7 +6179,8 @@ void AVoxelWorld::GenerateTileResult(const FVoxelTileKey& Tile, const FIntVector
"worm_skip_rate=%.6f"),
Tile.Coord.X, Tile.Coord.Y, Tile.Coord.Z, Tile.Level, Step, Cells,
bSheetTile ? 1 : 0, Result.bAborted ? 1 : 0,
Result.bEmpty ? 1 : 0, Result.NumTriangles, BandChunkLo, BandChunkHi,
Result.bEmpty ? 1 : 0, Result.NumTriangles, Result.NumCeilingTriangles,
BandChunkLo, BandChunkHi,
ClassifyVerdict, Result.bSealedSolidProof ? 1 : 0,
Result.bOutOfLayoutAirProof ? 1 : 0,
ClassifySeconds, MeshSeconds, StreamSeconds,
@@ -6428,6 +6519,7 @@ void AVoxelWorld::GenerateTileResult(const FVoxelTileKey& Tile, const FIntVector
// AND cap in one tile — entirely with the winner's material.)
const int32 NumTris = MeshData.Triangles.Num() / 3;
Result.NumTriangles = NumTris;
Result.NumCeilingTriangles = MeshData.NumCeilingTriangles;
Result.bHasCeilingTris = MeshData.NumCeilingTriangles > 0;
Result.bHasGroundTris = NumTris > MeshData.NumCeilingTriangles;
}