wip(step3): 12.5 cm voxels, fall-through fixed, brick evaluator in game, organic tunnels -- speed gate FAILS
Stopped by the owner's decision (in-game lit captures were eating the round); he judges the look in game instead. 1. Fall-through with the research field: fixed. Deep drop, gate on: 2 holds (0.50 s), min foot clearance +43 cm; gate off: penetrates (-278 cm). Stress fixture offsets converted to metres. 2. VOXEL_SIZE 25 -> 12.5 cm. Physical sizes kept in metres (player, steps, gate, insets, research field sizes, dig radii, test thresholds); class defaults that count chunks/voxels doubled (ClipRadius 6, RenderDistanceChunks 1536, ViewDistance*, StrateViewMargin 6, PawnCollisionRadius 2, SkirtCells 4, EdgeSealThickness 128, decoration spacings, density volume res 256). Asset values override these defaults: the owner must double his own. Ring scale, six workers, idle, step-2f field before the look changes: 64 m cube (519^3) 4.55 s; 32 m cube (259^3) 0.95 s. 3. In game: tiles go through the brick evaluator (proved by a log marker); profile switch rebuilds the loaded world (~5,800 tiles); full-detail fill 12.4 s after spawn in the visible-window test. 4. Look: round winding tunnels, per-column ellipsoid/lattice caches. All step-2f geometry gates pass at 12.5 cm (0 crumbs, 1 solid component per profile, solid share 69-87%). 259^3 ring, six workers: 1.08-2.02 s (worst HyperComplex) -- the 600 ms gate FAILS. Lit captures failed (hidden/off-screen window, then blank frames); not pursued. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
This commit is contained in:
1 parent
ca78352e43
commit
bc0f9ee791
33 files changed
+2691
-803
No files matched your search
@@ -2192,11 +2192,14 @@ void UVoxelStrateManager::GeneratePassages()
|
||||
const FVector TunnelLowerDoorDirection = DoorDirection;
|
||||
Passage.LowerLanding.DoorDirection = TunnelLowerDoorDirection;
|
||||
const float UpperDoorOffset = FMath::Max(
|
||||
Passage.UpperLanding.HalfWidth - 1.0f, 0.0f);
|
||||
Passage.UpperLanding.HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f);
|
||||
const float LowerDoorOffset = FMath::Max(
|
||||
Passage.LowerLanding.HalfWidth - 1.0f, 0.0f);
|
||||
Passage.LowerLanding.HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f);
|
||||
const float SafeMouthRadius = FMath::Max(
|
||||
FMath::Abs(Cfg.MouthRadius), 1.0f);
|
||||
FMath::Abs(Cfg.MouthRadius),
|
||||
VoxelPassageGeometry::MetersToVoxels(0.25f));
|
||||
Passage.UpperLanding.DoorPoint =
|
||||
Passage.UpperLanding.StandingPoint + DoorDirection * UpperDoorOffset;
|
||||
Passage.UpperLanding.DoorPoint.Z =
|
||||
@@ -2602,7 +2605,8 @@ void UVoxelStrateManager::GeneratePassages()
|
||||
Entry.PassageType = EVoxelPassageType::VerticalShaft;
|
||||
// Match the reserved future shaft envelope exactly. The entry is only opened through
|
||||
// the top seal into the finite landing room; lower strate seals remain untouched.
|
||||
Entry.Radius = FMath::Max(OriginSpineRadius, 1.0f);
|
||||
Entry.Radius = FMath::Max(OriginSpineRadius,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.25f));
|
||||
Entry.UpperPoint = FVector(0.0f, 0.0f, TopZ + CHUNK_SIZE);
|
||||
// The capsule's lower tangent meets the room ceiling; it never bores through the
|
||||
// room's floor or creates an origin column in strate 0.
|
||||
@@ -3063,9 +3067,11 @@ static bool VF_IsPassageRoomFloor(
|
||||
return Position.Z <= Landing.FloorZ + KINDA_SMALL_NUMBER
|
||||
&& Position.Z > Landing.FloorZ - Landing.FloorThickness
|
||||
&& FMath::Abs(Position.X - Landing.StandingPoint.X)
|
||||
<= FMath::Max(Landing.HalfWidth - 1.0f, 0.0f)
|
||||
<= FMath::Max(Landing.HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f)
|
||||
&& FMath::Abs(Position.Y - Landing.StandingPoint.Y)
|
||||
<= FMath::Max(Landing.HalfWidth - 1.0f, 0.0f);
|
||||
<= FMath::Max(Landing.HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f);
|
||||
}
|
||||
|
||||
void UVoxelStrateManager::ApplyPassageStructuralPostsMC(
|
||||
@@ -3719,10 +3725,12 @@ namespace
|
||||
{
|
||||
continue;
|
||||
}
|
||||
constexpr float RoomRounding = 1.5f;
|
||||
constexpr float RoomRounding = VoxelPassageGeometry::RoomRoundingVoxels;
|
||||
const float Height = Landing->CeilingZ - Landing->FloorZ;
|
||||
const float HalfX = FMath::Max(Landing->HalfWidth - RoomRounding, 0.25f);
|
||||
const float HalfZ = FMath::Max(Height * 0.5f - RoomRounding, 0.25f);
|
||||
const float HalfX = FMath::Max(Landing->HalfWidth - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f));
|
||||
const float HalfZ = FMath::Max(Height * 0.5f - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f));
|
||||
const float CenterZ = (Landing->FloorZ + Landing->CeilingZ) * 0.5f;
|
||||
if (!AddDomain(
|
||||
FVector(Landing->StandingPoint.X - HalfX - RoomRounding,
|
||||
@@ -4068,15 +4076,18 @@ namespace
|
||||
return true;
|
||||
}
|
||||
|
||||
constexpr float RoomRounding = 1.5f;
|
||||
constexpr float RoomRounding = VoxelPassageGeometry::RoomRoundingVoxels;
|
||||
const float Height = Landing.CeilingZ - Landing.FloorZ;
|
||||
const FVector Center(
|
||||
Landing.StandingPoint.X, Landing.StandingPoint.Y,
|
||||
(Landing.FloorZ + Landing.CeilingZ) * 0.5f);
|
||||
const FVector HalfExtent(
|
||||
FMath::Max(Landing.HalfWidth - RoomRounding, 0.25f),
|
||||
FMath::Max(Landing.HalfWidth - RoomRounding, 0.25f),
|
||||
FMath::Max(Height * 0.5f - RoomRounding, 0.25f));
|
||||
FMath::Max(Landing.HalfWidth - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f)),
|
||||
FMath::Max(Landing.HalfWidth - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f)),
|
||||
FMath::Max(Height * 0.5f - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f)));
|
||||
const FVector OuterMin = Center - HalfExtent - FVector(RoomRounding);
|
||||
const FVector OuterMax = Center + HalfExtent + FVector(RoomRounding);
|
||||
const FVector BoxMin((float)Box.Min.X, (float)Box.Min.Y, (float)Box.Min.Z);
|
||||
@@ -5402,13 +5413,17 @@ bool UVoxelStrateManager::AnyPassageLandingNearLattice(
|
||||
&& Landing->FloorThickness > 0.0f
|
||||
&& VF_LatticeBoxTouchesAABB(
|
||||
VoxelBox, LatticeOrigin, Step,
|
||||
Landing->StandingPoint.X - FMath::Max(Landing->HalfWidth - 1.0f, 0.0f)
|
||||
Landing->StandingPoint.X - FMath::Max(Landing->HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f)
|
||||
- ReachScale,
|
||||
Landing->StandingPoint.X + FMath::Max(Landing->HalfWidth - 1.0f, 0.0f)
|
||||
Landing->StandingPoint.X + FMath::Max(Landing->HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f)
|
||||
+ ReachScale,
|
||||
Landing->StandingPoint.Y - FMath::Max(Landing->HalfWidth - 1.0f, 0.0f)
|
||||
Landing->StandingPoint.Y - FMath::Max(Landing->HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f)
|
||||
- ReachScale,
|
||||
Landing->StandingPoint.Y + FMath::Max(Landing->HalfWidth - 1.0f, 0.0f)
|
||||
Landing->StandingPoint.Y + FMath::Max(Landing->HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f)
|
||||
+ ReachScale,
|
||||
Landing->FloorZ - Landing->FloorThickness - ReachScale,
|
||||
Landing->FloorZ + ReachScale))
|
||||
@@ -5444,10 +5459,12 @@ bool UVoxelStrateManager::AnyPassageLandingNearLattice(
|
||||
{
|
||||
continue;
|
||||
}
|
||||
constexpr float RoomRounding = 1.5f;
|
||||
constexpr float RoomRounding = VoxelPassageGeometry::RoomRoundingVoxels;
|
||||
const float Height = Landing->CeilingZ - Landing->FloorZ;
|
||||
const float HalfX = FMath::Max(Landing->HalfWidth - RoomRounding, 0.25f);
|
||||
const float HalfZ = FMath::Max(Height * 0.5f - RoomRounding, 0.25f);
|
||||
const float HalfX = FMath::Max(Landing->HalfWidth - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f));
|
||||
const float HalfZ = FMath::Max(Height * 0.5f - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f));
|
||||
const float CenterZ = (Landing->FloorZ + Landing->CeilingZ) * 0.5f;
|
||||
if (VF_LatticeBoxTouchesAABB(
|
||||
VoxelBox, LatticeOrigin, Step,
|
||||
@@ -5651,10 +5668,12 @@ bool UVoxelStrateManager::AnyPassageCarvingNearLattice(
|
||||
{
|
||||
continue;
|
||||
}
|
||||
constexpr float RoomRounding = 1.5f;
|
||||
constexpr float RoomRounding = VoxelPassageGeometry::RoomRoundingVoxels;
|
||||
const float Height = Landing->CeilingZ - Landing->FloorZ;
|
||||
const float HalfX = FMath::Max(Landing->HalfWidth - RoomRounding, 0.25f);
|
||||
const float HalfZ = FMath::Max(Height * 0.5f - RoomRounding, 0.25f);
|
||||
const float HalfX = FMath::Max(Landing->HalfWidth - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f));
|
||||
const float HalfZ = FMath::Max(Height * 0.5f - RoomRounding,
|
||||
VoxelPassageGeometry::MetersToVoxels(0.0625f));
|
||||
const float CenterZ = (Landing->FloorZ + Landing->CeilingZ) * 0.5f;
|
||||
if (VF_LatticeBoxTouchesAABB(
|
||||
VoxelBox, LatticeOrigin, Step,
|
||||
@@ -5773,7 +5792,8 @@ bool UVoxelStrateManager::AnyLandingFloorAtLattice(
|
||||
// structural writer, not evidence that the writer is absent.
|
||||
return true;
|
||||
}
|
||||
const float HalfWidth = FMath::Max(Landing.HalfWidth - 1.0f, 0.0f);
|
||||
const float HalfWidth = FMath::Max(Landing.HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f);
|
||||
int32 IX0 = 0, IX1 = -1, IY0 = 0, IY1 = -1, IZ0 = 0, IZ1 = -1;
|
||||
return VF_LatticeAxisRange(
|
||||
FMath::Max((float)VoxelBox.Min.X,
|
||||
@@ -5899,7 +5919,8 @@ bool UVoxelStrateManager::AnyLandingFloorAtLattice(
|
||||
{
|
||||
continue;
|
||||
}
|
||||
const float HalfWidth = FMath::Max(Geometry.HalfWidth - 1.0f, 0.0f);
|
||||
const float HalfWidth = FMath::Max(Geometry.HalfWidth
|
||||
- VoxelPassageGeometry::MetersToVoxels(0.25f), 0.0f);
|
||||
int32 IX0 = 0, IX1 = -1, IY0 = 0, IY1 = -1, IZ0 = 0, IZ1 = -1;
|
||||
if (VF_LatticeAxisRange(
|
||||
FMath::Max((float)VoxelBox.Min.X, -HalfWidth - 0.0f),
|
||||
|
||||
Reference in new issue
Block a user