fix #451: stabilize portal seam rendering
This commit is contained in:
parent
f6fe0f2a4f
commit
1d2f2f738f
29 changed files with 1650 additions and 239 deletions
|
|
@ -24,6 +24,48 @@ What does NOT go here:
|
|||
- Every session: scan OPEN issues at start; promote/close anything we touched during the session before ending.
|
||||
- Promoting to a Phase: mark as `DONE (promoted to Phase X)` + commit SHA where the Phase entry landed.
|
||||
|
||||
## #451 — Sanctuary cathedral portal seam leaks exterior world and particles
|
||||
|
||||
**Status:** DONE — OWNER-ACCEPTED 2026-08-27 ("Looks good! Gate pass now!").
|
||||
**Component:** Vulkan PView / nested building look-ins / landscape alpha ordering.
|
||||
|
||||
At the open-air Sanctuary cathedral seam between `0xF4180104` and
|
||||
`0xF4180106`, small player or chase-camera movements could make cathedral
|
||||
halves, their shadows, or floor textures flap; expose the world background,
|
||||
trees, a nearby building, and waterfall/steam particles through opaque
|
||||
geometry; or clip the local player in half. Camera zoom alone reproduced the
|
||||
failure. The final particle repro was
|
||||
`0xF4180104 [31.111177 57.648911 169.804993]`.
|
||||
|
||||
This was a renderer contract failure, not bad Sanctuary data. The correction:
|
||||
|
||||
- classifies exterior building seeds with retail's `F_EPSILON` instead of the
|
||||
ordinary 1 cm EnvCell traversal tolerance and retains the exact accepted
|
||||
`CBldPortal` aperture;
|
||||
- appends every nested look-in cell's own `portal_view` to the frame clip
|
||||
buffer, punches only the accepted seed portal, and clips shells plus static
|
||||
and particle alpha to that view;
|
||||
- pairs each look-in with only its own exterior building shell and reproduces
|
||||
retail's per-building alpha barriers;
|
||||
- keeps dynamic objects whole after the CPU PortalList sphere test, matching
|
||||
retail `DrawMesh` and preventing the player-slicing regression;
|
||||
- submits attached and ownerless exterior particles inside `LScape::draw` for
|
||||
every PView root, eliminating the late post-world replay that let waterfall
|
||||
alpha repaint already-drawn cathedral cells; and
|
||||
- treats authored `SeenOutside` open-air cells as atmospheric outdoor cells so
|
||||
sky/shadow activation no longer flips merely because the camera acquired an
|
||||
EnvCell root.
|
||||
|
||||
The fix is renderer-wide: no Sanctuary coordinate or asset special case is
|
||||
present in production. Installed-DAT regressions retain the reported camera
|
||||
handoff, lateral transition, and exact steam-seam views. The temporary live
|
||||
emitter/shell trace was removed at closeout.
|
||||
|
||||
**Acceptance:** owner swept both cells, moved across the seam, and zoomed the
|
||||
camera through the former trigger positions. Cathedral/world flapping, shadow
|
||||
toggle, player clipping, exterior geometry, and waterfall/particle bleed were
|
||||
absent in the accepted build.
|
||||
|
||||
## #450 — Fast character re-entry after logout can remain in portal space at `lb 0/0`
|
||||
|
||||
**Status:** DONE — OWNER-ACCEPTED 2026-08-26 in the combined client-parity gate.
|
||||
|
|
@ -18959,6 +19001,13 @@ DrawDynamicsParticles only sees dynamics-last cone survivors.
|
|||
**Gate:** stand inside, look out the doorway at the town portal — the
|
||||
swirl renders through the door.
|
||||
|
||||
**2026-08-27 ordering correction (#451):** the old "once per frame after the
|
||||
look-ins" placement was sufficient for this gate but did not preserve the
|
||||
installed `outside_view` and could repaint an already-drawn open-air building.
|
||||
Ownerless emitters now submit once per outside-view slice with that slice's
|
||||
clip slot. When building look-ins exist they enter the pre-building alpha
|
||||
barrier; otherwise they drain at the end of `LScape::draw`.
|
||||
|
||||
---
|
||||
|
||||
## #132 — Candle flame disappears when the through-opening background is behind it
|
||||
|
|
@ -18999,6 +19048,13 @@ against interiors). The owner-id filter carries over; cell-pass and
|
|||
dynamics-pass emitters keep their own passes (owners never in the
|
||||
outdoor-static set → no double-draw).
|
||||
|
||||
**2026-08-27 correction (#451):** the post-frame placement fixed this narrow
|
||||
flame-overpaint case but was too late for nested open-air cathedral cells: an
|
||||
exterior waterfall could repaint their completed opaque floor. Outdoor-static
|
||||
and ownerless particles now submit inside `LScape::draw` under the exact
|
||||
outside-view clip slot, with retail's pre-building/per-building alpha barriers;
|
||||
the post-world PView replay is deleted.
|
||||
|
||||
**Gate:** both sides — indoors with the opening behind the candle, and
|
||||
outdoors at the angle that previously erased it.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue