Luna, integration round 3, from the owner's four in-game screenshots: - Capsule rings at the opening and the shaft continuing through the cave room were Core world defects: the synthetic bore is removed and the opening gets a finite origin room and floor (solid below). New world version, W1/W8/W16 identical: density a8bcb72d41092503, mesh 90f29ba15e24579f, payload 82c6b489e7bb7fd7, topology 7b99448a1f844f2c. - B-side landing and surface: headless coverage found no missing tiles or LOD-transition gaps (960 / 640 fine tiles compiled after travel); best explained by Core's missing SurfaceWorld representation. Null-RHI cannot rule out a presentation-only issue. - Core mode GetBiomeAtWorldLocation now answers (e.g. Biome_Surface_Plain); biome terrain itself is not generated yet (proposal: native Core SurfaceWorld evaluator). Owner checked the Step29 viewer himself: the surface strate type is absent there too. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MmSoF64BbRFmk9C3p1VsBJ
3.6 KiB
3.6 KiB
CLAUDE.md — VoxelForge
UE5 density-field voxel terrain plugin (strates / Marching Cubes / async streaming). Don't re-read the whole plugin — use the map.
⛔ #1 rule: NEVER build or compile
Jahni runs every build himself (he has the editor open; running it via Claude just burns cost). When code changes are done, stop and say "ready to build" + list likely compile-error spots, then wait for his results / pasted errors. Same for in-editor checks — ask for a screenshot, don't try to run anything.
Read first (in order, load only what the task needs)
- CODEMAP.md — ALWAYS. Navigation: what it is, data-flow (§2), symbol→
file:lineindex (§3), "I want to change X → go here" (§5), conventions & gotchas (§6). Trust symbol names over line numbers (lines drift). - ARCHITECTURE.md — when touching generation / strates / passages / biomes.
The deep design (archetypes, (0,0) spine, disturbances, content/atmosphere, biomes) and the
§8.10performance invariants ("don't regress"). - fable-idea.md — before planning PERF or FEATURE work. Ranked perf+feature roadmap with verified hot spots; check it so you don't re-propose done/known work. (A perf pass already shipped: game thread solved ~3.94 ms, CullTiles spiral fixed, region-granular foliage.)
- REVIEW_FINDINGS.md — open quality/cleanup items (cross-check vs fable-idea before acting; some may already be addressed).
Hard rules (these prevent real bugs — verify against code, don't assume)
- Density sign: negative = solid, positive = air (MC convention at the mesher).
FVoxelModification::Strengthnegative = carve. The #1 source of confusion. - Density functions take VOXEL coords, not cm. The legacy plugin field uses 12.5 cm voxels;
the opt-in Core field uses 25 cm voxels and its own tile keys. One legacy 32³ chunk is 4 m.
Conversions live in
VoxelTypes.hand the Core bridge; do not mix scales in queries, anchors, edits, or surface lookups. - Determinism: all randomness = hash of (coord, seed, strateIndex). No RNG state — same seed ⇒ same world. Player edits (diff layer) are the only non-deterministic overlay.
- Core world invariants: Core density keeps the same sign (negative solid, positive air), but Core voxel coordinates are 25 cm. Worker-count changes must preserve hashes; Core world edits are intentional world-version changes and must retain finite, walkable strate entrances and exits.
- Async safety: worker tasks only READ Generator/Mesher, must check
bShuttingDown, and return via the result queues —ProcessQueueand itsCriticalProcessQueue/EditedProcessQueue/NearProcessQueuesiblings (all must stayEQueueMode::Mpsc).EndPlayblocks onActiveTaskCount → 0. - Carry the
Epochthrough any new async path (stale results are dropped on mismatch). - Don't "optimize" the perf invariants in ARCHITECTURE
§8.10— thethread_localbox-valid caches, two-pass MC loop, SSE noise, and clipmap streaming are intentional. - Never edit
Binaries/,Intermediate/,*.generated.h. Comments are French + English — match the surrounding file.
Discipline (keep the map alive)
- Add / rename / move a symbol → update its CODEMAP §3 row (symbol-first; line is a hint).
- Change generation/strate design → update ARCHITECTURE §8.
- Resolve a checklist item → tick it in REVIEW_FINDINGS.md.
- Don't duplicate content across these files — each has one job (map / design / findings / rules).