Docs: 2026-08-08 session log — A0 gate, readability pass, arena regression, seabed relief kit
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
# 2026-08-08 — A0 gate: readability pass, arena regression, seabed relief kit
|
||||
|
||||
Operator ran the eyes-on gates with me. A0 did **not** pass on the first two looks, and both rejections were
|
||||
correct and diagnosable — neither was taste.
|
||||
|
||||
## The gate, iteration by iteration
|
||||
|
||||
**"It looks flat and static."** Both had measurable causes.
|
||||
- *Flat:* `KeyWarm` — the only shadow-casting directional, i.e. the light that models form — sat at **0.15** while
|
||||
`GloamFill` sat at **0.22**. Fill brighter than key destroys form by definition. The 07-21 value pass had fixed an
|
||||
inverted hierarchy by cutting the key to nothing rather than rebalancing.
|
||||
- *Static:* the scene had **zero** motion sources. `StagingAmbiance` was attached to nothing, and its flora wiring
|
||||
searched for a `FloraLights` parent that exists in `Game.unity`, not ArtStaging.
|
||||
|
||||
**Then the gate itself was found to be invalid.** ArtStaging judges **static glTF bakes** — 0 SkinnedMeshRenderers,
|
||||
0 bones, no Avatar, on `Shader Graphs/glTF-pbrMetallicRoughness`. The shipping characters are 22-SMR humanoid rigs on
|
||||
`AnimatedLitShader` + `EmissiveGloamSkinned` with live Animators. ArtStaging cannot animate by construction and its
|
||||
material response is not the game's. **Operator moved the gate into `Game.unity`.** ArtStaging is now a lighting lab.
|
||||
|
||||
## What moving the gate immediately exposed
|
||||
|
||||
- **`Death` had ZERO outgoing transitions** on both AC_PlayerTopDown and AC_EnemyTopDown. Any State enters on
|
||||
`IsDead`; nothing leaves. The player ghost is a persistent entity, so once you died you rendered **sprawled on the
|
||||
seabed permanently** — sim fully respawned, moving and fighting, visually a corpse.
|
||||
- **Green meadow motes.** `AmbientMotionSystem`'s drift was still the deleted biome system: key 0 = "meadow",
|
||||
`MeadowMoteColor (0.62,0.85,0.60)`, 600 of them following the camera. Its `x>500` region probe pointed at space with
|
||||
zero renderers. Also hard **squares** — `MakeParticleMaterial` built `Sprites/Default` with no texture.
|
||||
- **Lighting debris in the shipping scene:** a stock white `Directional Light` (1.05, Soft) outranking KeyWarm as a
|
||||
second shadow caster, plus 6 orphaned `LandmarkLights`, four at x=1030/1530 lighting a kilometre of empty water.
|
||||
|
||||
## The self-inflicted one
|
||||
|
||||
I added camera drift to `StagingAmbiance`, which rides `Env_SeabedKit.prefab` — instantiated by **`Game.unity` too**.
|
||||
It wrote `_cam.position` every LateUpdate against `PrototypeCameraRig`. Camera y oscillated **1.157 ↔ 13.559 at 7.43
|
||||
u/tick**; the operator saw it in one second ("so far zoomed in and shaking"). **Every still I had taken looked
|
||||
correctly framed** — a two-writer transform fight aliases to "fine in half the frames". Now a CLAUDE.md ★ rule.
|
||||
|
||||
## Readability: not a brightness problem
|
||||
|
||||
Operator: *"a little too dark to play, not very readable."* Measured, and the cause was materials + atmosphere:
|
||||
seabed albedo **(0.08,0.12,0.15)** (a near-black floor reflects ~10% of anything), fog fading to near-black so depth
|
||||
read as **void** rather than murk, `contrast +10` on top of ACES crushing the low end twice, vignette 0.28.
|
||||
|
||||
Murk pass: fog → (0.06,0.20,0.25), seabed albedo → (0.18,0.26,0.30), contrast → 4, vignette → 0.16, camera
|
||||
Distance 17 → 14. **That fixed the void and inverted figure-ground**, which the numbers caught:
|
||||
|
||||
| | before | after |
|
||||
|---|---|---|
|
||||
| player | 0.144 | **0.320** |
|
||||
| rock | 0.269 | 0.282 |
|
||||
| flora | 0.258 | 0.250 |
|
||||
| murk | 0.109 | 0.109 |
|
||||
|
||||
The protagonist was the **second-darkest thing on screen**. The shoulder lamp is a forward spot tilted 26° down — it
|
||||
lights the seabed ahead and never its wearer. Raising the key would lift the scenery equally and leave the ratio
|
||||
unchanged; only a light that **travels with the diver** changes it. Added `~SuitGlow` (FeelConfig knobs, 0 = off).
|
||||
Figure-to-murk contrast **1.32× → 2.94×** with scene brightness unchanged.
|
||||
|
||||
## "The world is very static" — a third orphan
|
||||
|
||||
`RoomFieldSystem` was deleted with the run FSM (62e48a3b0) and was the only consumer of the
|
||||
`ClutterFieldSpawner` / `CoverFieldSpawner` / `GeyserFieldSpawner` singletons. They kept baking; nothing read them.
|
||||
**Geyser 0, BlightClutter 0** despite the scene being configured for 14 + 3 + 2. Replaced with `ArenaFieldSystem`
|
||||
(gym-scoped, seeds once, never tears down) → **17 solids + 2 staggered geysers**.
|
||||
|
||||
Placement policy (operator delegated the call): clear core 5 u · solids in the fought-in band 6–13 u, which is also
|
||||
where the travelling light reaches (**a prop outside the lit radius reads as an invisible wall**) · min spacing 2.6 u
|
||||
enforced across clutter AND cover on one shared occupancy list — a **navigation** guarantee, since enemies have no
|
||||
pathfinding · explosives beyond 8 u. Verified: radius 7.89–12.95, min gap 2.79, 0 explosives inside 8 u.
|
||||
|
||||
## Seabed relief kit (Track 2)
|
||||
|
||||
Operator wanted non-flat ground. **The walkable surface must stay flat** — the CC is configured for a plane
|
||||
(`SnapToGround=false`, gravity `float3.zero`) and enemies have no pathfinding, so real elevation is a locomotion and
|
||||
navigation task, not an art one. The kit therefore avoids the 0.3–0.6 m danger band entirely:
|
||||
|
||||
| Piece | Tris | Height | Collision |
|
||||
|---|---|---|---|
|
||||
| `SM_Seabed_Hollow_A` | 442 | below plane | none |
|
||||
| `SM_Seabed_Dunes_A` | 442 | ±0.4 m crests | none |
|
||||
| `SM_Seabed_Ridge_A` | 55 | ~1.2 m | Environment |
|
||||
| `SM_Seabed_Outcrop_A` | 120 | ~1.4 m | Environment |
|
||||
| `SM_Seabed_Shelf_A` | 96 | ~1.4 m | Environment |
|
||||
|
||||
1155 tris total, all under the ≤800/prop budget, one shared palette material, faceted. Source
|
||||
`ArtSource/Blender/Env_SeabedReliefKit.blend` + five per-piece `.glb` (modular, so the Phase-2 pocket generator can
|
||||
place them individually rather than inheriting a bespoke landscape).
|
||||
|
||||
**Two art lessons banked.** First attempt encoded relief as **albedo banding** from the atlas — at top-down, flat
|
||||
colour bands read as a *printed pattern*, not form (the hollow looked like a bullseye, the ripple sheet like woven
|
||||
basketwork). The style bible is explicit: the read is *shape + light*. Uniform albedo + real geometry + let the
|
||||
faceted normals shade. Second: dropping whole quads to make an organic outline gives **stair-stepped edges** — build
|
||||
the piece in **polar** coordinates so the boundary follows `R(theta)` exactly.
|
||||
|
||||
## Also worth recording
|
||||
|
||||
- Unity crashed on Play. Not gameplay code: `UnityEditor.Search.LMDBIndexStorage:RemoveDocuments` on a background
|
||||
thread racing `OnBeforeAssemblyReload`. The Search index was **2.2 GB**, built against the pre-purge 14 GB project,
|
||||
with a huge backlog of documents to remove after the purge. Operator cleared `Library/Search`; it rebuilds.
|
||||
- **A measurement taken after mutating server state is not evidence.** Three separate "frozen movers" readings were
|
||||
artifacts of teleporting the player around a long-running Play session (the CC snapped it back; I was measuring
|
||||
against a position the server never had). Only the clean, unmutated run counted: closest approach 1.40 u.
|
||||
|
||||
## Still open
|
||||
|
||||
1. **A0 sign-off** — the readability pass is in; the operator has not re-judged.
|
||||
2. **Unity bake of the seabed kit** — import the five glb, shared `M_Lit_Palette`, collider policy (none on
|
||||
hollow/dunes, `Environment` on ridge/outcrop/shelf, mesh Read/Write ON or the collider silently does not bake).
|
||||
3. **Track 1 (world response)** — silt kicked up by strides, flora parting, creature scatter, current drift. Not
|
||||
started. `AmbientMotionSystem` has a rustle layer and `CombatFeedbackSystem` a `SiltPuff`; given today's rate of
|
||||
orphaned presentation, check both actually fire before building anything new.
|
||||
4. **Phase-1 fun gate** — still never run. The kit only started working in the shipping scene yesterday.
|
||||
|
||||
## Related
|
||||
|
||||
[[DR-054_Audit_Purge_2026-08]] · [[Roadmap_Lantern_Slice]] · [[Art_Direction_Lantern]] ·
|
||||
[[Lantern_Art_Pipeline_Recipes]] · [[CLAUDE_Build_Gotchas_Archive]]
|
||||
Reference in New Issue
Block a user