diff --git a/docs/LANES/LANE_B_NOTES.md b/docs/LANES/LANE_B_NOTES.md index bf0aca4..a78152d 100644 --- a/docs/LANES/LANE_B_NOTES.md +++ b/docs/LANES/LANE_B_NOTES.md @@ -1,5 +1,80 @@ # LANE B — NOTES (measured) +## Round 22 (Fable's ROUND22 → Lane B) — #1a the `venue_night` tri diagnosis → **OWNER: LANE E** + +**Verdict: the driver is the four GLB street-furniture props. 149,161 of 163,015 tris = 91.5% of the +stress view. Not posters, not buildings, not pools, not the density widening per se. Owner = E (asset +tris) per the ledger's own rule. Decimation clears the gate with ~120k to spare.** + +Method: katoomba `venue_night`, settled, then **hide-a-layer-and-re-measure** (frustum-accurate +attribution — a layer's cost is the tris that vanish when it's hidden), then the same drill *inside* +furniture, bucketed by geometry. + +### Layer breakdown (katoomba `venue_night`, baseline **163,015** tris / 88 draws) +| layer | rendered tris | share | +|---|---|---| +| **chunk-furniture** (26 chunks) | **151,341** | **92.8%** | +| ground | 9,932 | 6.1% | +| venue-presentation (frontage+posters+pools) | 770 | 0.5% | +| lighting (sky dome) | 624 | 0.4% | +| **chunk-buildings** (26 chunks) | **348** | 0.2% | +| venue-posters | 222 | 0.1% | +| citizens · weather · tram · venue-pools | 0 | 0% | + +Buildings are **348 tris** — the R3 atlas/instancing work holds; and **posters are 222**, so A's cap is +already spent (it worked; it was never the lever). Pools cost **0**. + +### Inside furniture — the four GLBs are the whole bill +| prop (GLB) | tris/instance | instances in view | rendered tris | share of view | +|---|---|---|---|---| +| **bench** (`procity_street_bench_01`) | **1,942** | 64 | **60,202** | 37% | +| **bus_shelter** (`procity_street_bus_shelter_01`) | **7,998** | 10 | **55,986** | 34% | +| **bin** (`procity_street_bin_01`) | **3,000** | 19 | **18,000** | 11% | +| **food_cart** (`procity_street_food_cart_01`) | **4,991** | 8 | **14,973** | 9% | +| pole · lamp · trees · novelty (primitives) | 4–40 | 303 | 2,180 | 1.3% | + +**GLB total 149,161 (91.5%). Primitives 2,180 (1.3%).** Identity confirmed by DCC-authored material names +(`wire_143225087` — a Sketchfab scan, `baked_mat`, `2 wood frame `, `Material_0`) — these are E's four +furniture GLBs, not our procedural materials. Two (bench, food_cart) are also `MeshPhysicalMaterial`, an +expensive shader for a 0.4 m street prop. + +**Why now, and why it isn't the density widening:** shop count doesn't drive this — *road* density does. +Real towns put a bench/bin/shelter cadence on a 966-edge graph, so ~100 GLB props land in the streamed set +where synthetic had a handful. The props were always over-tessellated (a **1.2 m bench at 1,942 tris** is +~5× the entire building stock in frame); real roads just finally presented the bill. **This is my own R6 +note coming due** — filed then: *"the street_bin GLB is 3.0k tris — heavy for a prop placed ~15×; a decimate +to ~500 tris would give back tri headroom if the combined-lane budget tightens."* It tightened. + +### → Lane E: the fix (asset tris), with targets +Decimate the four props to sizes sane for their real-world size (they're 0.4–2.3 m, seen at street +distance; E's R13 instrument decimation is the same drill): + +| prop | now | suggested | in-view after | +|---|---|---|---| +| bench | 1,942 | ~250 | 60,202 → ~16,000 | +| bus_shelter | 7,998 | ~600 | 55,986 → ~6,000 | +| bin | 3,000 | ~200 | 18,000 → ~3,800 | +| food_cart | 4,991 | ~400 | 14,973 → ~3,200 | + +**149,161 → ~29,000 (saves ~120k).** Projected: my baseline **163k → ~43k**; **F's 221,935 → ~102k** — +both far under the 200k gate, with headroom for the pack's denser towns. (Cheap extra: drop the two +`MeshPhysicalMaterial`s to `MeshStandardMaterial`.) + +### → Fable: a B-side fallback exists if E can't land decimation this round +`furniture.js` already ships a **primitive fallback for every GLB prop** (the R4 "use-if-ready" path, the +`?noassets` route). So a distance/density-gated LOD — keep GLBs near the camera, primitives beyond — is a +contained Lane B change I can land quickly. I'm **not** doing it unilaterally: per the ledger this is E's +(asset tris), and source decimation is the right fix (it helps every town and every view, not just this +one). Say the word if you want the B-side gate as belt-and-braces. + +### Honest note on the baseline (mine 163,015 vs F's 221,935) +Same view, different number: my automation's rAF is throttled, so the **live gig crowd never spawns** +(citizens measured **0** tris here) — F's number includes it (~59k of peds). This doesn't move the verdict: +furniture is 92.8% of what I measured and still ~68% of F's 221,935, and the decimation above clears the +gate on either baseline. Flagging it so F re-measures against the live crowd, not my throttled figure. + +--- + ## Round 21 (Fable's ROUND21 → Lane B) — selector from E's towns index (ledger #2, the missed R20 #5) Closed the R20 gap Fable caught (`hud.js:11` still hardcoded `REAL_TOWNS`). The real-town list now comes