perf(core): FloatingIslands whole view 16.7 s -> 7.4 s (L51); research R20
Measured first: 45% of FI tiles are all-air, yet FloatingIslandFieldV1 returned unknown for any box near an island AABB (25,536 unknown boxes, 0 tile skips). Conservative ranges for island bodies, root lobes, buttresses, connectors, surface detail and smooth-min budgets now let the shared box classifier prove FI air/solid (216 tile skips; 28.6 M audited samples, 0 violations). The X8 path reuses its FI preflight samples. LOD7-8 far-shell and column work is skipped outside per-tile island/connector influence bounds (farHorizonVersion 4 -> 5). FI 16.74 -> 7.36 s (-56%), FI moving entering-tile p50 halved; SW unchanged. Peer determinism (Clang/GCC W1/W8/W12, random cameras) PASS; fast/medium/full PASS. Research R20: world-type catalogue and dreamcore/liminal concepts (revised after a deepening pass). 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
ca85e876ad
commit
75550256ef
9 files changed
+793
-23
No files matched your search
@@ -0,0 +1,248 @@
|
||||
# VoxelForge R20 — revised report: world types and liminal landscapes
|
||||
|
||||
## Findings from the code
|
||||
|
||||
Core’s native stratum selector currently has only three kinds: `Legacy`, `SurfaceWorld`, and `FloatingIslands`. The automatic Unreal adapter builds native plans for SurfaceWorld and FloatingIslands; other archetypes fall through the legacy path. Imported manifests can carry extra stamp or cavern records, but the Strate asset adapter does not author those records as native generator families. [Core field kinds](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:142>), [automatic adapter](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:839>)
|
||||
|
||||
The legacy enum has eight names but fewer independent builders:
|
||||
|
||||
- `FlatPlain` and `CrystalChamber` both call `BuildSlabStack` with `FSlabGenerationParams`. The builder comments that their runtime path does not distinguish them; CrystalChamber does not generate crystal solids.
|
||||
- `TunnelNetwork` and `Underwater` both call `BuildTunnelNetworkStack` with `FStrateGenerationParams`.
|
||||
- Maze, SurfaceWorld, VerticalShafts, and FloatingIslands each have their own legacy stack. The implementations are dispatched in [VoxelGenerator.cpp](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelGenerator.cpp:2586>).
|
||||
|
||||
Core does already accept resolved SDF stamps and cavern graph records. Stamp lookup has a BVH, with ellipsoid, arch, pillar, and dais shapes; cavern candidates are scanned linearly. More significantly, the current classifier marks any queried box touched by a stamp or cavern feature as mixed. The BVH saves candidate work; by itself, it does not prove air or solid. [Stamp records](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h:725>), [stamp index](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:3355>), [cavern records](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h:766>), [cavern candidate list](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:3740>), [classification](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:4998>)
|
||||
|
||||
Core’s field sign convention is negative for solid and nonnegative for air. Research6 describes a desirable metre-native, immutable field contract with conservative intervals, but the local design note labels that work as design discussion; it is not yet a common runtime interface for every generator. [Research6 contract](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research6/REPORT.md:22>), [design status and contract](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/DESIGN_WORLD_ASSEMBLER.md:1>)
|
||||
|
||||
Walkability is part of the game contract. The GDD requires every strate to have findable entrance and exit mouths; automatic generation and composer features must preserve a capsule-swept, supported route. Core’s `BuildFiniteSurfaceRoute` is SurfaceWorld-specific. The shared passage planner handles inter-strata passages, but the asset comments say Worm, Spiral, and Cascading styles are not guaranteed walkable. The route helper uses a 1.76 m capsule, about 0.34 m radius, and a maximum grade equivalent to 15°. Treat that as a current SurfaceWorld constraint, not a universal comfort standard. [GDD](</home/jahni/VoxelM/Plugins/VoxelForge/GDD.md:132>), [SurfaceWorld route](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:141>), [shared passage planner](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ResolvedLayoutInternal.h:1842>), [passage styles](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1850>)
|
||||
|
||||
A composition-order detail matters for new recipes: Core applies cavern graph, boundary band, passage carve, then stamps, followed by cavern floor caps. A later feature can therefore re-block a route or mouth. Reserve feature keepouts around route and passage sweeps, then check the fully composed field. [Composition order](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:1788>)
|
||||
|
||||
The current water renderer is a non-colliding plane that follows the player. It is not a local pool mask, swim model, or basin system. The owner has already chosen fixed seasonal water; a pool-room recipe needs local, static water rendering and any required movement, collision, and hazard support. [Water update](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelContentManager.cpp:2499>), [water asset contract](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateDefinition.h:211>), [owner’s water decision](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/DESIGN_WORLD_ASSEMBLER.md:846>)
|
||||
|
||||
Performance evidence also needs updating. Linux51 measured the post-optimization FI whole view at **7.355 s**, SurfaceWorld at **1.756 s**. Before that pass, FI was about 9.5 times slower than SW; afterward it was about 4.2 times slower. FI still had a 1.304 s p95 entering-tile latency on the 24 m moving run. The audit certified 21,504 blocks and sampled 28.6 million points with no violations, while the separate runtime classification still had 18,857 mixed and 240 unknown boxes. So interval bounds mattered, but the remaining cost is not all “unprovable air”: meshing and far-shell work remain too. These are Linux/headless timings, not VR frame-rate measurements. [Linux51 measurements and audit](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Linux51/REPORT.md:9>)
|
||||
|
||||
## Liminal landscape rules
|
||||
|
||||
“Liminal” covers several spatial grammars, not one terrain style. Banfield warns against using liminality as an umbrella for every ambiguous place; the generator should expose distinct profiles such as repeated landscape, empty civic space, threshold maze, and artificial geometry in nature. [Banfield, “From liminal spaces to the spatialities of liminality”](https://doi.org/10.1111/area.12791)
|
||||
|
||||
Useful landscape rules:
|
||||
|
||||
1. **Keep a recognizable base.** Start from a familiar hill field, corridor, pool, or chamber. Diel and Lewis’s experiments associate uncanny built places with deviations from expected spatial configurations, including unusual scale, missing or displaced features, and excessive repetition. Their work is about images of places, not VR terrain, so this is a design guide rather than a VR result. [Diel & Lewis, 2022](https://orca.cardiff.ac.uk/id/eprint/151790/)
|
||||
2. **Change a few relationships at a time.** One repeated hill that is too regular, a monolith at the wrong scale, or a pool embedded in rock can feel wrong while remaining legible. Randomly changing every feature risks losing both coherence and navigation.
|
||||
3. **Use familiarity mixed with mismatch.** Wu’s cultural analysis of dreamcore describes the tension between recognizable scenes and disquiet, including infrastructure that does not belong in its natural setting. [Wu, 2022](https://doi.org/10.1080/14797585.2022.2097013)
|
||||
4. **Offer more than one palette.** A study of 449 adults rating 18 selected dreamcore images found warmer/comforting and darker/eerie preference dimensions. That supports configurable moods; it does not establish one canonical dreamcore palette. [Song, Choi & Li](https://doi.org/10.1177/02762374251356955)
|
||||
5. **Let the player interpret, but keep the route readable.** The Yume Nikki team reported Kikiyama’s instruction to avoid explaining the dream and let players interpret scenes themselves. The Exit 8 developer describes cutting an overly difficult anomaly and adding signage where the intended response was hard to infer. Together these suggest ambiguity in meaning, with clear spatial cues for safe progression. [Yume Nikki GDC interview](https://operationrainfall.com/2018/05/14/yumenikki-dream-diary-gdc-playism-kikiyama-interview/), [The Exit 8 developer interview](https://automaton-media.com/en/interviews/interview-the-exit-8-developer-kotake-create-on-the-perks-of-being-a-solo-dev-and-how-platform-8-came-to-be/)
|
||||
6. **Use abrupt shifts at authored thresholds.** Osamu Sato described using dream-diary material for LSD: Dream Emulator and dream-like jumps between places. For this game, such shifts should happen at stable doors, mouths, or thresholds, not as per-sample spatial randomness. [Osamu Sato interview](https://daily.redbullmusicacademy.com/2017/11/osamu-sato-interview/)
|
||||
7. **Treat sound and emptiness as design channels.** Anemoiapolis’s creator cites childhood pools, a hometown dead mall, and an apparently endless church basement. POOLS’ developer notes describe room-size-dependent reverb and added exit signs to help players who got lost. VoxelForge already has fog, ambient light, decorations, landmarks, and ambient sound, but I found no room-dependent reverb system. [Anemoiapolis creator notes](https://andrewq.artstation.com/projects/Vydxg8), [POOLS developer notes](https://tensori.itch.io/pools/devlog)
|
||||
8. **Keep impossible geometry intentional and multiplayer-stable.** The Manifold Garden GDC talk stresses repeated architecture as a navigation cue and that unusual geometry should communicate intent. Superliminal’s forced-perspective techniques depend on the camera view; the PossibleImpossibles research likewise creates viewpoint-specific visual bridges. Use such effects as scenery or set-pieces, not shared collision fields that must work from every player’s view. [Manifold Garden GDC talk](https://gdcvault.com/play/1023143/Level-Design-Workshop-Level-Design), [Superliminal technical article](https://blog.playstation.com/2020/06/30/breaking-down-the-tech-behind-superliminals-mind-bending-illusions/), [PossibleImpossibles](https://doi.org/10.1111/cgf.15052)
|
||||
|
||||
Pastel tint, fog, a hidden horizon, endless planes, and unusual smoothness are useful art controls, not required definitions. In this game the world is finite and internally lit; fog can hide the sealed cap, but cannot replace it. The GDD’s anomalous strates should remain rare and should not blend into neighboring strates, so the ordinary strata stay useful as a contrast. [GDD](</home/jahni/VoxelM/Plugins/VoxelForge/GDD.md:142>)
|
||||
|
||||
## Shared field and composition model
|
||||
|
||||
For the proposed recipes below, let `h(x,y)` be the walkable ground and `c(x,y)` the solid ceiling or sky-cap boundary, both measured in metres:
|
||||
|
||||
```text
|
||||
D0(x,y,z) = min(z - h(x,y), c(x,y) - z)
|
||||
```
|
||||
|
||||
Negative is solid; positive is air. `D0` is a signed clearance field, not a Euclidean SDF on sloped ground. A solid feature with signed distance `S` joins via `D = min(D0, S)`. A carved void with negative-inside SDF `C` joins via `D = max(D0, -C)`.
|
||||
|
||||
The heightfield interval for a query box with `z ∈ [zL,zU]`, `h ∈ [hL,hU]`, and `c ∈ [cL,cU]` is:
|
||||
|
||||
```text
|
||||
Iground = [zL - hU, zU - hL]
|
||||
Icap = [cL - zU, cU - zL]
|
||||
ID0 = [min(Iground.lower, Icap.lower),
|
||||
min(Iground.upper, Icap.upper)]
|
||||
```
|
||||
|
||||
Outward-round the interval. If its lower bound is positive, the box is air; if its upper bound is negative, it is solid; otherwise it is mixed and must be evaluated or subdivided. For the analytic profiles below, compute exact cosine, radial, or smoothstep ranges over each box where practical.
|
||||
|
||||
All five recipes are proposed field behavior. They reuse existing primitives and composition where noted; none is currently a native Core recipe. Keep them inside the resolved content region with margins from the actual ceiling and bedrock bands. Where a feature deliberately meets a band, let it merge into the solid band without crossing into the adjacent strate. Plan arrival/departure mouths and route anchors first; keep features out of their swept capsule clearances, use a passage style with a walkability guarantee, then validate support and clearance after full composition. The suggested 2.2 m ordinary-route clearance and 8 m fight-space headroom are design targets, not current universal Core checks.
|
||||
|
||||
## Five buildable liminal profiles
|
||||
|
||||
The metre ranges below are proposed authoring ranges for new profiles. Existing legacy parameter structs retain their authored voxel/chunk units and need a versioned conversion before sharing metre-native recipes.
|
||||
|
||||
### 1. Repeating rolling hills
|
||||
|
||||
**Reuse and new work.** Reuse SurfaceWorld’s data flow: legacy `BuildSurfaceStack` / `FSurfaceGenerationParams`, native `BuildSurfaceProfile` and `BuildSurfaceStratumPlan`, and Core `Heightfield2D::point`, `classifyLatticeBox`, and `interval`. The current native profile is noise-based; it has no analytic periodic-hill profile. Add a versioned periodic height function and route anchors. [SurfaceWorld stack](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelDensityOpStack.cpp:9348>), [params](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1418>), [Core profile and plan](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:272>), [Core heightfield](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/WorldAssemblerInternal.h:2068>)
|
||||
|
||||
```text
|
||||
h(x,y) = h0 + Ax*cos(2πx/Lx + φx) + Ay*cos(2πy/Ly + φy)
|
||||
c(x,y) = c0
|
||||
D = D0
|
||||
```
|
||||
|
||||
Suggested values: `Ax, Ay = 0.5–3 m`; `Lx, Ly = 80–160 m`; stable phases `φx, φy`; finite strata bounds, with roughly 2–6 repetitions in the fog-visible vista. Require `G = sqrt((2πAx/Lx)^2 + (2πAy/Ly)^2) ≤ tan(15°) ≈ 0.268` along the player route. For `A=2 m`, `L=80 m` in both axes, the maximum grade is about 12.5°.
|
||||
|
||||
The floor can carry a supported route; the cap and bedrock bands remain as sealed boundaries. Keep minimum ground-to-cap clearance at least 2.2 m on the route and 8 m where a fight arena needs the GDD’s camera space. The existing SurfaceWorld route helper is the closest route reuse, but it does not prove this proposed periodic recipe until it is connected to the final field.
|
||||
|
||||
For a box, find exact cosine extrema by checking its endpoints and any included stationary points. Then use the shared heightfield interval above. The field Lipschitz bound is `L_D ≤ sqrt(1+G²)` for the ground side and `1` for the flat cap; min composition preserves the maximum bound.
|
||||
|
||||
At standing eye height, the player sees spotless, repeating hill crests inside a sealed, fogged cavern. The familiar ground plane and deliberate periodicity make the hills uncanny; a single out-of-pattern marker can anchor orientation without making the whole scene noisy.
|
||||
|
||||
### 2. Near-vertical ramp fins that rise to the ceiling
|
||||
|
||||
**Reuse and new work.** Reuse `BuildSlabStack` / `FSlabGenerationParams` only for the flat base-floor/ceiling idea, plus shared composition and passage handling. There is no existing tilted slab stamp: current `fillPillar` and `fillDais` do not express an oriented ramp. Add an oriented-box SDF, bounded placement, and sharp geometry support across LOD and collision. [Slab builder](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelDensityOpStack.cpp:9373>), [slab params](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1222>), [stamp SDFs](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:6117>)
|
||||
|
||||
For a ramp box with center `p0`, half-extents `a`, and rotation `R` around the horizontal axis, let:
|
||||
|
||||
```text
|
||||
q = abs(Rᵀ(p - p0)) - a
|
||||
Sbox = length(max(q,0)) + min(max(qx,qy,qz),0)
|
||||
D = min(D0, Sbox)
|
||||
```
|
||||
|
||||
Suggested values: pitch `θ = 75–90°`; vertical rise `H = 12–32 m`; width `8–20 m`; thickness `1–2 m`; one to four repeated fins in the visible region. End the feature flush against the underside of the ceiling band, and merge its base into the floor solid without opening the bedrock band. The field can be positioned to meet the cap; it must not punch through to the neighboring strate.
|
||||
|
||||
This is a visual feature, not a walkable ramp. A separate floor route must bypass it and stay at or below 15°. If the player is expected to climb it, that requires a separate movement/gravity design; a 15° path needs about 45 m horizontal run for 12 m rise and 120 m for 32 m rise.
|
||||
|
||||
The box SDF is 1-Lipschitz. Compute its interval in the rotated box coordinates, or use a conservative center value plus the AABB half-diagonal bound. Its finite support box can be indexed in a BVH. From eye height the player sees a wall-like plane rising into the cap; repeating it with one controlled orientation and a safe bypass makes it feel designed rather than a collision error.
|
||||
|
||||
### 3. Flat field with lone monoliths
|
||||
|
||||
**Reuse and new work.** Reuse a flat SurfaceWorld profile through `BuildSurfaceProfile` and `Heightfield2D`, or legacy `BuildSlabStack`. Core already has `fillPillar`, `StampSdf`, `ApplyResolvedSdfStamps`, and `BuildStampSpatialIndex`; there is no Strate asset authoring path for those stamps, and any touched stamp box is currently classified mixed. Add a monolith placement recipe, tighter feature intervals, and asset authoring. [Stamp index and application](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:3355>), [pillar SDF](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:6117>), [stamp composition](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:6155>)
|
||||
|
||||
Use `h(x,y)=h0`, `c(x,y)=c0`. For each vertical capped cylinder centered at `(xi,yi,zi)`:
|
||||
|
||||
```text
|
||||
ρ = sqrt((x-xi)^2 + (y-yi)^2)
|
||||
qr = ρ - R
|
||||
qz = abs(z-zi) - H/2
|
||||
Si = sqrt(max(qr,0)^2 + max(qz,0)^2) + min(max(qr,qz),0)
|
||||
D = min(D0, S1, S2, ...)
|
||||
```
|
||||
|
||||
Suggested values: radius `R = 0.8–2 m`; height `H = 12–32 m`; spacing `80–240 m`. Seat each base on the floor and merge or stop its top at the ceiling band. Keep each route at least `R + 0.34 m` plus a safety margin away from the pillar, and reserve passage-mouth keepouts.
|
||||
|
||||
A cylinder SDF is 1-Lipschitz. Exact radial min/max distance from a query AABB to its center gives a tight interval; BVH support bounds cull features outside the box. On a flat path, walkability is straightforward. A solitary pillar, tiny floor references, fog hiding the cap, and no source of daylight create an intentional scale mismatch rather than a plausible support structure.
|
||||
|
||||
### 4. Nested terrace and pool court
|
||||
|
||||
**Reuse and new work.** Reuse the flat floor/cap profile and `Heightfield2D::point`; `waterFillSubvoxels` only provides the current surface fill channel, while `UVoxelContentManager::UpdateWater` renders a global player-following plane. Neither provides local pool geometry. Add the radial terrace profile, a static local water mask/render path, and any needed swimming/collision rules. [Heightfield water field](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/WorldAssemblerInternal.h:2102>), [water renderer](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelContentManager.cpp:2499>)
|
||||
|
||||
Let `r = sqrt((x-xc)^2+(y-yc)^2)`, and `s(t)=3t²-2t³` clamped to `[0,1]`:
|
||||
|
||||
```text
|
||||
h(r) = hB + Σj Δj*s((r-rj)/wj)
|
||||
c(r) = c0
|
||||
D = D0
|
||||
W = min(z-h(r), zw-z, Rp-r) # positive means inside the water volume
|
||||
```
|
||||
|
||||
`W` is a separate water occupancy channel, not rock density. Suggested values: `2–5` terraces; each rise `Δ = 0.15–0.4 m`; transition width `w = 3–6 m`; court radius `4–12 m`; water depth `0.3–1 m`. Keep transitions from overlapping, and require `1.5Δ/w ≤ tan(15°)` for a ramped transition. For example, `Δ=0.4 m`, `w=3 m` gives a maximum grade near 11.3°.
|
||||
|
||||
Keep a continuous dry ring or ramp as the route between mouths; do not route through water unless swimming is an intentional movement mode. Bound `r` over each XY box using closest and farthest points from the center, then propagate through monotone `s`. The field bound is `L_D ≤ sqrt(1+G²)` for maximum terrain gradient `G`; the water mask has the same bound or `1`, whichever is larger.
|
||||
|
||||
The view is a set of too-regular, nested pool rims below a low sealed cap. Fixed water, empty rooms, and exact repeated geometry supply the unease. The dry route and clear mouth markings keep the geometry from reading as accidental obstruction.
|
||||
|
||||
### 5. Mirrored floor and ceiling relief
|
||||
|
||||
**Reuse and new work.** Reuse `FSurfaceGenerationParams` cap fields through `BuildSurfaceProfile` / `BuildSurfaceStratumPlan`, including ceiling undulation and ridge values. The current floor and cap profiles are independent; add a paired-phase profile. The player walks on the floor only. Walking upside down would require a new gravity and locomotion rule. [Surface profile mapping](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:272>), [ceiling parameters](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1590>)
|
||||
|
||||
```text
|
||||
g(x,y) = Ax*cos(2πx/Lx + φx) + Ay*cos(2πy/Ly + φy)
|
||||
h(x,y) = h0 + g(x,y)
|
||||
c(x,y) = c0 - λg(x,y)
|
||||
D = D0
|
||||
```
|
||||
|
||||
Suggested values: `Ax, Ay = 0.5–2 m`; `Lx, Ly = 80–160 m`; `λ = 0.75–1`. Require `G ≤ tan(15°)` for the floor route and `c0-h0-(1+λ)(Ax+Ay) ≥ 2.2 m` everywhere; use at least 8 m where the arena needs it.
|
||||
|
||||
Use exact cosine extrema for box intervals. The ground bound is `sqrt(1+G²)`; the ceiling bound is `sqrt(1+(λG)²)`. Their minimum gives a safe bound for `D`.
|
||||
|
||||
The player sees a ceiling valley that mirrors the floor’s hill at the same place. Floor and cap remain closed, and the normal route is level enough to traverse. The matching phase is the impossible clue; the route stays physically ordinary.
|
||||
|
||||
## Catalogue and code reuse
|
||||
|
||||
Cost labels below estimate the **proposed Core field and proof cost**. They are not performance measurements. “Cheap” means a small analytic field with tight intervals; “medium” means a bounded graph or several local features; “expensive” means many thin/noisy features, weak intervals, broad mesh work, or additional gameplay systems. Existing SW and FI timings are called out separately.
|
||||
|
||||
The keys in the catalogue map to exact implementations:
|
||||
|
||||
- **S — SurfaceWorld:** legacy [`BuildSurfaceStack`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelDensityOpStack.cpp:9348>) with [`FSurfaceGenerationParams`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1418>); native [`BuildSurfaceProfile`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:272>), [`BuildSurfaceStratumPlan`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:320>), and [`Heightfield2D::point/classifyLatticeBox/interval`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/WorldAssemblerInternal.h:2068>).
|
||||
- **P — slab:** [`BuildSlabStack`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelDensityOpStack.cpp:9373>) with [`FSlabGenerationParams`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1222>). Legacy FlatPlain and CrystalChamber use this same stack.
|
||||
- **T — tunnel graph:** [`BuildTunnelNetworkStack`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelDensityOpStack.cpp:9422>) with [`FStrateGenerationParams`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:372>). Underwater uses it too. Cellular noise is a cave-surface roughness option; it does not make a bubble-room topology. Ribbing changes walls; it does not generate lava tubes.
|
||||
- **M — maze:** [`BuildMazeStack`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelDensityOpStack.cpp:9536>) and [`FMazeGenerationParams`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1364>).
|
||||
- **V — shafts:** [`BuildVerticalShaftStack`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelDensityOpStack.cpp:9390>) and [`FVerticalShaftParams`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1665>). The stack reuses Maze’s constant-rock, roughness, and carve operations.
|
||||
- **I — islands:** [`BuildFloatingIslandStack`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelDensityOpStack.cpp:9504>) and [`FFloatingIslandParams`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1730>); native [`BuildFloatingIslandStratumPlan`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:487>) and [`FloatingIslandFieldV1::densitySubvoxelsForTile/interval`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/FloatingIslandsInternal.h:2330>).
|
||||
- **D — disturbances:** [`ApplyDisturbances`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelGenerator.cpp:1050>) with [`FStrateDisturbanceParams`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:1798>). The chasm box query is conservative XY overlap; it is not a native canyon planner.
|
||||
- **Cav — optional cavern records:** [`ResolvedCavernRoomV1/EdgeV1`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/include/VoxelForgeCore/VoxelForgeCore.h:766>), [`ApplyResolvedCavernGraph`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:6189>), and [`BuildCavernFeatureTileList`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:3740>). These are not a native Strate asset generator.
|
||||
- **Stamp — optional SDF records:** [`BuildStampSpatialIndex`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:3355>), [`StampSdf`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:6117>), and [`ApplyResolvedSdfStamps`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:6155>). Existing stamp kinds are ellipsoid/arch carves and pillar/dais fills; yaw supports quarter turns.
|
||||
- **R — route and composition:** SurfaceWorld-only [`BuildFiniteSurfaceRoute`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelForgeCoreAdapter.cpp:141>); shared [`PlanResolvedLayoutPassagesV1`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ResolvedLayoutInternal.h:1842>) and [`ApplyResolvedStrateComposition`](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Core/src/ShapeWorldInternal.h:1788>). The shared route law comes from the design note, not from a universal route generator.
|
||||
- **Vis and water:** [`FStrateDecoration`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:2205>), [`FStrateLandmark`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:2269>), and [`ApplyFogSky`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelAtmosphereManager.cpp:127>) provide presentation. [`UpdateWater`](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Private/VoxelContentManager.cpp:2499>) supplies the current global water plane. Gameplay tags are metadata, not generator dispatch. [Definition and tags](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateDefinition.h:393>)
|
||||
|
||||
| Type and player fantasy | Exact reuse; new work | Cost, proof, route/VR risk, authoring |
|
||||
|---|---|---|
|
||||
| **Surface plains and mountains** — open-feeling landscape underground. | **S**. Existing terrain columns, cap, biome profile, and legacy overhang path. | **Medium today:** SW is 1.756 s for Linux51 whole view. Noise and cliffs need sound local bounds. Author `SurfaceParams` and biome profiles. |
|
||||
| **Flat plains / slab** — broad fight space, columns, low or high cap. | **P**. No native slab generator. | **Cheap target** with plane/cap intervals; columns make intersecting boxes mixed. Low walkability risk. Author `SlabParams`; native recipe still needed. |
|
||||
| **Giant cavern / cathedral** — huge rooms, natural ceiling and chambers. | **T + Cav**. Add native room and edge graph authoring, interval bounds, and route plan. | **Expensive with current optional graph** because touched boxes stay mixed and candidates are linear; **medium target** with sparse graph BVH and intervals. Vertical voids add fall risk. |
|
||||
| **Chasms and bridges** — cross a broken floor above depth. | **D** can layer legacy chasm/bridge/ridge effects over an archetype. Add a finite Core rift graph, stable bridge supports, and route keepouts. | **Medium target** if features are bounded and sparse. Boxes near cuts are mixed. High vertigo/fall risk. Author disturbance profile plus route plan. |
|
||||
| **Canyons / slot canyons** — follow a long trench through terrain. | **S** cliff controls plus **D** disturbances. No connected native canyon recipe. Add a bounded trench network and path planner. | **Medium target** with analytic trench intervals; noisy cliff intersections raise cost. Exposed drops and scale are VR risks. Author canyon graph and terrain profile. |
|
||||
| **Maze** — branching underground passages. | **M** gives a deterministic lattice and optional loops; add final capsule route proof. | **Medium–high** for graph traversal and route proof. Repetition and lost orientation are risks. Author `MazeParams` plus route constraints. |
|
||||
| **Vertical shaft world** — descent by ledges and links. | **V + M**. Existing shaft placement, ledges, connectors, and reused carve operations. | **Medium–high**; bounds must include complete shaft legs and ledges. High vertigo and falling risk. Author `VerticalShaftParams` and safe landings. |
|
||||
| **Floating islands** — traverse suspended terrain. | **I**. Existing native field and route/island plan. | **Expensive today:** 7.355 s whole view, 1.304 s p95 entering tile at 24 m. Residual mixed boxes and mesh/far-shell work remain. Strong vertigo risk. Author `FloatingIslandParams`. |
|
||||
| **Underwater tunnel** — descend through flooded cave. | **T** plus current global water plane. Add local water volume, swim/collision behavior, and dry-route policy. | **Medium field / medium-high end-to-end**. Rock graph can be bounded; water is not local today. Risk: disorientation and movement mismatch. Author `GenerationParams`, water channel, and route. |
|
||||
| **Flooded karst** — sinkholes, submerged rooms, and dry ledges. | **T + Cav + water**. Add local basin masks, roof openings, and water-aware route graph. | **Expensive with current classifier; medium target** with sparse graph intervals. Openings and water boundaries create mixed bands. Risk: ceiling/floor confusion. |
|
||||
| **Honeycomb / bubble rock** — walk through rounded cellular pockets. | **T** can reuse `RoughnessNoiseType=Cellular` only for surface roughness. Add explicit bounded cell or sphere-pocket topology. | **Medium** with finite cells and per-cell intervals; expensive if implemented as dense cellular noise. Claustrophobia and repetition risk. Author cell graph and pocket radii. |
|
||||
| **Lava tubes** — connected conduits around a static lava channel. | **T** room/corridor graph and wall ribs are reusable details, not tube topology. Add a conduit graph and fixed lava occupancy/material. | **Medium target**, with a local mixed band around tubes; expensive for dense particles or animated effects. Risk: flicker and narrow passages. |
|
||||
| **Root / fungal world** — tunnels threaded through large organic growth. | **T + Stamp + Vis** for the room graph, a few existing fills, and decorations. Add a sparse branching volume graph and bounds. | **Medium** when branches are few and thick; expensive for many thin vines because surface boxes remain mixed. Overhead collision risk. |
|
||||
| **Inverted world** — a mirrored ceiling over a walkable floor. | **S** cap undulation/ridge parameters. Add paired floor/cap phase. Ceiling walking requires new gravity. | **Cheap field**, medium gameplay if gravity changes. Paired height intervals are simple. Risk: disorientation, particularly with rotation. |
|
||||
| **Ruins / megastructure** — an artificial system spanning a cavern. | **M/T + Stamp + Vis**: lattice or room framework, limited primitives, landmarks. Add typed structural graph, beam/column intervals, sharp mesh/collision. | **Medium** if sparse; **expensive** if dense or if crisp geometry must survive all LODs. Collision snags and low ceilings risk. Author structure graph and motif library. |
|
||||
| **Crystal chamber / forest** — stand among hanging crystals or giant prisms. | **P + Vis**. Legacy CrystalChamber is the same slab stack as FlatPlain; its comment expects decorative actors for crystals. Add oriented crystal field features. | **Medium–expensive:** thin prisms leave many mixed boxes; current sharp geometry path is narrow. Proximity and collision risk. Author crystal anchors and excluded route volumes. |
|
||||
| **Salt or mud flats** — stark flat expanse with a few cracks or polygon plates. | **S** with flat parameters; no native crack-network profile. Add cracks as bounded features if physical. | **Cheap** if material-only; **medium** with physical crack geometry and certificates. Low route risk; monotony risk. Author flat profile and optional crack graph. |
|
||||
| **Dunes** — repeated ridges across a broad chamber. | **S** heightfield base; add an analytic dune profile. | **Cheap–medium** for a small analytic set; expensive with warped high-frequency detail. Require route grade ≤15°. Repetition fatigue risk. |
|
||||
| **Glacial caves** — broad ice halls and frozen passages. | **T + Vis** room graph and presentation. Ice friction, slide behavior, and local water are new. | **Medium** field; gameplay cost rises with sliding and slippery routes. Use dry, supported route bypasses. |
|
||||
| **Fossil reef** — traverse a giant ancient reef or skeletal seabed. | **Cav + Stamp + Vis** only as optional data primitives. Add biogenic cluster graph and feature intervals. | **Medium target / expensive current** due to mixed touched boxes; many branches raise cost. Risk: route clutter and narrow collision. |
|
||||
| **Mine / industrial galleries** — walk through repeated service corridors and supports. | **M/T + Stamp + Vis**; no native beam/rail network authoring. Add a room graph and bounded structural motifs. | **Medium** with repeated graph cells; exact intervals can prove empty repeated modules. Low-ceiling confinement and repetitive navigation risk. |
|
||||
| **Geothermal vents** — warm shafts, chimneys, and mineral deposits. | **T** room/shaft fields. A legacy chimney evaluator exists, but current composer notes mark the related parameter route dead/excluded. New active vent graph needed. | **Medium field**, with extra cost for particles/hazards. Risk: flicker, thermal effects, and vertical drops. |
|
||||
| **River / delta** — follow fixed rivers, bars, and branching channels. | **S + water**; current surface water level is not a drainage plan or local channel mesh. Add deterministic drainage graph and fixed water masks. | **Medium–expensive** due to global connectivity planning and local water boundaries. Flow appearance can create optic-flow discomfort; keep water fixed per owner. |
|
||||
| **Dreamcore / liminal profile** — a familiar world with a sparse wrongness grammar. | **S/P/T + Vis** as a profile over a base recipe, not a current generator kind. Add stable anomaly rules, palette and landmark controls. | **Cheap overlay** for a few bounded motifs, but inherits base cost. Repetition fatigue and disorientation risk. Author an anomaly profile with route-preserving keepouts. |
|
||||
|
||||
Several catalogue names can share generator families:
|
||||
|
||||
- **Profiled clearance field:** surface, flat plain, dunes, salt flats, canyons, rolling liminal hills, and mirrored ceilings.
|
||||
- **Cavern graph:** cathedral, karst, lava tubes, glacial caves, roots, reef, mine, and vent networks. Each can use different room, edge, material, and water channels.
|
||||
- **Lattice graph:** maze and shaft variants.
|
||||
- **Sparse SDF motif library:** monoliths, ramps, pillars, ruins, crystals, and liminal anomalies.
|
||||
- **Static water channel:** pools, rivers, lakes, flooded karst, and lava surfaces. Local occupancy and rendering still need implementation.
|
||||
- **Floating islands:** retain as a distinct placement-and-route family.
|
||||
- **Liminality:** profile grammar layered over one of the families above.
|
||||
|
||||
## Ranked starting set
|
||||
|
||||
1. **Profiled heightfield family.** Highest variety per implementation cost: ordinary terrain, periodic hills, flats, dunes, and later canyons. Start by taking measured SurfaceWorld from 1.756 s toward the one-second target. Keep a calm supported route through each recipe.
|
||||
2. **Native cavern graph.** Best fit for the stacked underground descent and combat spaces. It can serve cathedrals, caves, lava tubes, mines, roots, and reefs. Current cavern records need asset authoring, indexed candidate lookup, intervals, and route proof before they can be a dependable family.
|
||||
3. **Slab and sparse motif family.** Fastest path to liminal prototypes: a flat base plus monoliths, pool courts, ramps, and landmarks. Add generic stamp authoring and tight final-field intervals; sharp cross-LOD geometry remains a dependency.
|
||||
4. **Lattice graph family.** Reuse Maze and shaft concepts with route constraints and safe landing plans. It adds strong vertical variety but needs careful comfort and route design.
|
||||
5. **Static local water channel.** One implementation can expand pools, rivers, lakes, and flooded caves. It has substantial integration work because current water is global and non-colliding.
|
||||
6. **FloatingIslands.** Keep as its own high-value generator and continue optimizing it. Its measured whole-view time remains far from target.
|
||||
|
||||
The ranking changes with the owner’s immediate goal. For a liminal prototype, put slabs and sparse motifs first. For the main descent loop, put the cavern graph first. For one-second streaming and high-speed VR, put field intervals, route validation, and cross-LOD mesh work ahead of new noise-heavy worlds.
|
||||
|
||||
## VR and ranking risks
|
||||
|
||||
A 15° route cap is a geometric constraint, not a comfort guarantee. Current Meta guidance advises minimizing movement on slopes and stairs, keeping walls distant to reduce optic flow, and testing ceilings, ledges, and camera collision. A virtual-height study of 42 participants found elevated distress and physiological response on an exposed platform up to 40 m, with stronger effects among participants with higher height intolerance. These findings justify bypasses and comfort options, not a ban on vertical worlds. [Meta virtual-environment guidance](https://developers.meta.com/vr/design/locomotion-virtual-environments/), [Meta locomotion best practices](https://developers.meta.com/vr/design/locomotion-best-practices/), [virtual height study](https://pubmed.ncbi.nlm.nih.gov/35095450/)
|
||||
|
||||
Highest height/vertigo risks: shafts, chasms, canyons, floating islands, and high ramp fins. Highest orientation or repetition risks: maze, honeycomb, repeated hills, and pool rooms. Ice adds sliding risk; deep water adds visual/movement mismatch; inverted gravity adds vestibular risk. Repetition is an art tool but can become navigation fatigue: use stable landmarks and a few deviations instead of making every repeat identical.
|
||||
|
||||
Non-Euclidean game research found lower perceived mastery and control in experimental hyperbolic/spherical versions of two adapted 2D games, though perceived immersion and challenge did not differ significantly. This is not a VR locomotion study, but it supports keeping the actual walkable route Euclidean and placing viewpoint-specific impossibilities in authored set-pieces. [Osudin, Denisova & Child, 2025](https://eprints.whiterose.ac.uk/id/eprint/211405/)
|
||||
|
||||
## Design-for-performance rules
|
||||
|
||||
1. **Bound the final composed field.** For each query AABB, compose intervals through ground/cap, features, boundary band, passage, stamps, and edits. Skip only when the final interval is strictly positive or strictly negative. Unknown means evaluate. The local design note explicitly warns that a loose but sound range can make nearly everything mixed. [Design bounds guidance](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/DESIGN_WORLD_ASSEMBLER.md:19>)
|
||||
2. **Use structured ranges first.** Cosine extrema, radial distances, capped cylinders, oriented boxes, and smoothstep ramps have cheap bounds. Use a directional Lipschitz fallback if exact intervals are too involved. For a Lipschitz field with coordinate bounds `Lx,Ly,Lz`, a box centered at `p` with half-widths `hx,hy,hz` has range `f(p) ± (Lx hx + Ly hy + Lz hz)`.
|
||||
3. **Bound derivatives as well as amplitudes.** A noise amplitude envelope does not bound slope. Include the derivative of domain warps and detail terms; a warp `f(x+u(x))` needs a bound that includes the warp Jacobian.
|
||||
4. **Use the BVH only to prove absence.** A BVH can show that a box cannot meet a feature. If the box does meet it, apply that feature’s interval to the final CSG field. Current stamps have the BVH but still force touched boxes to mixed; cavern candidates are both linearly scanned and mixed.
|
||||
5. **Keep details in a narrow surface band.** Put expensive roughness near a bounded surface envelope. Use material variation for detail that does not need to change collision or silhouette.
|
||||
6. **Plan routes before features.** Build the route, passage mouths, and arena envelopes into the plan. Reserve those regions from stamps and content; after complete composition, recheck capsule clearance and support. A route is an authored constraint, not an incidental path through open air.
|
||||
7. **Treat sharp 3D features as a meshing task too.** Current sharp geometry support is narrow; most surfaces use Marching Cubes, which can bevel a 90° edge by up to about 17.7 cm at 25 cm voxel size in the documented analytic case. Tilted ramps and crystals need matching cross-LOD mesh and collision support. [Mesher constraints](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/DESIGN_WORLD_ASSEMBLER.md:317>)
|
||||
8. **Measure the whole view and moving frontier.** The one-second goal applies to the full view and streaming; report first tile, near ring, and entering-tile latency too. Do not infer headset frame time from Linux/headless build or tile-generation time.
|
||||
|
||||
## Owner question
|
||||
|
||||
Should the near-vertical ramp fins be non-walkable set-pieces with a normal bypass, or should players walk on walls and ceilings? The latter changes the locomotion and gravity contract.
|
||||
|
||||
No repository files were changed.
|
||||
@@ -0,0 +1,82 @@
|
||||
# Research R20 — World types for VoxelForge
|
||||
|
||||
**Recommendation:** Treat a world type as a bounded field and topology recipe. Layer crystals, ruins, roots, water, light, and sound over those fields through the existing content and stamp systems when they do not change the traversable shape. The plugin already has TunnelNetwork, FlatPlain, CrystalChamber, Maze, SurfaceWorld, VerticalShafts, FloatingIslands, and Underwater; several proposed “new types” can start as recipes over those families. ([archetype definitions](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:175>), [stack map](</home/jahni/VoxelM/Plugins/VoxelForge/ARCHITECTURE.md:63>))
|
||||
|
||||
## 1. Dreamcore and liminal landscapes
|
||||
|
||||
The landscape rule is **recognizable place, carefully wrong**. A study of built environments associates uncanniness with missing, displaced, repeated, or oddly scaled features; combinations of anomalies increased uncanniness. That supports using a few deliberate violations instead of adding random noise everywhere. ([Diel & Lewis](https://doi.org/10.1016/j.jenvp.2022.101844))
|
||||
|
||||
The references offer different ways to apply that rule: dreamcore’s soft, nostalgic landscape imagery; aimless dream traversal in *Yume Nikki* and *LSD*; familiar pool and mall spaces in *Anemoiapolis* and *POOLS*; the repeated passage and discrete anomalies in *The Exit 8*; *Superliminal*’s forced perspective; and Kane Pixels’ empty, fluorescent-lit rooms. ([Dreamcore Archive](https://dreamcorearchive.org/en/versus), [Yume Nikki](https://store.steampowered.com/app/650700/YumeNikki/?l=english), [LSD product info](https://lsd-25.github.io/lsd/introduction.html), [Anemoiapolis developer page](https://andrewq.artstation.com/projects/Vydxg8), [POOLS](https://store.steampowered.com/app/2663530/POOLS/?curator_clanid=9966013&l=english), [The Exit 8](https://playism.com/en/game/the-exit-8/), [Superliminal developer article](https://blog.playstation.com/2019/12/10/perception-is-reality-superliminal-coming-to-ps4/), [Kane Parsons interview](https://www.abc.net.au/news/2026-05-28/what-are-the-backrooms-kane-parsons-a24/106709828))
|
||||
|
||||
Generator rules:
|
||||
|
||||
- Repeat one exact shape, spacing, or landmark pattern long enough to become noticeable.
|
||||
- Distort scale or placement relative to familiar features: a tiny doorway in a vast slope, a field-sized monolith, or a pool room with no visible end.
|
||||
- Leave broad areas empty. A single landmark or feature can carry more tension than dense detail.
|
||||
- Make the lighting and materials unnaturally consistent; introduce one clear discontinuity or anomaly.
|
||||
- Use fog and low-contrast enclosed ceilings to hide the horizon. Since there is no sun underground, use authored internal lights and ambient color, not a physical skylight. ([GDD §6–7](</home/jahni/VoxelM/Plugins/VoxelForge/GDD.md:104>))
|
||||
- Keep the player’s route legible and safe. The project’s route convention is a ≤15° grade, 3 m clear width, and 3 m minimum room height. Let the surrounding landscape break that rule while preserving the guaranteed route. ([passage contract](</home/jahni/VoxelM/Plugins/VoxelForge/ARCHITECTURE.md:478>))
|
||||
|
||||
For the recipes below, use `φ < 0` for solid and `φ > 0` for air. The field operates only in the resolved content interval; shared composition owns the ceiling, bedrock, transitions, and passages. This follows the R6 generator contract. ([Research6 §2](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research6/REPORT.md>))
|
||||
|
||||
| Liminal strate | Field recipe | Walkability, bands, and uncanny cue |
|
||||
|---|---|---|
|
||||
| **Too-clean rolling hills** | `h(x,y) = h₀ + A[cos(2πx/Lx) + cos(2πy/Ly)]`; ground `φg = z − h`. Repeat with exact periods and little or no detail noise. | Keep the route in a low-gradient corridor, using the existing route grade limit; clamp all heights inside the content interval. The hills feel wrong through precise repetition and excessive smoothness, not broken geometry. |
|
||||
| **Ramps that rise to the ceiling** | `h(x) = h₀ + H·smoothstep((x−x₀)/w)`, extended across the strate. Large `H/w` makes the face approach vertical; stop it at the inner ceiling boundary. | A literal 90° “ramp” is a wall under normal gravity. Treat it as a sheer landscape fin and route around it, or provide a separate safe switchback. Its clean, enormous plane is the anomaly. |
|
||||
| **Flat field, lone monoliths** | Flat ground `φg = z − h₀`; union sparse deterministic box SDFs with `φ = min(φg, boxSDF₁ … boxSDFₙ)`. Fix spacing and scale, or leave one landmark in the view. | Keep the route straight and open; place monoliths outside its clearance and away from passage mouths. Fog can conceal the bounded end of the field, while the monoliths create the missing horizon. |
|
||||
| **Nested terraces / pool rooms** | Let `rᵢ` be the 2D rounded-box SDF for nested rectangles. Set `h = h₀ + ΔΣ smoothstep((rᵢ+ε)/(2ε))`; add water as a separate plane at `zw`. | Use flat treads and put broad, ≤15° ramps at selected crossings. Keep a dry route to each passage if the room is flooded. Repeated square rims and identical water levels give familiar geometry an impossible scale. |
|
||||
| **Inverted ceiling landscape** | Pair a grounded floor `φg = z − h(x,y)` with a solid ceiling `φc = c(x,y) − z`; union with `min(φg, φc)`. For mirrored relief, use opposing phases for `h` and `c`, bounded so their minimum clearance is preserved. | Keep the walking floor and passage route grounded; limit overhead relief so it cannot close the required clearance. Actual ceiling-walking requires a gravity and locomotion feature, not just a density recipe. |
|
||||
|
||||
## 2. World type catalogue
|
||||
|
||||
The existing archetypes and parameter structures are documented in the type definitions and architecture map. The “new” entries below are field recipes or overlays unless stated otherwise. Authoring can use generator parameters and composer recipes, while decorations, landmarks, and resolved SDF stamps provide bounded content features. ([types](</home/jahni/VoxelM/Plugins/VoxelForge/Source/VoxelForge/Public/VoxelStrateTypes.h:175>), [decorations and landmarks](</home/jahni/VoxelM/Plugins/VoxelForge/ARCHITECTURE.md:267>), [shared SDF stamps](</home/jahni/VoxelM/Plugins/VoxelForge/ARCHITECTURE.md:2239>))
|
||||
|
||||
| World type | Fantasy and field idea | Reuse and authoring surface | Walkability risk | Air/solid proof and performance risk |
|
||||
|---|---|---|---|---|
|
||||
| **SurfaceWorld — existing** | Underground outdoors: hills, basins, and a ceiling “sky.” Heightfield with ground below and a shaped cap above. | `FSurfaceGenerationParams`, heightfield, biome, and ceiling recipes. | Terrain grade and route placement need a guaranteed low-slope path. | Strong candidate: local height bounds can certify solid below and air above; keep noise and warps bounded. |
|
||||
| **FlatPlain / CrystalChamber — existing** | Broad underground plain between floor and ceiling; crystals can hang overhead. | Shared slab field; add crystals as decorations or bounded fill features. | Low risk if columns and ceiling formations do not obstruct the route or fight spaces. | Low field complexity: bound floor, cap, and finite columns independently. |
|
||||
| **TunnelNetwork / Underwater — existing** | Natural chambers, galleries, and flooded passages. Room graph and tunnel field; water is a separate medium layer. | Existing cave parameters and tunnel stack; existing water-table system. | Graph connectivity and dry or breathable route placement need checks. | Usually solid-base: solid is easy to prove outside carve bounds; air requires tight tunnel and noise bounds. Water does not change density proofs. |
|
||||
| **Maze — existing** | Deliberate, branching passage topology. Lattice corridors represented by capsules. | Existing maze field and per-cell cache; parameterize width, spacing, and loops. | Tight corridors can fail combat and multiplayer clearance; reserve larger rooms. | Local cell and corridor bounds give useful proofs. Parent-tree connectivity is designed into topology. |
|
||||
| **VerticalShafts — existing** | Vertical drops, ledges, and sparse cross-links. | Existing shaft field, ledges, connectors, and spatial cache. | Very high fall and route risk; ledges and passage landings must connect. | Cell-local shafts and connector bounds are promising; keep neighbourhood generation out of per-sample evaluation. |
|
||||
| **FloatingIslands — existing** | Open void with suspended, walkable land. | Existing island field, connector plan, and island surface parameters. | High risk: landings and links must be connected, supported, and capsule-safe. | Poor today: R19 found broad influence bounds, 21,504 fallback/unknown proof blocks, and zero checked blocks in the cited proof run. |
|
||||
| **Giant cavern / chasm / canyon** | Cathedral spaces, deep rifts, and eroded valleys. Scale room graphs up, use chasm disturbances, or carve canyon faces into a surface field. | TunnelNetwork, disturbance fields, and SurfaceWorld cliffs/overhangs. | Large voids need bridges or a route around them; preserve fight areas and sightlines. | Moderate. Bounded rooms and chasms can be culled; broad unbounded noise makes cheap proofs harder. |
|
||||
| **Honeycomb / bubble rock** | Cellular chambers separated by thin rock webs. Use a bounded lattice of ellipsoids or rounded cells. | New recipe over existing SDF/carve operations; author spacing, radius, and connection rules. | Thin walls, dead-end bubbles, and accidental isolation are the main hazards. | Good with bounded per-cell features and a cell-neighbour index; weak with unrestricted cellular noise. |
|
||||
| **Flooded karst** | Water-filled sinks and connected cave chambers. Karst geometry plus a controlled water table. | TunnelNetwork/room graph and the existing water layer; author flood level and dry route. | Swimming, visibility, and air pockets make route design more demanding. | Density proof remains that of the cave field; water level is cheap to classify separately. |
|
||||
| **Lava tubes** | Smooth, long, ribbed galleries with a hazardous flow. Use curved tunnel segments, optional parallel ridges, and a lava surface or volume. | TunnelNetwork and cave ribbing; author lava as hazard/material/content. | Hazard placement must leave a clear route and fight space. | Bounded tube capsules are tractable; bound ribbing displacement and keep lava separate from solid density. |
|
||||
| **Root / fungal world** | Thick roots, bulbs, and mushroom-like growths invading a cavern. Use branch capsules and bounded blobs. | Cave field plus fill stamps, surface decorations, and landmark profiles. | Roots can block corridors or create inaccessible overhangs. | Good with a deterministic branch graph and per-tile BVH; poor if each sample scans all branches. |
|
||||
| **Inverted world** | Ceiling forms dominate; slopes and hanging land masses confuse orientation. | Ceiling heightfield, bounded stamps, and cave decorations. | Visual inversion is straightforward; walk-on-ceiling traversal requires gravity, collision, and navigation support. | Ceiling intervals are manageable; gravity changes are a broader gameplay and networking feature. |
|
||||
| **Ruins / megastructure** | Repeated halls, shafts, arches, and colossal rooms. Grid-aligned modules or bounded SDF set-pieces. | Maze/room graph and existing ellipsoid, arch, pillar, and dais stamps. | Door alignment, connectivity, and fight-room dimensions need explicit checks. | Strong if modules are bounded and indexed by BVH; avoid a per-voxel scan of every module. |
|
||||
| **Crystal forest** | Stalagmites, stalactites, or faceted trunks filling a chamber. | CrystalChamber or cavern field plus instanced decorations; use fill stamps only for structural crystals. | Dense placement can reduce capsule clearance and fight space. | Decoration is cheaper than making every crystal a density feature; stamp count still needs local bounds. |
|
||||
| **Dreamcore / liminal landscape** | Repeat hills, planes, oversized objects, nested rooms, or mirrored terrain. | New analytic recipe over heightfields and bounded stamps; composer parameters and rare theme/content tags. | Keep the route safe while scenic surfaces can be steep or obstructed. | Strong if periodic extrema are computed per box and all anomalies have finite support. |
|
||||
|
||||
## 3. Ranked starting set
|
||||
|
||||
These are qualitative cost estimates from field structure and reuse, not measured timings. The 1-second target still needs a defined scope and owner measurements.
|
||||
|
||||
| Rank | Generator family to start with | Variety per cost | VR impact | Fit and gate |
|
||||
|---:|---|---|---|---|
|
||||
| 1 | **Surface and slab landscapes** | High | High | Reuse mature heightfields and slabs for ordinary, plausible strates. Keep them common so anomalies have contrast. |
|
||||
| 2 | **Natural caves, giant chambers, chasms, and canyons** | High | Very high | Build on TunnelNetwork and existing disturbances; scale chambers and vary topology before adding a separate evaluator. |
|
||||
| 3 | **Liminal analytic landscapes** | High | High | A few periodic functions and bounded stamps support several strong variants. Make them rare; the composer already treats geometric outliers as naturally uncommon. ([COMPOSER-NOTES.md](</home/jahni/VoxelM/Plugins/VoxelForge/COMPOSER-NOTES.md:834>)) |
|
||||
| 4 | **VerticalShafts** | Medium | Very high | Existing field with strong vertical identity. Gate on connected ledges, safe landings, and player-fit passages. |
|
||||
| 5 | **Maze / megastructure** | High | High | Reuse the connected maze topology; compose ruins as repeated modules and stamps. Verify fight-space size. |
|
||||
| 6 | **FloatingIslands** | High visually | Very high | Keep as a supported target, with proof tightening as its promotion gate. R19’s 10× gap against SurfaceWorld and large unknown count make it a poor near-term performance baseline. ([Research19](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research19/REPORT.md>)) |
|
||||
|
||||
Treat flooded karst and lava tubes as themed tunnel recipes at first. Treat crystal forests and root growth as content or bounded feature layers. That provides variety without requiring a new evaluator for each material theme.
|
||||
|
||||
## 4. Design for performance
|
||||
|
||||
R6’s contract is the right architecture for new types: immutable, coordinate-based field evaluation; conservative influence bounds; an interval/classification query for each box; and an explicit unknown fallback. The generator does not own transitions, boundary bands, or passage geometry. ([Research6](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research6/REPORT.md>))
|
||||
|
||||
- Give every feature a stable ID and conservative AABB that includes warp, blend, and displacement. Build a deterministic spatial grid or BVH once per tile domain, including the mesher’s normal halo.
|
||||
- Propagate tight two-sided intervals through the field. For periodic functions, compute extrema over the queried box; for noise, include proven amplitude and gradient bounds. Mark uncertain boxes mixed and evaluate them.
|
||||
- Keep per-sample work local: no global feature scans, manager lookup, or mutable random decisions. Preserve operation order and output identity.
|
||||
- Optimize both air-first and solid-first families. Air-first fields need tight solid-support bounds to skip empty regions; solid-base caves need bounded carve fields to certify solid. Geometry AABBs alone cannot certify arbitrary density values. ([ARCHITECTURE §8.23](</home/jahni/VoxelM/Plugins/VoxelForge/ARCHITECTURE.md:1355>))
|
||||
- Measure cold whole-view time and playable-ring readiness separately. R19 measured about 1.9 s for the SurfaceWorld whole view and about 19 s for FloatingIslands; the near-neighborhood figures were about 0.5 s and 1.6 s. A new recipe should not be called “around 1 s” until its benchmark scope is explicit. ([Research19](</home/jahni/VoxelM/Plugins/VoxelForge/Standalone/Research/WorldAssemblerM3/Research19/REPORT.md>))
|
||||
|
||||
I found no L51-named report in this checkout. The documented proof lesson in R6 and M3 Round 6 is that unknown boxes must be evaluated, while loose bounds can make an air-heavy field expensive even when its field math is simple.
|
||||
|
||||
## Questions for the owner
|
||||
|
||||
1. Does “about 1 second” mean the first playable near ring or the entire cold streamed view?
|
||||
2. Should inverted strata remain visual geometry under normal VR gravity, or should literal wall and ceiling walking be in scope?
|
||||
Reference in new issue
Block a user