feat(render) Campaign FW3.2b-2: THE STATIC CUTOVER - the walk drives production statics
The retail frame walk now drives every production static draw. In RetailPViewRenderer.DrawInside, when the concrete executor + the packed product + the FW3.1 walk registries are all wired (all production compositions - anything less throws): - A pre-walk events-only collection pass (the shadow sink generalized to WalkVisitedSetCollector) gathers the frame's visited cells, buildings, and landscape-cell turns; the visited cells union into prepareCells so EnvCellRenderer prepares every shell the driver draws. - DrawWalkDrivenStatics runs the WalkFrameDriver over the production world data (WalkProductionWorldData over RenderSceneQuery + the building registry): sky, terrain slices, outdoor statics at their landscape-cell turns, buildings (alpha barrier -> punch/look-in passes -> shell) in retail order, interior clear+seals as leaf closures (the old tail block's drain reasoning moves with them), flood cells shell-then-contents. Landscape/cell-stage particle owners re-source from the walk's visited sets - retail gates particles per cell turn (ShouldDrawParticles @0x0050FE60), which this is; the old sphere filter was the approximation. - DrawLandscapeDynamicsPhase + DrawBuildingLookInDynamics carry the dynamics-only remainder (LookInObject now dynamic-classified, late outside-dynamics + weather, particle unions); DrawDynamicsLast and the outdoor flush are unchanged. - The product builder stops emitting LandscapeOutdoorStatic / LandscapeBuildingShell / CellStatic (methods deleted, dead index tracking removed); LookInObject loads cells with includeStatics: false. The old static path survives ONLY behind !walkActive for the standalone/diagnostic executor-fake path that keeps 15 retail-ordering regression tests exercising the barrier/punch/seal machinery; no production composition can reach it. Its deletion is FW4 scope (the plan's "deleting the patch apparatus") - recorded in the plan. Transitional risks recorded in code/report: the two-pass walk cost (FW3.4 measures), the interior slice-count reconciliation between the old clip assembly and the walk's own exit-view survival, and the outdoor merged-flood punch coverage now riding the walk's own building-BSP punches (retail-faithful per FW1; the owner visual gate verifies). Suites (lead-verified): full Release build 0 warnings; hermetic 6,750/0 (baseline minus the three deleted route tests); Walk lane 201/1; InstalledDat Walk conformance 40/1 untouched. The two IL-branch tests the implementation round reported failing pass in every lead run - the recurring parallel-load flake pair. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
878533597d
commit
4918677b45
8 changed files with 919 additions and 612 deletions
|
|
@ -343,6 +343,63 @@ deeper commitment.
|
|||
landscape turn; the `_drawCullModes`/alpha-scope sequencing constraint
|
||||
resolved (own cull scratch or strict sequencing). Route-keyed particle
|
||||
owners re-sourced from the walk.
|
||||
- **FW3.2b-2 — the production rooting (DESIGN, 2026-08-30; execute
|
||||
INLINE, not via subagent — the integration-slice rule).** The
|
||||
dual-compute split for this stage: the OLD visibility
|
||||
(`PortalVisibilityBuilder` + look-in frames + clip assembly +
|
||||
viewcone) KEEPS RUNNING to feed everything dynamic; the WALK draws
|
||||
everything static. No old static DRAWS remain (no double draw):
|
||||
1. `RetailPViewRenderer.DrawInside` keeps steps 1–8 and 10–11
|
||||
(visibility, merge/look-in seeding, clip frame, prepare — with
|
||||
`prepareCells` UNIONED with the walk's flood/look-in cells —
|
||||
viewcone, route build) but `RenderScenePViewFrameProduct` STOPS
|
||||
emitting `LandscapeOutdoorStatic`, `LandscapeBuildingShell`, and
|
||||
`CellStatic` ranges. Per the plan's route split, LOOK-IN OBJECTS
|
||||
(`LookInObject`) are dynamic-side and STAY PACKED this stage —
|
||||
the old look-in machinery keeps drawing look-in cell content and
|
||||
its punches; the WALK's building turns therefore draw shell
|
||||
content + punches for NON-look-in... NO — resolve the overlap the
|
||||
other way: the walk's building turns run their punch+look-in
|
||||
machinery ONLY for the walk's own conformance events; production
|
||||
look-in DRAWS (punch fans + content) stay entirely on the old
|
||||
path this stage, and the walk's `BuildingShell` stage content +
|
||||
`OnPunchGeometry`/look-in DC draws are SUPPRESSED in the driver's
|
||||
production wiring for look-in-owned buildings… REJECTED — that is
|
||||
a dual path. FINAL: the walk owns ALL of it — building shells,
|
||||
punches, look-in STATIC content (stage LookInStatic) — and the
|
||||
`LookInObject` route survives ONLY for the DYNAMICS inside
|
||||
look-in cells (`BuildLookInRoutes` filtered to dynamic
|
||||
classifications). The old `DrawBuildingLookIns` static half and
|
||||
`DrawLookInPortalPunch` retire with the static routes.
|
||||
2. `WalkFrameDriver`'s leaf renderer maps to:
|
||||
sky → `RetailPViewPassExecutor` sky call; terrain slice →
|
||||
`_terrain.Draw(camera, frustum, clipPlanes: slice.Planes,
|
||||
ndcClipAabb: slice.NdcAabb)`; cell shell →
|
||||
`EnvCellRenderer.Render(pass, singleCellSet)` (+ transparent
|
||||
ordered per cell); punch fan → `PortalDepthMaskRenderer.
|
||||
DrawDepthFan(worldVerts, viewProjection, slicePlanes,
|
||||
forceFarZ: true)`; `ClearInteriorDepth` →
|
||||
`IWorldPassScope.ClearInteriorDepth` (keep production's
|
||||
slices>0 gate); `DrawExitSeals` → the existing seal-fan loop
|
||||
(`DrawPortalDepthWrite` seal flavor over the root flood's exit
|
||||
portals); alpha barrier → `RetailAlphaQueue.FlushFartherThan`.
|
||||
3. Static records: cell statics via `RenderSceneQuery.
|
||||
CopyCellStaticsTo(cellId)`; outdoor statics via a per-landscape-
|
||||
cell index built once per frame from
|
||||
`CopyIndexTo(OutdoorStatic)`; building shells via the
|
||||
`IsBuildingShell` entities keyed by anchor cell.
|
||||
4. Consumers re-pointed: particle owners
|
||||
(`RenderFrameRouteOwnerSelector.Replace(LandscapeOutdoorStatic…)`
|
||||
sites) re-source from the walk's populated cells; diagnostics
|
||||
source counts tolerate the route removal; `EmitRenderSignature`'s
|
||||
terrain/scenery counts re-source or annotate.
|
||||
5. Sky/weather: sky moves into the walk's LS turn (once); weather
|
||||
stays in the old late-dynamics slice loop this stage (it is
|
||||
dynamic-adjacent and the plan's FW4 moves it fully).
|
||||
6. Gates before the owner sees a build: hermetic + InstalledDat
|
||||
suites; the connected lifecycle route; the offline pixel gate
|
||||
(outdoor statics); dense-Arwic pre/post pair (physical display).
|
||||
|
||||
- **FW3.3 — ShellDrawLiftZ retirement.** THREE sites (the register row
|
||||
AP-32 lists only two — `LandblockBuildFactory.cs` bakes the lift into
|
||||
the drawn cell transform and is unlisted): delete all three, flip the
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue