fix(render): feed look-in cells to particle and light visibility
Look-in rooms (cells reached through building portals) drew their geometry but never entered the visible-cell set consumed by the particle gate and the point-light candidacy scope, so their emitters stayed frozen and their lanterns dark until the player entered or the camera left the building. Retail has no look-in split: ShouldDrawParticles @0x0050FE60 gates on cell->IsInView(), and a cell installed by DrawBuilding @0x0059F2A0 -> PView::ConstructView @0x005A57B0 is drawn by the same DrawCells traversal as any flooded cell, so it is in view identically (per-cell in_view stamped by PView::InitCell @0x005A4B70). RetailPViewFrameResult now carries InViewCells (main flood + look-in cells, the existing prepareCells union; the borrowed-scratch contract is unchanged because RecycleLookInFrames runs at the start of the next DrawInside). WorldSceneRenderer feeds InViewCells to ParticleVisibilityController and the point-light scope. DrawableCells is untouched for seals, the outside-stage predicate, diagnostics, and the packed-product referee. The legacy 4-arg Reset defaults InViewCells = DrawableCells for standalone callers. User-gated 2026-08-29 at the Sanctuary Cathedral: adjacent look-in rooms show particles and lantern lights from the root cell without entry or an outside camera; recall/waterfall/Holtburg/paperdoll unregressed. The pre-existing #132-family candle-behind-opening report remains open and is unchanged by this fix. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
f7aa8e0eb7
commit
85530c0b7e
4 changed files with 82 additions and 9 deletions
|
|
@ -271,8 +271,10 @@ public sealed class LightManager
|
|||
/// geometrically closer than the player's own room's torches and win the cap,
|
||||
/// leaving the visible room dark. Scoping candidacy to the frame's actual
|
||||
/// visible cells (the render already computes this — callers pass last frame's
|
||||
/// <c>RetailPViewFrameResult.DrawableCells</c>, one frame of latency, to avoid
|
||||
/// re-threading a mid-render callback) removes those from contention before the
|
||||
/// <c>RetailPViewFrameResult.InViewCells</c>, the main flood PLUS building
|
||||
/// look-in cells, one frame of latency, to avoid re-threading a mid-render
|
||||
/// callback; flood-only scoping darkened look-in rooms' lanterns) removes
|
||||
/// non-visible cells from contention before the
|
||||
/// cap ever applies. The distance-sort anchor stays the PLAYER either way — this
|
||||
/// parameter only narrows candidacy, it does not change the sort (the #176
|
||||
/// correction: CAMERA anchoring, not cell scoping itself, caused the earlier
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue