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:
@@ -0,0 +1,92 @@
|
||||
---
|
||||
id: DR-025
|
||||
title: World environment redo — off-world natural frontier (Meadow_Forest base + Arid_Desert expedition) as cosmetic biomes + region-aware atmosphere cross-fade
|
||||
status: accepted
|
||||
date: 2026-06-08
|
||||
tags:
|
||||
- decision
|
||||
- art
|
||||
- synty
|
||||
- environment
|
||||
- world
|
||||
- urp
|
||||
- presentation
|
||||
- biomes
|
||||
permalink: gamevault/07-sessions/decisions/dr-025-world-environment-redo-natural-frontier
|
||||
---
|
||||
|
||||
# DR-025 — World environment redo: off-world natural frontier
|
||||
|
||||
## Context
|
||||
|
||||
The world was a flat-shaded Synty **sci-fi colony** (`SyntyWorld` skyline ring + plaza + space skybox at origin,
|
||||
[[DR-011_Synty_World_VFX_Integration]]) with a 21-piece rock-basin Blightfield at +1000 ([[DR-018_World_Space_Cohesion_Pass]]).
|
||||
The operator imported the Synty **PolygonNatureBiomes** (Arid_Desert + Meadow_Forest), **PolygonNature**, and
|
||||
**PNB_Core** packs and asked for a *major cleanup — redo the world with the new materials/terrain/models/foliage*.
|
||||
The [[Synty_Asset_Inventory]] had already pre-scoped these: *Arid_Desert → the +1000 expedition region,
|
||||
Meadow_Forest → the home base*. Intake fork (one `AskUserQuestion`): **off-world natural frontier** (nature ground
|
||||
+ foliage as the world's truth, sci-fi tech layered on top — keeps the locked cyan-ordered ↔ orange-wild duality of
|
||||
[[DR-015_The_Awakening_Engine_Fiction_Adoption]]) · **both regions** this pass.
|
||||
|
||||
## Decision
|
||||
|
||||
1. **Reuse the blessed cosmetic-GameObject pattern, full-replace the dressing.** All new world geometry is **cosmetic
|
||||
classic-URP GameObjects in `Game.unity`** (two roots `BaseBiome`@origin, `ExpeditionBiome`@(1000,0,0)) — NOT the
|
||||
`GameplaySubScene` (which owns collision/ghosts and is untouched). Every placed instance has its **colliders
|
||||
stripped** (inert to the DOTS PhysicsWorld anyway; the player CC sweeps only the baked subscene). The 8 old
|
||||
dressing roots were deleted. The 32×32 base buildable grid + the expedition walkable core stay **clear** — tall
|
||||
props ring the perimeter (a natural "bowl"), only flat/low non-blocking cover goes inside. All Synty biome shaders
|
||||
are **URP-native (`UniversalTarget` verified) → no conversion** (unlike the HDRP BefourStudios art).
|
||||
|
||||
2. **Two biomes, deterministically scattered.** `BaseBiome` = Meadow_Forest (grass ground plane, ~195 instances:
|
||||
tree-ring r20-30, wildflower/bush/rock/ground-cover bands, flat interior grass/flowers; landmarks: **Warpgate**
|
||||
hero gateway at the south edge facing center, cabin/windmill/well, a NE pond + waterwheel + lilies, 2 sci-fi
|
||||
crates staging the gate; 4 cyan Aether point lights; butterflies/sunbeam/petal/glow FX). `ExpeditionBiome` =
|
||||
Arid_Desert (sand ground plane, ~187 instances: cliff+spike perimeter ring r44-58, mid rock/cactus/bramble,
|
||||
crater + **alien-bone** scatter telling the dead-survey story, flat inner cover, far background hills, 5 hero rock
|
||||
silhouettes; landmarks: an abandoned **survey outpost** cluster NE — satellite/solar/turbines/tent/survey-level/
|
||||
sign — + an alien artefact + a rock-arch vista; 4 orange Aether point lights; dust/ash/sunray/tumbleweed/vulture
|
||||
FX). Bulk authoring via `execute_code` + `PrefabUtility` with a seeded LCG (deterministic), missing-path-safe
|
||||
preload (skip+report; 0 missing in practice).
|
||||
|
||||
3. **One global daylight; per-region atmosphere cross-faded at runtime.** A single warm directional sun + Trilight
|
||||
ambient + a `Skybox/Procedural` material (infinite → covers BOTH regions; a Synty skydome is a MESH at origin and
|
||||
can't) + a cloned daylight post-FX profile (`PostFX_Daylight.asset`: keep ACES, halve bloom/contrast/vignette,
|
||||
neutralise the dark-colony cool cast). Because the two regions share one scene/light/skybox, mood divergence is
|
||||
carried by **`WorldAtmosphereSystem`** — a client-only presentation `SystemBase`
|
||||
(`[WorldSystemFilter(ClientSimulation)]`, `PresentationSystemGroup`) that lerps `RenderSettings` fog colour/density
|
||||
+ ambient-sky between the cool-green meadow and warm-orange desert by camera world-X (mirrors `HudSystem`'s X>500
|
||||
region split). Pure presentation, observe-only, no ECS query, no sim/netcode impact; knobs live in a live-tunable
|
||||
`WorldAtmosphereConfig` MonoBehaviour (the `WorldFeelConfig`/`VFXConfig` bridge idiom, `SubsystemRegistration`
|
||||
static reset, null-safe fallbacks). Guarded to the `"Game"` scene so the menu is never restyled.
|
||||
|
||||
## Consequences
|
||||
|
||||
- **Validated.** EditMode **214/214** (new presentation code broke none). Value-introspection: 832 renderers,
|
||||
**0 colliders**, **0 error/magenta materials**, 8 shadow-off point lights, 13 particle systems. Both biomes read
|
||||
as intended (hero shots in the session log). A **4-lens adversarial-review Workflow** confirmed the redo is
|
||||
*purely cosmetic* (no ghost/subscene/PhysicsWorld/sim leak; the system writes only `RenderSettings`) and drove
|
||||
three fixes before sign-off: (a) **perf** — disabled realtime shadow-casting on 254 small foliage instances + the
|
||||
2 ground planes (kept it on 149 trees/cliffs/landmarks); (b) **code** — aligned the no-config fallback fog
|
||||
densities to the tuned values; (c) **composition** — the desert read washed/flat, fixed by deleting bad fog-ring
|
||||
meshes, saturating the expedition fog, and adding 5 mid-ring hero rock silhouettes.
|
||||
- **No new asmdefs.** New code: `…/Client/Presentation/WorldAtmosphereSystem.cs` + `WorldAtmosphereConfig.cs`. New
|
||||
assets: `Sky_DaytimeProcedural.mat`, `PostFX_Daylight.asset`, and the two biome roots baked into `Game.unity`.
|
||||
Orthogonal to + additive over all gameplay; the gameplay subscene, ghosts, region split, and save schema are
|
||||
untouched.
|
||||
|
||||
## Gotchas (→ `_Meta/CLAUDE_Build_Gotchas_Archive.md`)
|
||||
|
||||
- **Synty PNB_Core fog-ring/cloud-ring MESHES render as a bright white torus** — don't place them; use
|
||||
`RenderSettings` fog for atmosphere.
|
||||
- **Edit-mode screenshots show the BASE region's baked fog over the +1000 expedition** (the runtime cross-fade only
|
||||
runs in Play) — preview a region's true look by temporarily baking that region's `RenderSettings`, then revert.
|
||||
- **A cyan capsule at each region centre is a baked Gameplay-subscene ENTITY** (Entities-Graphics-rendered, Aether
|
||||
material) — `FindObjectsByType<MeshRenderer>` won't find EG entities; it is gameplay, not cosmetic dressing.
|
||||
- **`AssetDatabase.DeleteAsset` is blocked by `execute_code` safety-checks** — rely on `CopyAsset` over an absent
|
||||
destination for idempotent asset clones (or run with `safety_checks=false`).
|
||||
|
||||
Builds on + reuses [[DR-011_Synty_World_VFX_Integration]] (cosmetic-GameObject world, collider-strip, no-conversion
|
||||
Synty), [[DR-018_World_Space_Cohesion_Pass]] (region dressing via `execute_code`/PrefabUtility, Aether palette),
|
||||
[[DR-013_M6_Aether_Cycle_Region_Split]] (the +1000 region split + X>500 boundary), and the client-presentation
|
||||
idiom of [[DR-009_GameFeel_Identity_FirstBlood]]. Serves the cohesive-world pillar in [[Pillars]].
|
||||
Reference in New Issue
Block a user