PROCITY/docs/LANES/LANE_E_NOTES.md
m3ultra dafb079ff4 Lane E round 4 (E2): fix record_crate + ship counter-with-till, both live on depot
- record_crate: R3 normalize left a sourceless texture (packed AO/roughness map
  didn't survive WebP export; metallicRoughness+occlusion pointed at it) → three.js
  'undefined uri' crash. New pipeline/fix_glb_textures.py strips material slots that
  reference a sourceless texture. Verified loads in vendored GLTFLoader; re-published.
- counter_till (new fitting): ~2m timber counter + period till, flux_local→trellis_mac
  on-device, 1.61x0.64m / 1.15m tall, 32k tris. Verified loads; published. Lane C maps
  kind counter -> counter_till (balcao 4m 'counter' kept for long-bar use).
- publish.py: --only <name> filter + passwordless tailnet detection (GOD3_DEPOT override).
- manifest rebuilt (15 fittings, alias counter->counter_till); validate --depot 0 errors.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-14 19:07:15 +10:00

3.4 KiB
Raw Blame History

LANE E — cross-lane notes (round 4)

→ Lane D (task D2): decimated peds ready to validate

The 19 ped rigs in web/models/peds/ are decimated and staged (committed 518678d, ref lane-e/round4-peds). Please validate rig binding + animation:

  • ≤3k tris each (range 15642805; per-ped before/after in pipeline/_peds_decim.json). Fleet total 924k → 46.5k tris (48.6k → 2.45k avg). At the 24-rig near cap ≈ ≤67k.
  • Skinning preserved: JOINTS_0/WEIGHTS_0 intact; skeleton unchanged (nodes + 65 joints identical to source on every ped I checked), so the shared walk.glb/idle.glb clips retarget unchanged. walk.glb/idle.glb were NOT touched.
  • Method: gltf-transform weldsimplify --ratio 0.05 --error 0.12 (meshoptimizer — works because these are manifold skinned meshes, not R3 TRELLIS shell-soup). Contact sheet: docs/shots/laneE/peds_decimated.png (silhouettes/textures clean at street distance; fingers merge + faces flatten as expected at 3k, no melting).
  • Originals backed up (gitignored) at pipeline/.peds_orig/ if you need a before/after diff.

If any rig fails to bind/animate or a silhouette reads badly, tell me the file(s) and I'll re-run that one with a gentler error (0.08 keeps ~50% more tris but still <5k). Then F re-measures gate 3 after your sign-off.

→ Lane C: E2 asset re-exports

  1. procity_fit_record_crate_01.glb — FIXED. Root cause of your undefined 'uri' crash: the material's metallicRoughnessTexture + occlusionTexture both pointed at a sourceless texture (the packed AO/roughness map failed to encode to WebP during normalize; base-colour
    • normal were fine). Fix: pipeline/fix_glb_textures.py strips material slots that reference a sourceless texture (orphaning it — three.js loads textures lazily, so no crash). Verified it loads in the real vendored GLTFLoader (meshes=1, tris=5000, textures ok) alongside a bookshelf control. Re-published to the depot — re-map record_crate/recordBin in glb.js (they should already be mapped) and it'll upgrade instead of falling back.
  2. counter-with-till — LIVE. New fitting counter_till (procity_fit_counter_till_01.glb): 1.61 × 0.64 m footprint, 1.15 m tall, timber counter + cabinet doors + period beige till on top (flux_local concept → trellis_mac, on-device). Fixes the R3 4 m till-less counter that squashed. Verified it loads in the vendored GLTFLoader (32k tris — TRELLIS shell-soup floor, within decision-#2's 2577k for focal props) and live on the depot (validate --depot 0 err). → In glb.js re-add counter to KIND_TO_GLB mapping to 'counter_till' (NOT the old counter = balcao, which is a 4 m long bar counter kept for shops that want it). The manifest fittingAliases.countercounter_till too. It's base-origin (minY=0), so your footprint-fit + floor-plant works unchanged; at a 1.42.0 m counter slot it scales to a believable ~1.01.4 m tall counter.

→ Fable: status

  • E1 (gate-3 critical path): DONE. Peds ≤3k, committed + pinned. Unblocks D2 → F3.
  • E2a record_crate: DONE + verified (loads in vendored GLTFLoader). Re-published.
  • E2b counter: in progress (local, on-device — no fal spend per decision #3).
  • Not doing: fal.ai spend (glass-case/bus-shelter stay parked), hero-prop bake-to-lowpoly.