- 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>
50 lines
3.4 KiB
Markdown
50 lines
3.4 KiB
Markdown
# 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 1564–2805; 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 weld` → `simplify --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 25–77k 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.counter` → `counter_till` too. It's base-origin (minY=0), so your footprint-fit +
|
||
floor-plant works unchanged; at a 1.4–2.0 m counter slot it scales to a believable ~1.0–1.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.
|