docs: #100 ship + indoor-cell culling investigation handoff

Session-end documentation for the issue #100 ship and the visibility-
culling investigation handoff for the next session.

Three documents land together:

  - docs/superpowers/plans/2026-05-25-issue-100-terrain-cutout.md
    (the 3-task plan that drove this session's f48c74a / a64e6f2 /
    84e3b72 — never committed by Tasks 1-2)

  - docs/research/2026-05-25-issue-100-terrain-cutout-handoff.md
    (the predecessor session's smoking-gun research that drove the
    #100 fix — never committed by the prior session)

  - docs/research/2026-05-25-issue-100-shipped-and-culling-handoff.md
    (THIS session's handoff: what shipped, what visual-verification
    surfaced, the issue family map for #78 + #95 + the new cellar-
    stairs finding, root-cause hypothesis, retail anchors, WB
    references, do-not-retry list, and pickup prompt for the next
    session's investigation + plan + implementation)

Plus two updates to existing files:

  - CLAUDE.md — adds a ship paragraph for #100 to the M1.5 progress
    block. References the new handoff doc as the next-session pickup
    point.

  - docs/ISSUES.md #78 — broadens scope from "outdoor stabs visible
    through floor" to "outdoor stabs + terrain mesh visible inside
    EnvCells". Adds the 2026-05-25 cellar-stairs evidence (per user
    direction: not filed as new issue; treated as evidence
    reinforcing #78's hypothesis #2). Promotes hypothesis #2 to
    "high confidence as of 2026-05-25" and adds the retail anchor
    (acclient_2013_pseudo_c.txt:311397 CEnvCell::find_visible_child_cell).
    Acceptance criteria broadened to include the cellar-stairs case.

Next session: pickup prompt at the bottom of the new handoff doc
drives a /investigate → writing-plans → subagent-driven-development
pass on indoor-cell visibility culling — the work that closes #78
+ cellar-stairs together, and possibly #95 if the infrastructure
overlaps.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-25 22:17:51 +02:00
parent 84e3b72b27
commit 4cbfbf98af
5 changed files with 1431 additions and 11 deletions

View file

@ -131,11 +131,11 @@ the indoor-lighting plumbing.
---
## #78 — Outdoor stabs/buildings visible through the rendered floor
## #78 — Outdoor geometry (stabs + terrain mesh) visible inside EnvCells
**Status:** OPEN
**Severity:** HIGH (immediate visual jank now that floors render)
**Filed:** 2026-05-19
**Status:** OPEN — **next-session investigation target (2026-05-25)**
**Severity:** HIGH (immediate visual jank; broadened scope per 2026-05-25 PM finding)
**Filed:** 2026-05-19 (broadened 2026-05-25)
**Component:** rendering, visibility
**Description:** Standing inside Holtburg Inn looking at the floor or
@ -144,30 +144,64 @@ world position + scale — but visible THROUGH the floor and walls. As if
the cell mesh is rendered but doesn't occlude or stencil-cull what's
behind it.
**Additional evidence (2026-05-25 PM, post-#100 visual verification):**
After issue #100 shipped (commits `f48c74a`, `a64e6f2`, `84e3b72`) and
removed the `hiddenTerrainCells` cell-collapse mechanism, the OUTDOOR
TERRAIN MESH is now (correctly per retail) rendered everywhere on the
landblock — including in 3D regions occupied by indoor EnvCell volumes.
Visual verification at a Holtburg cottage cellar showed a sharp-edged
rectangular grass patch (outdoor terrain at Z≈93.99) rendering over the
cellar stair geometry at certain camera angles. Clears when camera
moves closer (cottage walls + stair treads geometrically occlude the
terrain from new vantage points). Gameplay unaffected. **This is the
same root cause as the existing #78 hypothesis #2** ("outdoor stabs not
culled when player in EnvCell"), just with outdoor terrain mesh
affected in addition to outdoor stab entities. Per user direction,
NOT filed as a new issue — additional evidence reinforces #78's
hypothesis #2, broadens scope of the fix to include terrain culling.
**Root cause / status:** Two plausible causes:
1. The `+0.02f` Z bump applied to cell origin at `GameWindow.cs:5362`
pushes the floor mesh 2 cm above terrain, so depth test correctly
occludes terrain. But OUTDOOR STABS (landblock-baked building geometry)
at the same X,Y may have Z values comparable to or higher than the
cell-mesh floor, producing z-fighting / see-through.
2. Outdoor stabs aren't being culled when the player is inside an
2. **(High confidence as of 2026-05-25)** Outdoor geometry (stabs AND
terrain mesh) isn't being culled when the player is inside an
EnvCell — this is the Phase 1 Task 3 deferred work
("Cull outdoor stabs when indoors via VisibleCellIds"). WB has a
`RenderInsideOut` stencil pipeline (`references/WorldBuilder/Chorizite.OpenGLSDLBackend/Lib/VisibilityManager.cs`)
that acdream never invokes.
that acdream never invokes. Retail anchor:
`docs/research/named-retail/acclient_2013_pseudo_c.txt:311397`
(`CEnvCell::find_visible_child_cell` at address `0x0052dc50`,
called from `acclient_2013_pseudo_c.txt:280028`).
**Files:**
- `src/AcDream.App/Rendering/Wb/WbDrawDispatcher.cs` (per-entity walk —
consider gating outdoor stab entities on visible-cell membership).
the dispatcher already filters by `entity.ParentCellId ∈
visibleCellIds` but outdoor stabs have `ParentCellId == null` so they
always pass; needs an explicit indoor-camera gate).
- `src/AcDream.App/Rendering/TerrainModernRenderer.cs` (currently
renders all loaded landblock terrain unconditionally; needs
visibility gating when camera resolves to an indoor cell).
- `src/AcDream.App/Rendering/CellVisibility.cs:222+` (`ComputeVisibility`
returns `VisibleCellIds`; the dispatcher already filters by
`entity.ParentCellId ∈ visibleCellIds` but outdoor stabs have
`ParentCellId == null` so they always pass).
returns `VisibleCellIds`; existing portal-LOS infrastructure to build on).
- `references/WorldBuilder/Chorizite.OpenGLSDLBackend/Lib/VisibilityManager.cs`
(`RenderInsideOut` pipeline — reference implementation, never invoked).
**Acceptance:** Standing inside a sealed-interior cell, no outdoor
geometry is visible through floor/walls. Standing where a cell has a
real outdoor portal (door open, window) outdoor geometry is correctly
visible through the portal.
visible through the portal. Cellar-stairs case (2026-05-25 finding):
standing in a Holtburg cottage cellar at any camera angle, no outdoor
terrain mesh visible over the stair geometry.
**Research:**
[`docs/research/2026-05-25-issue-100-shipped-and-culling-handoff.md`](research/2026-05-25-issue-100-shipped-and-culling-handoff.md)
— full session handoff with cellar-stairs evidence, family map (#78 +
#95 + cellar-stairs), root-cause hypothesis, retail anchors, WB
references, do-not-retry list, and pickup prompt for the
investigation session.
---