wip(assembler): round L29 -- strate transitions honoured at the bedrock/ceiling interface
EVoxelStrateTransition from the upper strate shapes the bedrock(N)/ceiling(N+1) interface in the shared composition layer: Hard flat; Gradient = smooth 2D hash surface (16 m owner width, about 4 m measured undulation); Interleaved = 3D domain-warped fingered overlap within the width. Each band keeps >= 2 Core voxels solid; faces return to the seam near passage mouths. Interface audit over 512 m: 0 hole columns for all modes; wider-than-declared and too-thin controls rejected. All passage, route, proof and validator audits pass; deterministic Clang = GCC. Evaluator 15. Cost +4% SW, +1.3% FI vs L28. Open: ring-like artifact on the FI floor capture; transition look unverified. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CSFYgsdW8ejZSyiMf4qRSX
This commit is contained in:
1 parent
f23ab7b9fa
commit
63c7e563d0
16 files changed
+794
-42
No files matched your search
@@ -1106,13 +1106,21 @@ bool AttachValidatedWorldAssembly(const UVoxelSettings* Settings,
|
||||
Item.transitionWidthMicrometres = static_cast<std::int64_t>(Item.transitionBlendChunks)
|
||||
* Item.managerChunkWidthMicrometres;
|
||||
Item.transitionWarpAmplitudeMicrometres = Item.transitionMode == "Interleaved"
|
||||
? 2 * Item.managerChunkWidthMicrometres : 0;
|
||||
Item.transitionInterpenetrationMicrometres = 0;
|
||||
Item.transitionHonouredInCore = Slot.Definition->TransitionType == EVoxelStrateTransition::Hard;
|
||||
Item.transitionFallsBackToHard = Slot.Definition->TransitionType != EVoxelStrateTransition::Hard;
|
||||
? std::min(Item.transitionWidthMicrometres / 2, Item.managerChunkWidthMicrometres) : 0;
|
||||
Item.transitionInterpenetrationMicrometres = Item.transitionMode == "Interleaved"
|
||||
? Item.transitionWidthMicrometres
|
||||
: Item.transitionMode == "Gradient" ? Item.transitionWidthMicrometres / 4 : 0;
|
||||
Item.transitionFallsBackToHard = Item.transitionMode != "Hard"
|
||||
&& Item.transitionWidthMicrometres <= 0;
|
||||
Item.transitionHonouredInCore = Item.transitionMode == "Hard"
|
||||
|| !Item.transitionFallsBackToHard;
|
||||
Item.transitionDispatchPath = Item.transitionFallsBackToHard
|
||||
? "declared Gradient/Interleaved recorded; Core uses an explicit Hard transition fallback with zero interpenetration"
|
||||
: "declared Hard transition is applied at this interface";
|
||||
? "declared zero-width transition uses an explicit Hard fallback"
|
||||
: Item.transitionMode == "Hard"
|
||||
? "declared Hard transition preserves the flat shared bedrock/ceiling interface"
|
||||
: Item.transitionMode == "Interleaved"
|
||||
? "shared composition overlaps both facing bands with deterministic domain-warped fingers inside the declared width"
|
||||
: "shared composition moves both band faces together with the smooth declared-width transition field";
|
||||
Item.managerLookup = "UVoxelStrateManager::GetGeneratorTypeForChunk; transition is controlled by upper strate";
|
||||
if (Type == ECaveGeneratorType::SurfaceWorld)
|
||||
{
|
||||
|
||||
@@ -201,15 +201,19 @@ enum class ECaveGeneratorType : uint8
|
||||
};
|
||||
|
||||
/**
|
||||
* EVoxelStrateTransition — How two adjacent strates blend at their shared boundary.
|
||||
* EVoxelStrateTransition — How two adjacent strates meet at their shared boundary.
|
||||
*
|
||||
* Each strate boundary can use a different transition style. The transition type
|
||||
* is defined on the UPPER strate's definition and controls the boundary between
|
||||
* itself and the strate below it.
|
||||
*
|
||||
* Gradient: Smooth linear interpolation of generation params across TransitionBlendChunks.
|
||||
* This is the classic approach — no seam visible, but also no dramatic
|
||||
* geological feature at the boundary. Best for similar-looking strates.
|
||||
* In the Core composition path, TransitionBlendChunks defines the full permitted
|
||||
* crossing depth between the upper bedrock and lower ceiling bands. Each band keeps
|
||||
* its authored thickness and the solid bands always overlap or touch. The legacy manager
|
||||
* may also blend generation parameters for Gradient; Core does not blend unrelated fields.
|
||||
*
|
||||
* Gradient: A low-amplitude smooth height field moves the shared interface and both
|
||||
* content-facing band surfaces. Best for gentle geological variation.
|
||||
*
|
||||
* Hard: No blending at all. The strate's params apply right up to the boundary,
|
||||
* then instantly switch to the neighbor's params. The abrupt change in
|
||||
@@ -217,26 +221,21 @@ enum class ECaveGeneratorType : uint8
|
||||
* discontinuity at the boundary. Best for strates that should feel like
|
||||
* distinct geological layers with a visible dividing line.
|
||||
*
|
||||
* Interleaved: The boundary position is warped by a 3D noise field, so "fingers"
|
||||
* of one strate reach into the other. Some XY columns transition early,
|
||||
* others late, creating an irregular, interlocking boundary. The warp
|
||||
* amplitude is ~2 chunks, and Z frequency is lower than XY to produce
|
||||
* horizontal finger-like intrusions. Best for strates that should feel
|
||||
* like they grew into each other over geological time.
|
||||
* Interleaved: A deterministic 3D domain-warped hash field sets the overlap depth per XY
|
||||
* column from zero to the declared width, creating irregular fingers.
|
||||
* Best for strates that should feel grown together.
|
||||
*/
|
||||
UENUM(BlueprintType)
|
||||
enum class EVoxelStrateTransition : uint8
|
||||
{
|
||||
// Smooth linear interpolation of all generation params across the blend zone.
|
||||
// No visible boundary — params change gradually over TransitionBlendChunks distance.
|
||||
// Smoothly undulates the shared bedrock/ceiling interface in the Core composition path.
|
||||
Gradient UMETA(DisplayName = "Gradient (smooth blend)"),
|
||||
|
||||
// No blending — params switch instantly at the boundary.
|
||||
// Creates natural cliffs, ledges, or material discontinuities.
|
||||
Hard UMETA(DisplayName = "Hard (sharp boundary with cliff)"),
|
||||
|
||||
// 3D noise warps the boundary position per XY column.
|
||||
// Creates finger-like intrusions of one strate into the other.
|
||||
// A 3D domain-warped hash field creates finger-like intrusions within the declared width.
|
||||
Interleaved UMETA(DisplayName = "Interleaved (domain-warped fingers)")
|
||||
};
|
||||
|
||||
|
||||
Reference in new issue
Block a user