docs: abandon two-pipe render approach; scope Phase U (unified retail-faithful pipeline)

Decision (2026-05-30, with user): the WB-inherited two-pipe (inside/outside) render
split is the root cause of the indoor seam bugs (flap, missing/transparent walls,
terrain bleed) and cannot be seamless. Abandon A8/A8.F (#103); build ONE unified
pipeline driven by retail's PView portal visibility — seamless by construction. The
2026-05-30 camera-collision + physics viewer-cap work is kept (retail-faithful, but a
detour from the seam fix). New Phase U scoped; #103 superseded; CLAUDE.md / roadmap /
milestones updated; full decision + scope + next-session pickup prompt in
docs/research/2026-05-30-unified-render-pipeline-decision-and-handoff.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-05-30 11:35:41 +02:00
parent aae5300fea
commit 75b1df9cc3
5 changed files with 289 additions and 4 deletions

View file

@ -113,12 +113,47 @@ with no code changes lost — M1.5 doesn't touch WB-extracted territory.
### Milestone M1.5 — "Indoor world feels right" (ACTIVE — Phase O shipped; resuming from 2026-05-20 baseline)
The current top of the work order. Two phases (A6 + A7) inside one
milestone. M2 ("kill a drudge") is deferred until M1.5 lands —
drudges live in dungeons and the M2 demo target requires solid indoor
The current top of the work order. M2 ("kill a drudge") is deferred until M1.5
lands — drudges live in dungeons and the M2 demo target requires solid indoor
navigation. Full milestone block in
[`docs/plans/2026-05-12-milestones.md`](2026-05-12-milestones.md).
**2026-05-30 — render-pipeline pivot.** Indoor *rendering* (the seamless in/out
seam: the flap, missing/transparent walls, terrain bleed) is NO LONGER pursued via
the WB-inherited two-pipe (inside/outside) split. That whole approach (Phase A8/A8.F,
issue #103) is **abandoned**. Indoor rendering is now **Phase U** below. Phase A6
(physics) and A7 (lighting) inside M1.5 are unaffected.
#### Phase U — Unified retail-faithful render pipeline (NEW — supersedes A8/A8.F)
**Decision (2026-05-30):** replace the two render paths (outdoor `Draw` +
`RenderInsideOut` stencil, toggled on `cameraInsideBuilding`) with ONE pipeline driven
by retail's portal-visibility view (`PView::ConstructView` / `ClipPortals` / `GetClip`;
`CEnvCell::find_visible_child_cell`). The camera's cell is just the root of a recursive
per-portal clip-region traversal; all visible cells (indoor + outdoor) draw in one pass.
Seamless in/out **by construction** — no inside/outside branch. Modern code, retail
behavior.
- **Why:** the two-pipe split is a WB-editor inheritance, not a game-client design; you
cannot make two pipes hand off seamlessly at a doorway. Retail never splits. The A8.F
attempt to graft retail recursion onto the WB stencil failed its visual gate (#103).
- **Keep:** WB mesh/dat pipeline (ObjectMeshManager/WbDrawDispatcher/terrain), the
2026-05-30 camera-collision + physics work. **Salvage (verify):** the A8.F CPU
clip-builder (PortalProjection/ScreenPolygonClip/ViewPolygon/PortalVisibilityBuilder —
unit-test-correct). **Task 1:** delete the dead two-pipe code (RenderInsideOutAcdream,
the cameraInsideBuilding branch, IndoorCellStencilPipeline, the ACDREAM_A8_INDOOR_BRANCH
kill-switch) — audit first; some A8 commits fixed real bugs (BuildingId stamping, pool
aliasing) that stay.
- **Scope + next-session pickup:**
[`docs/research/2026-05-30-unified-render-pipeline-decision-and-handoff.md`](../research/2026-05-30-unified-render-pipeline-decision-and-handoff.md).
Start with `superpowers:brainstorming`; visual verification at Holtburg
cottage/cellar/inn + a portal dungeon is the acceptance gate (unit tests did not
catch #103).
- **Camera-collision (shipped 2026-05-30, kept):** retail `SmartBox::update_viewer`
swept-sphere spring arm (`CameraDiagnostics.CollideCamera`, `PhysicsCameraCollisionProbe`,
`RetailChaseCamera` integration) + viewer/sight bypass of the 30-step transition cap.
Specs: [`2026-05-29-a8f-camera-collision-design.md`](../superpowers/specs/2026-05-29-a8f-camera-collision-design.md).
**Today's pre-M1.5 baseline** (2026-05-20 — committed in this
session): A4 multi-cell BSP iteration (`691493e`), #89 sphere-overlap
in CheckBuildingTransit (`7ac8f54`), #90 sphere-overlap stickiness in