fix(render): FW4 slice 6 - interior roots draw landscape unclipped
Five ordering repairs later the cathedral falls still bled, and the final probe round proved why no ordering fix could ever land it: the falls now submit pre-clear with depth test LESS - and STILL pass, because the depth they test against is EMPTY. DrawWalkTerrainSlice scissored + hardware-clipped the terrain to the walk''s exit-view polygons, and at the #456 cathedral seam those authored portal polys are thin BANDS far narrower than the real opening: most of the vista never received terrain color or depth that frame (the visible scene there was stale color), so unclipped alpha painted straight across. Retail''s rule, per the PV campaign''s proven model and LScape::draw: landscape content is view-CULLED, never view-CLIPPED - terrain blocks draw whole, once per landscape turn (the views feed only CheckBlocks'' block visibility), and aperture exactness comes from the depth clear + exit seals + interior repaint that follow in the walk''s own order. This slice ports that: the driver fans exactly ONE terrain turn (correcting slice 1''s per-view fan), and an interior root''s terrain and sky draw unclipped/unscissored; the outdoor root keeps its single full-screen slice (equivalent by construction). The walk''s views still own the punch fans and dynamics apertures. Hermetic 6,762/0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
0d6cd5c06e
commit
bb9212c70d
2 changed files with 59 additions and 8 deletions
|
|
@ -744,14 +744,14 @@ internal sealed class WalkFrameDriver : IWalkEventSink
|
|||
MarkIfGrown();
|
||||
_events.Add(WalkFrameEvent.Sky());
|
||||
_skyDrawnThisFrame = true;
|
||||
// FW4 slice 1: the fan count is the WALK'S OWN active view count
|
||||
// (carried on the Landscape event) — retail LScape::draw runs once
|
||||
// per view the walk installed. The old clip apparatus's slice count
|
||||
// no longer participates; the renderer re-derives the actual slice
|
||||
// clip data from the same walk views before replay, so index i here
|
||||
// and OutsideViewSlices[i] there are the same view by construction.
|
||||
for (int slice = 0; slice < activeViewCount; slice++)
|
||||
_events.Add(WalkFrameEvent.TerrainSlice(slice));
|
||||
// FW4 slice 6 (correcting slice 1's per-view fan): retail's
|
||||
// LScape::draw draws the terrain blocks ONCE per landscape turn —
|
||||
// the active views feed only the block-level visibility union
|
||||
// (CheckBlocks); terrain cells are ordinary meshes and retail never
|
||||
// clips those per view (pixel exactness = the depth clear + seals +
|
||||
// interior repaint afterward). One terrain turn, always; the walk's
|
||||
// views still own the punch fans and dynamics apertures.
|
||||
_events.Add(WalkFrameEvent.TerrainSlice(0));
|
||||
}
|
||||
|
||||
private void HandleDrawCellsTurn(IReadOnlyList<uint> cells)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue