feat: Phase 2 first port — FlatPlain + CrystalChamber collapse into one op
Jahni closed OPSTACK-DECOMPOSITION 3.1: the slab noise Z term was not intentional character. Phase 1 also closed — the visual A/B on Maze passed. Two changes, deliberately together, kept attributable by the test: 1. Design: GetSlabDensity's floor and ceiling noise lose their Z terms. A floor height no longer depends on the altitude you sample it from. The ceiling keeps its + 3000.0f, which is a decorrelation offset, not a Z term. The world re-tunes once — a different slice of the noise field, not a worse one. 2. Refactor: the now-XY-pure function ports to FSlabVoidSource + FGridColumnMod plus the three structural ops. BuildSlabStack has NO branch on archetype because GetSlabDensity never had one — CrystalChamber is FlatPlain with a bigger CeilingRoughness. 8 archetypes -> 7. SlabEquivalence compares against the reference AS IT IS NOW and runs the whole battery on both slots, so green means the port is a pure refactor and any visual delta is attributable to the Z-term removal alone. The attribution comes from the test, not from splitting it across two builds. The payoff 3.1 was actually about: FSlabVoidSource::ClassifyBox is exact and needs no sampling. FBM is contractually [-1,1], so both surfaces live in Z bands with known bounds — a tile below the floor band is provably solid, a tile between the bands provably air. ClassifyTile proves zero tiles for these archetypes today. FGridColumnMod answers Identity when no column reaches the box, which is what lets the source's AllAir verdict survive the fold. UNVERIFIED: not compiled. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -263,7 +263,22 @@ FGridColumnMod Add world-grid jittered cylinders, infinit
|
||||
That is the entire archetype. Two of the eight collapse into one, and the ceiling's `abs(noise)`
|
||||
(formations hang down only, never punch up) is a two-line flag on the source.
|
||||
|
||||
### 3.1 A finding to raise with Jahni before porting
|
||||
### 3.1 ✅ RESOLVED 2026-07-27 — Jahni: the Z term can go. Removed.
|
||||
|
||||
**Decision:** the Z term was not intentional character. It is gone from `GetSlabDensity` (both
|
||||
surfaces), `FSlabVoidSource` is XY-pure, and FlatPlain + CrystalChamber are ported and wired.
|
||||
|
||||
**What that bought, and what it cost:**
|
||||
- `IsXYPure() == true` ⇒ the T1.a column-cache treatment becomes available generically.
|
||||
- An **exact `ClassifyBox` with no sampling**: `VoxelNoise::FBM`'s contract is `[-1,1]`, so both
|
||||
surfaces live in Z bands with known bounds — a tile entirely below the floor band is provably
|
||||
solid, a tile strictly between the bands is provably air. These two archetypes proved **zero**
|
||||
tiles before. `VoxelForge.OpStack.SlabEquivalence` reports the count.
|
||||
- **Cost: the world re-tunes once.** Dropping the term samples a different slice of the noise
|
||||
field, so floor and ceiling shapes change (they do not degrade). Covered by §2.6's explicit
|
||||
permission to re-tune.
|
||||
|
||||
The original finding, kept because it explains why the answer mattered:
|
||||
|
||||
`FSlabVoidSource` is **not XY-pure, and probably should be.** Both surfaces sample noise with a
|
||||
small Z term:
|
||||
@@ -285,6 +300,8 @@ for free, and gets an exact box classification — which means FlatPlain and Cry
|
||||
skipping trivial tiles, which they never have. That is a large win for a one-character change, so
|
||||
it is worth asking rather than assuming either way.
|
||||
|
||||
**Answered: it can go.** See the resolution above.
|
||||
|
||||
---
|
||||
|
||||
## 4. Maze — **the Phase 1 port**
|
||||
|
||||
Reference in New Issue
Block a user