fix(render): FW4 slice 2 - exit seals stamp the walk''s own flood
The cathedral falls shine-through (owner report at the #456 terrace seam, toggling with the camera''s side of the seam): the probe''s new phase tags pinned the falls emitters to the cell-owners route submitting POST-depth-clear on interior roots - retail''s own timing, safe only because seals own the aperture depth by the end-of-frame alpha drain. Our seal SET still came from the old apparatus''s flood, which misses exit portals at the #456 seam band (its never-drawn panel family), so the drain z-passed across the unsealed opening. DrawWalkExitPortalMasks now stamps the walk''s own ordered interior flood (WalkFrameDriver.InteriorFloodCells, captured at OnInteriorFloodDrawTurn - retail PView::DrawCells pc:432785-432786), keeping the old assembly''s per-cell slice clips where present and sealing unclipped where the old apparatus had no entry (benign: the exact dat aperture polygon, z-tested). The legacy path keeps the old seal draw. Also: ACDREAM_PROBE_WALK_ROOT gains [walk-part]/[walk-alpha] phase-tagged submission/drain lines (the apparatus that pinned this). Hermetic 6,762/0, Walk lane 213/1, InstalledDat walk conformance 40/1. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
37febd1fe6
commit
c40aecfc8c
8 changed files with 136 additions and 4 deletions
|
|
@ -333,8 +333,11 @@ public sealed class RetailPViewRenderer
|
|||
passes.FlushLandscapeAlpha();
|
||||
passes.ClearInteriorDepth();
|
||||
};
|
||||
// FW4 slice 2: the seals stamp the WALK'S OWN flood cells (see
|
||||
// DrawWalkExitPortalMasks). walkDriver is assigned below, before
|
||||
// any Replay can fire this closure.
|
||||
Action drawExitSeals = () =>
|
||||
DrawExitPortalMasks(ctx, passes, pvFrame, clipAssembly, drawableCells);
|
||||
DrawWalkExitPortalMasks(ctx, passes, clipAssembly, walkDriver!);
|
||||
|
||||
var leafRenderer = new WalkProductionLeafRenderer(
|
||||
walkExecutor!, ctx, clipAssembly, clearInteriorDepth, drawExitSeals);
|
||||
|
|
@ -2035,6 +2038,39 @@ public sealed class RetailPViewRenderer
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>Campaign FW4 slice 2 — the walk-flood seal draw. Retail's
|
||||
/// <c>PView::DrawCells</c> stamps every exit portal of THE FLOOD'S OWN
|
||||
/// cells (pc:432785-432786, reverse cell_draw_list far→near) — one
|
||||
/// visibility structure decides the flood, the seals, and the terrain
|
||||
/// views alike. The old apparatus's flood misses exit portals at the
|
||||
/// #456 cathedral seam band (its never-drawn panel family), leaving
|
||||
/// aperture depth unsealed after the interior clear; the end-of-frame
|
||||
/// alpha drain (cell-owned emitters — retail's own timing) then
|
||||
/// z-passes across the whole opening (the falls shine-through,
|
||||
/// probe-pinned via ACDREAM_PROBE_WALK_ROOT's phase tags). Per-cell
|
||||
/// slice clips still come from the old assembly where present; a cell
|
||||
/// the old apparatus missed seals unclipped (the depth fan is the exact
|
||||
/// dat aperture polygon and z-tests, so over-coverage is benign).</summary>
|
||||
private void DrawWalkExitPortalMasks(
|
||||
RetailPViewFrameInput ctx,
|
||||
IRetailPViewPassExecutor passes,
|
||||
ClipFrameAssembly clipAssembly,
|
||||
Walk.WalkFrameDriver driver)
|
||||
{
|
||||
List<uint> floodCells = driver.InteriorFloodCells;
|
||||
for (int i = floodCells.Count - 1; i >= 0; i--)
|
||||
{
|
||||
uint cellId = floodCells[i];
|
||||
foreach (var slice in GetCellSlicesOrNoClip(clipAssembly, cellId))
|
||||
passes.DrawExitPortalMask(
|
||||
ctx,
|
||||
new RetailPViewCellSliceContext(
|
||||
cellId,
|
||||
slice,
|
||||
NoParticleOwners));
|
||||
}
|
||||
}
|
||||
|
||||
private void DrawEnvCellShells(
|
||||
IRetailPViewPassExecutor passes,
|
||||
PortalVisibilityFrame pvFrame)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue