wip(assembler): round L32 -- smooth Gradient interface at full amplitude (no rings, not flat)
Band faces now use signed distance to the displaced solid intervals, continuous across bands, so MC interpolates the interface instead of terracing at density levels. The Gradient amplitude is restored to width/8 (about 4 m peak-to-peak at 16 m). Ring/terrace audit at LOD0-8 on the FI floor and SW ceiling passes; negative controls: L30 (rings) and L31 (flat) both fail. Hole/interface audits, 16 passage rows and 24/24 determinism pass. Evaluator 20. Cost vs L31 SW +1.9%, FI +1.5%. 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
28069f0d98
commit
d0158c6019
31 files changed
+2207
-111
No files matched your search
@@ -71,8 +71,22 @@ namespace
|
||||
const std::int64_t ix = TransitionFloorDiv(x, cell), iy = TransitionFloorDiv(y, cell);
|
||||
const std::int64_t tx = TransitionFade(((x - ix * cell) * TransitionQ16) / cell);
|
||||
const std::int64_t ty = TransitionFade(((y - iy * cell) * TransitionQ16) / cell);
|
||||
std::uint64_t prefix=14695981039346656037ull;
|
||||
TransitionHashWord(prefix,static_cast<std::uint32_t>(seed));
|
||||
TransitionHashWord(prefix,static_cast<std::uint32_t>(interfaceIndex));
|
||||
const auto at = [&](std::int64_t dx, std::int64_t dy)
|
||||
{ return TransitionNoiseValue(seed, interfaceIndex, ix + dx, iy + dy, 0, salt); };
|
||||
{
|
||||
std::uint64_t hash=prefix;
|
||||
TransitionHashWord(hash,static_cast<std::uint64_t>(ix+dx));
|
||||
TransitionHashWord(hash,static_cast<std::uint64_t>(iy+dy));
|
||||
TransitionHashWord(hash,0);
|
||||
TransitionHashWord(hash,salt);
|
||||
hash ^= hash >> 30; hash *= 0xbf58476d1ce4e5b9ull;
|
||||
hash ^= hash >> 27; hash *= 0x94d049bb133111ebull;
|
||||
hash ^= hash >> 31;
|
||||
const std::uint32_t bits=static_cast<std::uint32_t>(hash>>32);
|
||||
return static_cast<std::int64_t>(bits>>15)-TransitionQ16;
|
||||
};
|
||||
return TransitionLerp(TransitionLerp(at(0, 0), at(1, 0), tx),
|
||||
TransitionLerp(at(0, 1), at(1, 1), tx), ty);
|
||||
}
|
||||
@@ -359,10 +373,7 @@ ResolvedLayoutTransitionBandsV1 EvaluateResolvedLayoutTransitionBandsV1(
|
||||
return result;
|
||||
}
|
||||
|
||||
// FloatingIslands floor faces retain the same deterministic Gradient field but
|
||||
// cap displacement at one quarter voxel so the transition does not read as a contour.
|
||||
const std::int64_t gradientDivisor=upper.generatorKind=="FloatingIslands"?256:8;
|
||||
const std::int64_t displacement = (noise * (width / gradientDivisor)) / TransitionQ16;
|
||||
const std::int64_t displacement = (noise * (width / 8)) / TransitionQ16;
|
||||
const std::int64_t interfaceZ = seam + displacement;
|
||||
result.upperBedrockBottomMicrometres = interfaceZ;
|
||||
result.upperBedrockTopMicrometres = interfaceZ + upperThickness;
|
||||
|
||||
Reference in new issue
Block a user