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:
Erik 2026-08-30 19:22:56 +02:00
parent 37febd1fe6
commit c40aecfc8c
8 changed files with 136 additions and 4 deletions

View file

@ -266,7 +266,15 @@ public sealed unsafe partial class ParticleRenderer : IDisposable
if (_submissionScratch.Count == 0)
return;
if (renderPass == ParticleRenderPass.Scene && _alphaQueue?.IsCollecting == true)
bool defers = renderPass == ParticleRenderPass.Scene && _alphaQueue?.IsCollecting == true;
if (AcDream.Core.Rendering.RenderingDiagnostics.ProbeWalkRootEnabled)
{
Console.WriteLine(
$"[walk-part] finish pass={renderPass} n={_submissionScratch.Count} "
+ $"branch={(defers ? "defer" : "immediate")} "
+ $"phase={AcDream.Core.Rendering.RenderingDiagnostics.WalkRootPhase}");
}
if (defers)
DeferToRetailAlphaQueue(camera);
else
DrawOrdered(camera);