feat(gen): Jahni's playtest corrections -- rooms flattened, roads deleted

From walking a TunnelNetwork preset at (0,0). Four corrections, and two of
them were the same mistake.

2a. The (0,0) landing room is sized to host a FUTURE straight vertical
    shaft from the surface, with flooring around the origin itself. The
    room is the landing for a shaft the player digs later.
2b. The inter-strate descent no longer starts at the spine -- placed by
    deterministic hash within a radius around (0,0). The spine room is for
    the surface shaft; the descent is elsewhere.
2c. ⛔ DELETED the landing->hub connector roads from 413c15d. Jahni:
    "its straight up making other tunnels straightly through everything...
    they have nothing to do here." Zero references remain.
2d. ⭐ FLATTEN THE ROOM JOINS instead. Where two spherical rooms intersect
    and leave a lip above head height, the join is brought down to a
    walkable level.

⭐ 2c AND 2d ARE ONE CORRECTION. I solved "rooms do not connect" by
TUNNELLING BETWEEN THEM when the answer was MAKING THEIR FLOORS MEET. The
81-run sweep had already said so -- zero narrow-gap events, every failure a
vertical severance, renders showing "a sharp diagonal ledge descending into
black open space". A radial corridor to the origin could never have fixed
that; flattening the joins is aimed at exactly it.

2e. Descent tunnel 1.5x wider, per "1.5x bigger wouldn't be too much".
2f. Corridors WANDER. Jahni, from the renders: "its not a maze, its still a
    latice made straight paths." The spanning tree changed WHICH edges
    exist, not what an edge looks like -- every corridor was a straight
    axis-aligned capsule, every junction 90 degrees. Now hash-jittered
    chains, seam-safe like the tree.

RENDERER: 192x128 -> 512x288, and cameras are now seeded from the
player-fit set -- "a density-checked pose from the exact player-fit walk
mask". Previously they sat INSIDE ROCK looking at back-faces, which Jahni
spotted instantly and no metric could. First genuinely legible pictures of
this world.

ParallelFor landed at 6 sites in VoxelStrateMeasure before I stopped the
run; the rest of that work continues next.

⚠️ AND THE RENDERER IS ARCHITECTURALLY WRONG, per Jahni: "why, in engine,
does it take a minute to have clear view of thousands of angles, but in our
renderer it takes ages?" Because the engine MESHES ONCE and rasterises --
~32k density calls per chunk, then every angle is free. I RAYMARCH: tens of
millions of density calls PER IMAGE, nothing reused between frames. We
already have the mesher and an export mode. Next task renders from the
mesh.

Also from him: runs must stay under 30 minutes. This one hit 33 and
produced 2 images.

Build clean. Committed as a checkpoint -- the task was stopped mid-Part-3,
not finished.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aheo2crrZmHuYtPpdY2Cb
This commit is contained in:
Fr0zkaandClaude Opus 5 committed 2026-09-08 14:14:29 +02:00
1 parent 55bf807f60
commit d97373c5a8
18 files changed
+2433 -1021

No files matched your search

@@ -492,7 +492,6 @@ bool FVoxelForgePassageLandsInOpenSpaceTest::RunTest(const FString& Parameters)
int32 NumLandingEnds = 0;
int32 NumLandingFloorsPassed = 0;
int32 NumLandingFloorFailures = 0;
int32 NumLandingNetworkJoins = 0;
int32 NumLandingSealFailures = 0;
int32 NumLandingFloorBoxes = 0;
int32 NumLandingBoxProofs = 0;
@@ -500,17 +499,12 @@ bool FVoxelForgePassageLandsInOpenSpaceTest::RunTest(const FString& Parameters)
int32 NumLandingBoxAllAir = 0;
int32 NumLandingBoxViolations = 0;
int32 NumLandingSourceFit = 0;
int32 NumLandingConnectorSlopesPassed = 0;
int32 NumLandingConnectorSlopeFailures = 0;
float WorstLandingFloorGradient = 0.0f;
float WorstLandingConnectorGradient = 0.0f;
FString FirstLandingFailure;
FString LandingSlopeReport;
FWalkableTunnelAudit TunnelAudit;
constexpr float LandingWalkableAngleDegrees =
VoxelPassageGeometry::WalkableTunnelMaxGradientDegrees;
constexpr float LandingWalkableSlope =
VoxelPassageGeometry::WalkableTunnelMaxGradient;
for (const FVoxelPassage& Passage : Passages)
{
@@ -985,65 +979,10 @@ bool FVoxelForgePassageLandsInOpenSpaceTest::RunTest(const FString& Parameters)
FMath::DegreesToRadians(LandingWalkableAngleDegrees));
}
float ConnectorGradient = -1.0f;
bool bConnectorSlopePassed = false;
if (Landing.bHasNetworkConnector
&& FMath::IsFinite(Landing.ConnectorStart.X)
&& FMath::IsFinite(Landing.ConnectorStart.Y)
&& FMath::IsFinite(Landing.ConnectorEnd.X)
&& FMath::IsFinite(Landing.ConnectorEnd.Y)
&& (!Landing.bHasConnectorBend
|| (FMath::IsFinite(Landing.ConnectorControl.X)
&& FMath::IsFinite(Landing.ConnectorControl.Y)))
&& FMath::IsFinite(Landing.RootFloorZ)
&& FMath::IsFinite(Landing.FloorZ))
{
const FVector2D ConnectorStart(
Landing.ConnectorStart.X, Landing.ConnectorStart.Y);
const FVector2D ConnectorEnd(
Landing.ConnectorEnd.X, Landing.ConnectorEnd.Y);
const float DirectLength = (ConnectorEnd - ConnectorStart).Size();
if (Landing.bHasConnectorBend)
{
const FVector2D ConnectorControl(
Landing.ConnectorControl.X, Landing.ConnectorControl.Y);
const float FinalLegLength = (ConnectorEnd - ConnectorControl).Size();
const float RampLength = FMath::Max(
FinalLegLength - (Landing.RootSpineRadius > 0.0f
? VoxelPassageGeometry::RootOverlapVoxels : 0.0f),
KINDA_SMALL_NUMBER);
ConnectorGradient = FMath::Abs(
Landing.RootFloorZ - Landing.FloorZ) / RampLength;
}
else
{
const float RampLength = FMath::Max(
DirectLength - FMath::Max(Landing.HalfWidth - 1.0f, 0.0f)
- (Landing.RootSpineRadius > 0.0f
? VoxelPassageGeometry::RootOverlapVoxels : 0.0f),
KINDA_SMALL_NUMBER);
ConnectorGradient = FMath::Abs(
Landing.RootFloorZ - Landing.FloorZ) / RampLength;
}
bConnectorSlopePassed = FMath::IsFinite(ConnectorGradient)
&& ConnectorGradient <= LandingWalkableSlope + KINDA_SMALL_NUMBER;
}
if (bConnectorSlopePassed)
{
++NumLandingConnectorSlopesPassed;
WorstLandingConnectorGradient = FMath::Max(
WorstLandingConnectorGradient, ConnectorGradient);
}
else
{
++NumLandingConnectorSlopeFailures;
RecordFailure(FString::Printf(
TEXT("landing at strate %d has connector slope %.6f above the %.6f walkable limit"),
StrateIndex, ConnectorGradient, LandingWalkableSlope));
}
const bool bLandingSlopePassed = bFloorPassed && bConnectorSlopePassed;
// Landing rooms are intentionally local now. Their flat floors are the only landing
// contract; the removed radial root connectors were the source of the straight roads
// through unrelated rooms.
const bool bLandingSlopePassed = bFloorPassed;
if (bLandingSlopePassed)
{
++NumLandingFloorsPassed;
@@ -1076,16 +1015,6 @@ bool FVoxelForgePassageLandsInOpenSpaceTest::RunTest(const FString& Parameters)
{
++NumLandingSourceFit;
}
if (Landing.bHasNetworkConnector)
{
++NumLandingNetworkJoins;
}
else
{
RecordFailure(FString::Printf(
TEXT("landing at strate %d has neither a source fit nor a deterministic network connector"),
StrateIndex));
}
// Exercise the same box shortcut that can otherwise erase a support slab. A uniform
// verdict is allowed only if every exact ClassifyTile lattice sample agrees with the
@@ -1146,15 +1075,12 @@ bool FVoxelForgePassageLandsInOpenSpaceTest::RunTest(const FString& Parameters)
const FString LandingArchetype = ArchetypeName(Definition->GeneratorType);
LandingSlopeReport += FString::Printf(
TEXT("%s[%d:%s]=floor:%s(%.6f),connector:%s(%.6f)%s "),
TEXT("%s[%d:%s]=flat-floor:%s(%.6f) "),
*LandingArchetype,
StrateIndex,
EndIndex == 0 ? TEXT("upper") : TEXT("lower"),
bFloorPassed ? TEXT("PASS") : TEXT("FAIL"),
LandingGradient,
bConnectorSlopePassed ? TEXT("PASS") : TEXT("FAIL"),
ConnectorGradient,
Landing.bHasConnectorBend ? TEXT("[bend]") : TEXT(""));
LandingGradient);
}
}
@@ -1237,18 +1163,12 @@ bool FVoxelForgePassageLandsInOpenSpaceTest::RunTest(const FString& Parameters)
NumUnsupported,
NumSupportedWithoutPoint));
AddInfo(FString::Printf(
TEXT("Landing geometry: %d/%d ends passed the final-density floor test (worst room gradient %.6f), connector slopes %d/%d (worst %.6f; walkable limit %.6f), source-fit anchors %d/%d, explicit root-network joins %d/%d, seal violations %d, geometry/floor failures %d."),
TEXT("Landing geometry: %d/%d ends passed the final-density flat-floor test (worst gradient %.6f), source-fit anchors %d/%d, seal violations %d, geometry/floor failures %d."),
NumLandingFloorsPassed,
NumLandingEnds,
WorstLandingFloorGradient,
NumLandingConnectorSlopesPassed,
NumLandingEnds,
WorstLandingConnectorGradient,
LandingWalkableSlope,
NumLandingSourceFit,
NumLandingEnds,
NumLandingNetworkJoins,
NumLandingEnds,
NumLandingSealFailures,
NumLandingFloorFailures));
if (!LandingSlopeReport.IsEmpty())
@@ -1372,9 +1292,6 @@ bool FVoxelForgePassageLandsInOpenSpaceTest::RunTest(const FString& Parameters)
return NumInterStratePassages > 0
&& NumLandingEnds == NumInterStratePassages * 2
&& NumLandingFloorsPassed == NumLandingEnds
&& NumLandingConnectorSlopesPassed == NumLandingEnds
&& NumLandingConnectorSlopeFailures == 0
&& NumLandingNetworkJoins == NumLandingEnds
&& NumLandingSealFailures == 0
&& NumLandingFloorFailures == 0
&& NumLandingBoxViolations == 0