checkpoint: preserve user-gated FW closeout fixes
This commit is contained in:
parent
a2f2eb7d78
commit
b8befded8b
22 changed files with 1005 additions and 198 deletions
|
|
@ -1096,34 +1096,47 @@ devtools, and screenshots; then closes the GPU-flight transaction in
|
|||
> `TerrainModernRenderer` (terrain), fed by the unified PView stack. This is the
|
||||
> authoritative current draw model; the 2026-05-31 reset handoff is historical.
|
||||
|
||||
**One visibility owner.** `RetailPViewRenderer.DrawInside` is the production
|
||||
world gate. Its root is the collided camera/viewer cell, or the synthetic
|
||||
outdoor cell adaptation; the player's current cell separately owns sunlight
|
||||
and indoor lighting. A null root exists only for login/debug/streaming-gap
|
||||
fallback frames. `RetailPViewRenderer` is the one authoritative PView owner and
|
||||
product family: it builds the main frame, deliberate per-building exterior
|
||||
floods for the synthetic outdoor root, and separate interior-root look-in
|
||||
frames. No second per-frame ACME visibility BFS competes with that family.
|
||||
**One visibility owner.** `RetailFrameWalk`, driven once per frame by
|
||||
`WalkFrameDriver.Collect`, is the production authority for rooting, portal
|
||||
recursion, visible cells/buildings, per-view admission, and draw order. Its root
|
||||
is the collided camera/viewer cell or retail's synthetic outdoor cell; the
|
||||
player's current cell separately owns sunlight and indoor lighting. A null root
|
||||
exists only for login/debug/streaming-gap fallback frames. The classes named
|
||||
`RetailPViewRenderer` and `RetailPViewPassExecutor` remain composition/pass
|
||||
facades around that one walk; they do not build a second visibility product.
|
||||
`PortalVisibilityBuilder` is retained only by tests and research diagnostics and
|
||||
has no production caller. `CellVisibility` does not decide frame visibility.
|
||||
|
||||
**Current draw discipline.** Outside-view slices draw sky, terrain, and outdoor
|
||||
statics first. Interior-root building look-ins then punch all entry apertures
|
||||
before drawing their shell and contents. The landscape shared-alpha scope
|
||||
flushes before the root-specific depth boundary. Interior roots perform the
|
||||
conditional depth clear and then write true-depth exit seals; the synthetic
|
||||
outdoor root retains world depth and writes far-Z building-entry punches.
|
||||
Opaque EnvCell shells, immediate far-to-near transparent EnvCell shells, cell
|
||||
statics and their particles, then the surviving main-stage dynamics and their
|
||||
particles follow. Look-in and outside-stage dynamics intentionally draw in
|
||||
their earlier landscape phases. The final world shared-alpha scope flushes
|
||||
before private portal/paperdoll viewports and UI.
|
||||
**Current draw discipline.** The walk records one ordered event stream for
|
||||
landscape cells, building portals, EnvCell shells, statics, dynamics, particles,
|
||||
depth boundaries, and alpha barriers. `WalkFrameDriver` replays those events in
|
||||
retail order through the Vulkan leaf renderers. Interior roots preserve retail's
|
||||
conditional depth clear and true-depth exit seals; the synthetic outdoor root
|
||||
retains world depth and stamps far-Z entry punches. World translucents and scene
|
||||
particles share `RetailAlphaQueue` and drain at the walk's exact barriers.
|
||||
Private portal/paperdoll viewports and retained UI execute only after the world
|
||||
stream finishes. Projectiles are ordinary live-entity draws, never a separate
|
||||
global pass.
|
||||
|
||||
The modern renderer intentionally does not hard-clip every shell or entity to
|
||||
the accumulated polygon. It combines PView admission and viewcone checks with
|
||||
retail's punch/seal depth discipline; terrain/outside slices use the bounded
|
||||
clip-plane/scissor adaptation. World Wb translucents and Scene particles share
|
||||
one stable far-to-near `RetailAlphaQueue`; EnvCell transparent shells and
|
||||
private viewports remain immediate. Projectiles are ordinary live-entity draws,
|
||||
never a separate global pass.
|
||||
**Portal-slice clipping is part of admission, not a later approximation.** Each
|
||||
walk visit retains the exact authored pixel-space portal polygon. The frame
|
||||
adapter converts it once to a Vulkan GPU clip slot, and the cell shell, statics,
|
||||
and dynamics admitted by that visit draw through that same slot. A content
|
||||
drawing sphere may reject a slice before submission, but an accepted slice
|
||||
never emits the whole mesh unclipped. The same cell can therefore draw more
|
||||
than once through distinct apertures, exactly as retail's `viewconeCheck` plus
|
||||
`portal_view` loop requires. Particles remain unclipped at submission because
|
||||
retail contains them positionally through owner-cell ordering, opaque depth,
|
||||
and alpha barriers. The complete visibility answer is the union of the walk's
|
||||
visited EnvCells and visited landscape land cells. EnvCell batch preparation
|
||||
consumes only the former; particle, light, and shadow visibility consume the
|
||||
union. Omitting the landscape half disables every outdoor emitter even though
|
||||
its owner still reaches the draw stream.
|
||||
|
||||
WorldBuilder contributes DAT decoding, mesh preparation, residency, and Vulkan
|
||||
batch mechanics only; it makes no visibility or ordering decision. Forced merge
|
||||
breaks at walk event boundaries preserve retail order while compatible draws
|
||||
inside a leaf may still use order-preserving MDI merging.
|
||||
|
||||
Retail anchors are `SmartBox::RenderNormalMode @ 0x00453AA0`,
|
||||
`PView::DrawInside @ 0x005A5860`, `PView::DrawCells @ 0x005A4840`,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue