feat(render) Campaign FW1: the degrade-level BSP gate kills the wrong punches
The offline degrade probe proved the mechanism: every Holtburg building carries PORT nodes ONLY in its level-0 GfxObj (out to ~24-48 m); every degraded level has zero. Retail walks the CURRENT degrade level BSP (part->gfxobj[deg_level]) - that is what limits look-in punches to the nearest buildings. WalkBuilding gains the degrade ladder + SelectDrawingBsp (band pick; UpdateViewerDistance hysteresis is a port TODO), the walk selects per viewer distance, the adapter builds per-level BSPs, and the stab-list load rule (CLandBlock::init_buildings @0052fd80: a full-res block loads exactly its buildings portal stab cells) replaces load-everything in the landscape builder. The sweep now shows clean rosters with all far-building punches gone; remaining deltas: the near buildings 001a/0022 (50 m/28 m center distance vs the 48 m band edge - sphere-adjusted distance/hysteresis to port) and the one ring-1 frustum boundary pair (aab50002/a9b3003c). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
e5cdd2364e
commit
b3ac5872e9
8 changed files with 90 additions and 12 deletions
|
|
@ -136,6 +136,11 @@ public sealed class RetailFrameWalk
|
|||
{
|
||||
sink.Emit(WalkEvent.Building(building.PositionCellId));
|
||||
if (!building.HasGeometry) return;
|
||||
// Retail walks the CURRENT degrade level's drawing BSP
|
||||
// (part->gfxobj[deg_level]); a degraded-out slot skips everything
|
||||
// after publishing the portal list.
|
||||
WalkBspNode? bsp = building.SelectDrawingBsp(ctx.ViewerDistanceTo(building));
|
||||
if (bsp is null) return;
|
||||
|
||||
int viewCount = Math.Max(activeViews.ViewCount, 0);
|
||||
var passSink = new PortalPassSink(sink);
|
||||
|
|
@ -144,11 +149,11 @@ public sealed class RetailFrameWalk
|
|||
{
|
||||
ctx.SetActiveView(activeViews, v);
|
||||
WalkBuildingPortals.BuildDrawPortalsOnly(
|
||||
building.DrawingBsp, 1, viewpoint,
|
||||
bsp, 1, viewpoint,
|
||||
(portalRef, pass) => WalkBuildingPortals.DrawPortal(
|
||||
_outdoorPView, building, portalRef, pass, ctx, passSink));
|
||||
WalkBuildingPortals.BuildDrawPortalsOnly(
|
||||
building.DrawingBsp, 2, viewpoint,
|
||||
bsp, 2, viewpoint,
|
||||
(portalRef, pass) => WalkBuildingPortals.DrawPortal(
|
||||
_outdoorPView, building, portalRef, pass, ctx, passSink));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue