proto: liminal looks - pool rooms, backrooms grid, staircase to nowhere, terraced hills (L161)
Stamp vocabulary v7 (opt-in fillBox, carveBox, fillSteps; carveArch reused); flat-field liminal stamp fixtures; capsule walk audit with doorway-width gate (1.2 m control fails as expected). Clang/GCC W1/W8/W12 identical; owner canonical hashes unchanged; fast tier 273/273. Terraced wide view not yet legible. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016dhxM43dnWvUu2B5Ph1iG1
This commit is contained in:
1 parent
4290672d1c
commit
ff52c9b576
17 files changed
+861
-12
No files matched your search
@@ -7157,6 +7157,23 @@ private:
|
||||
const float top=std::max(StampEllipsoidSdf(x,y,z,halfSize),-z);
|
||||
return SmoothMinDistance(lower,top,round*2.0f);
|
||||
}
|
||||
static float StampStepsSdf(float x,float y,float z,
|
||||
const std::array<float,3>& halfSize,std::uint16_t stepCount)
|
||||
{
|
||||
if(stepCount<2||stepCount>128)return std::numeric_limits<float>::infinity();
|
||||
const float treadWidth=(2.0f*halfSize[0])/stepCount;
|
||||
const float riserHeight=(2.0f*halfSize[2])/stepCount;
|
||||
float distance=std::numeric_limits<float>::infinity();
|
||||
for(std::uint16_t step=0;step<stepCount;++step)
|
||||
{
|
||||
const float stepHeight=(step+1)*riserHeight;
|
||||
const float centerX=-halfSize[0]+(step+0.5f)*treadWidth;
|
||||
const float centerZ=-halfSize[2]+stepHeight*0.5f;
|
||||
const std::array<float,3> extent={treadWidth*0.5f,halfSize[1],stepHeight*0.5f};
|
||||
distance=std::min(distance,StampRoundedBoxSdf(x-centerX,y,z-centerZ,extent,0.0f));
|
||||
}
|
||||
return distance;
|
||||
}
|
||||
static float StampContinuousSweptDeckSdf(const FStampRuntime& stamp,
|
||||
float x,float y,float z)
|
||||
{
|
||||
@@ -7295,6 +7312,13 @@ private:
|
||||
case VoxelForgeCore::ResolvedSdfStampKindV1::fillPlatform:
|
||||
distance=StampRoundedBoxSdf(localX,localY,localZ,
|
||||
stamp.halfExtentsVoxels,stamp.roundingRadiusVoxels);break;
|
||||
case VoxelForgeCore::ResolvedSdfStampKindV1::fillBox:
|
||||
case VoxelForgeCore::ResolvedSdfStampKindV1::carveBox:
|
||||
distance=StampRoundedBoxSdf(localX,localY,localZ,
|
||||
stamp.halfExtentsVoxels,stamp.roundingRadiusVoxels);break;
|
||||
case VoxelForgeCore::ResolvedSdfStampKindV1::fillSteps:
|
||||
distance=StampStepsSdf(localX,localY,localZ,stamp.halfExtentsVoxels,
|
||||
stamp.record->stepCount);break;
|
||||
case VoxelForgeCore::ResolvedSdfStampKindV1::fillDais:
|
||||
if(ResolvedLayout&&ResolvedLayout->stampVocabularyVersion
|
||||
>=VoxelForgeCore::ResolvedLayoutStampVocabularyVersionV2)
|
||||
@@ -7471,7 +7495,8 @@ private:
|
||||
||worldMicrometres[axis]>record.boundsMaximumMicrometres[axis])return;
|
||||
const float distance=StampSdf(runtime,X,Y,Z);
|
||||
if(record.kind==VoxelForgeCore::ResolvedSdfStampKindV1::carveEllipsoid
|
||||
||record.kind==VoxelForgeCore::ResolvedSdfStampKindV1::carveArch)
|
||||
||record.kind==VoxelForgeCore::ResolvedSdfStampKindV1::carveArch
|
||||
||record.kind==VoxelForgeCore::ResolvedSdfStampKindV1::carveBox)
|
||||
composed=SmoothMaxDistance(composed,-distance,runtime.smoothWidthVoxels);
|
||||
else
|
||||
composed=SmoothMinDistance(composed,distance,runtime.smoothWidthVoxels);
|
||||
|
||||
Reference in new issue
Block a user