Docs: DR-025 world redo (natural-frontier biomes) + session log; CLAUDE.md art pointer

Session log + DR-025 for the off-world natural-frontier world redo; mark PolygonNatureBiomes in-use in the Synty inventory; archive the long-form gotchas (PNB ring-mesh white-torus, edit-mode region-fog preview, EG-entity vs cosmetic, execute_code DeleteAsset block, shadow-cast hygiene). CLAUDE.md: net-zero art pointer to DR-025 (39882 B, under the 40KB budget).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-07 20:21:09 -07:00
parent 906efe9a6f
commit 4ebaba9933
5 changed files with 237 additions and 2 deletions
@@ -321,3 +321,44 @@ Full rules: `~/.claude/skills/dots-dev/references/dots-conventions.md` (Windows:
`.mcp.json` is committed + portable (`${CLAUDE_PROJECT_DIR}`); the **`dots-dev` skill travels with the repo** (`.claude/skills/dots-dev/`). Each machine still needs: (1) `uv`/`uvx` + Obsidian app + `obsidian-cli` (the `unity-mcp-skill` + native `memory/` are machine-local, don't sync); (2) basic-memory registration — `uvx basic-memory project add gamevault "<repo>/Docs/Vault" --default` then `uvx basic-memory reindex --full --search --embeddings --project gamevault`; (3) Unity 6.4 open + the Unity-MCP bridge connected (`mcpforunity://editor/state``ready_for_tools`).
<!-- END snapshot -->
## 2026-06-08 — World environment redo to Synty nature biomes ([[DR-025_World_Environment_Redo_Natural_Frontier]])
Long-form lessons from the off-world-natural-frontier world redo (Meadow_Forest base + Arid_Desert expedition as
cosmetic classic-URP biomes in `Game.unity`; region-aware `WorldAtmosphereSystem` fog/ambient cross-fade).
- **Synty PNB_Core fog-ring / cloud-ring PREFABS are MESHES that render as a bright white torus band** at gameplay
scale — they do NOT read as soft haze. Do not place them for atmosphere; the global `RenderSettings` fog
(exp-squared, low density) gives the haze, and a `Skybox/Procedural` material gives the sky. (All 4 ring instances
were deleted in review.)
- **Two regions, one scene → use a `Skybox/Procedural` MATERIAL on `RenderSettings.skybox`, never a Synty skydome
MESH.** All Synty biome "sky" materials use one `SkyDome.shadergraph` authored for a dome MESH centred at origin —
a single dome can't cover the expedition at x=1000, and per-region domes double the cost. The procedural skybox is
infinite and region-agnostic; per-biome mood comes from the cross-faded fog/ambient instead.
- **Edit-mode screenshots show the BASE region's BAKED `RenderSettings` over the +1000 expedition**, because the
runtime cross-fade (`WorldAtmosphereSystem`, a `ClientSimulation` presentation `SystemBase`) only runs in Play.
The desert therefore looks washed/cool in an edit-mode capture. To preview a region's TRUE in-Play look without
entering Play: temporarily bake that region's `RenderSettings` (fog colour/density + ambientSkyColor) via
`execute_code`, screenshot, then revert. The desert read correctly the moment its warm-orange fog was baked.
- **A cyan capsule at each region centre is a baked Gameplay-SUBSCENE entity** (rendered by Entities Graphics with
the Aether material), NOT cosmetic dressing and NOT removable in an art pass. `Object.FindObjectsByType<MeshRenderer>`
returns nothing for it — EG entities use `BatchRendererGroup`, not `MeshRenderer`. Confirms the cosmetic/gameplay
split: an art pass touches only `Game.unity` GameObjects, never the subscene.
- **`execute_code` safety-checks BLOCK `AssetDatabase.DeleteAsset`** (and `File.Delete`, `Process.Start`, etc.) — the
whole snippet is rejected pre-execution (nothing runs, so no partial state). For idempotent asset clones, rely on
`AssetDatabase.CopyAsset` over an absent destination (it no-ops/false on an existing one and you load that), or
pass `safety_checks=false` deliberately.
- **Shadow-cast hygiene for hundreds of cosmetic props:** nothing in the project set `ShadowCastingMode.Off`, so all
~377 placed meshes + the 2 ground planes cast realtime soft directional shadows (4-cascade, soft-quality-3) — a
large depth-pass bill for sub-pixel foliage shadows that read as noise top-down. Fix: walk the biome roots and set
`Renderer.shadowCastingMode = Off` on small props (name heuristic + combined-AABB extent < ~1.6m) and the flat
ground planes, keeping it ON for trees/cliffs/landmarks (254 off / 149 kept here). Forward+ clustered lighting
makes 4 simultaneous additional point lights/region a non-issue (the per-object `AdditionalLightsPerObjectLimit`
is ignored under `RenderingMode: 2`); non-static cosmetics + SRP Batcher is the right batching choice (no static
combine, re-tint-friendly).
- **Region-aware presentation cross-fade pattern:** a client-only `SystemBase` in `PresentationSystemGroup` that
reads `Camera.main.transform.position.x` and lerps `RenderSettings` (fog/ambient) across the X>500 boundary
(mirrors `HudSystem.ExpeditionRegionXMin`). No ECS query, observe-only, `"Game"`-scene guarded so the menu isn't
restyled; knobs in a `WorldFeelConfig`-style MonoBehaviour with `SubsystemRegistration` static reset + null-safe
fallbacks. Zero sim/netcode impact (writes only global managed `RenderSettings`; `ClientSimulation` filter keeps
it off the server/headless world).