From 0c4dad5accc88d2572e806336403990ab2d49be8 Mon Sep 17 00:00:00 2001 From: m3ultra Date: Thu, 16 Jul 2026 21:52:43 +1000 Subject: [PATCH] =?UTF-8?q?Lane=20B=20round=2022=20(v4.0):=20#1a=20venue?= =?UTF-8?q?=5Fnight=20tri=20diagnosis=20=E2=80=94=20the=20driver=20is=20E'?= =?UTF-8?q?s=20four=20furniture=20GLBs=20(91.5%)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BLOCKING-ITEM DIAGNOSIS, filed first so E/A/F aren't waiting. Method: katoomba venue_night, settled, then hide-a-layer-and-re-measure (frustum-accurate: a layer's cost = the tris that vanish when hidden), then the same drill inside furniture bucketed by geometry. VERDICT: the four GLB street-furniture props are 149,161 of 163,015 tris = 91.5% of the stress view. OWNER: LANE E (asset tris), per the ledger's own rule. Decimation clears the gate with ~120k to spare. Layer breakdown (baseline 163,015 tris / 88 draws): chunk-furniture 151,341 (92.8%) | ground 9,932 | venue-presentation 770 | lighting 624 | chunk-buildings 348 (0.2%) | venue-posters 222 | citizens/weather/tram/venue-pools 0 Buildings are 348 tris (the R3 atlas/instancing holds). Posters are 222 -- A's cap already worked and was never the lever. Pools cost 0. Inside furniture -- the four GLBs are the whole bill: bench 1,942 tris/inst x64 = 60,202 (37%) <- procity_street_bench_01 bus_shelter 7,998 x10 = 55,986 (34%) <- procity_street_bus_shelter_01 bin 3,000 x19 = 18,000 (11%) <- procity_street_bin_01 food_cart 4,991 x8 = 14,973 (9%) <- procity_street_food_cart_01 pole/lamp/trees/novelty (primitives) x303 = 2,180 (1.3%) Identity confirmed by DCC-authored material names (wire_143225087 = a Sketchfab scan, baked_mat, "2 wood frame ", Material_0) -- E's GLBs, not our procedural materials. Two use MeshPhysicalMaterial. WHY NOW (and why it is NOT the density widening): shop count doesn't drive this -- ROAD density does. Real towns put the bench/bin/shelter cadence on a 966-edge graph, so ~100 GLB props land in the streamed set where synthetic had a handful. A 1.2m bench at 1,942 tris is ~5x the entire building stock in frame. This is B's own R6 note coming due ("street_bin 3.0k tris... a decimate to ~500 would give back tri headroom if the combined-lane budget tightens"). -> E, suggested targets: bench 1942->~250, bus_shelter 7998->~600, bin 3000->~200, food_cart 4991->~400. 149,161 -> ~29,000 (saves ~120k). Projected: my 163k -> ~43k; F's 221,935 -> ~102k. Both far under 200k. Cheap extra: drop the two MeshPhysicalMaterials to MeshStandardMaterial. -> Fable: a B-side fallback exists (furniture.js already has a primitive fallback for every GLB prop via the R4 use-if-ready path), so a distance-gated LOD is a contained B change I can land fast. NOT doing it unilaterally -- per the ledger this is E's, and source decimation helps every town/view, not just this one. -> F: my baseline is 163,015 vs your 221,935 on the same view -- my automation's rAF is throttled so the live gig crowd never spawns (citizens measured 0). Furniture is still ~68% of your number; decimation clears the gate on either baseline. Re-measure against the live crowd, not my figure. Co-Authored-By: Claude Opus 4.8 --- docs/LANES/LANE_B_NOTES.md | 75 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) 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