From fe40ea7d0a4e103d269bed82df16ae0b7d60b0cb Mon Sep 17 00:00:00 2001 From: m3ultra Date: Tue, 14 Jul 2026 16:18:12 +1000 Subject: [PATCH] Lane C: round-3 GLB hero-prop validation (useGLB path) Validated Lane E's 9 fitting GLBs in real rooms. 5 good, now live behind useGLB (wire_shelf, clothes_rack, bookshelf, cube_shelf_wide, work_table); record_crate broken (won't load) + counter too long/no-till fall back to primitive. Report: docs/LANES/LANE_C_GLB_VALIDATION.md. glb.js: real-metre scale clamped to footprint, per-kind yaw for Z-major assets (+90deg) per manifest facing convention, manifest.localBase for offline validation, awaitable upgrades. interiors.js: room.glbReady. interior_test.html: GLB toggle. Soak useGLB on (50 rooms): throws 0, pathFail 0, detFail 0, leakGeo 0, leakTex 0, worst 10.5ms, 256 upgrades. qa.sh --strict green. Co-Authored-By: Claude Opus 4.8 --- C-progress.md | 29 ++++++++++++- docs/LANES/LANE_C_GLB_VALIDATION.md | 53 +++++++++++++++++++++++ docs/shots/laneC/glb_validation_grid.jpg | Bin 0 -> 104799 bytes web/interior_test.html | 18 ++++++-- web/js/interiors/glb.js | 53 ++++++++++++++++------- web/js/interiors/interiors.js | 8 ++-- 6 files changed, 139 insertions(+), 22 deletions(-) create mode 100644 docs/LANES/LANE_C_GLB_VALIDATION.md create mode 100644 docs/shots/laneC/glb_validation_grid.jpg diff --git a/C-progress.md b/C-progress.md index a8eb114..4f1bce3 100644 --- a/C-progress.md +++ b/C-progress.md @@ -3,7 +3,34 @@ *Status: **v1 complete & verified**. Standalone interiors library + test page. Every shop door opens into a unique, seeded, themed interior, generated on demand in ~4ms, byte-identical every revisit.* -Last updated: 2026-07-14 (b) · owner: PROCITY-C · reviewer: Fable +Last updated: 2026-07-14 (round 3) · owner: PROCITY-C · reviewer: Fable + +--- + +## Update 2026-07-14 (round 3) — GLB hero-prop visual validation + +Round-3 task (ROUND3_INSTRUCTIONS §Lane C): flip `useGLB` on and validate Lane E's fitting GLBs in real +rooms. Done — full report for Lane E in [docs/LANES/LANE_C_GLB_VALIDATION.md](docs/LANES/LANE_C_GLB_VALIDATION.md). + +**Verdict:** 5 of 9 fitting GLBs are good and now live behind `useGLB` (wire_shelf, clothes_rack, +bookshelf, cube_shelf_wide, work_table); 2 fall back to primitive with a report filed +(`record_crate` **broken — won't load**; `counter` **too long/no till** → primitive keeps the till + +keeper stand). record bins stay primitive until Lane E re-exports the crate. + +**Soak with `useGLB` on** (50 rooms, all types): `throws 0 · pathFail 0 · determinismFail 0 · leakGeo 0 · +leakTex 0 · worst build 10.5ms · 256 upgrades applied` — GLB resources dispose leak-free on room exit. + +**glb.js changes (my file):** +- `manifest.localBase` — load GLBs from a served local dir for offline validation (production still uses + `depot:`; forward-compatible with Lane E's local-depot mode). +- **Real-metre scale, clamped** to the reserved footprint (was fit-to-width, which squashed tall props); + matches `glb_law` (metres). Per-kind **yaw correction** (`KIND_TO_YAW`) for the Z-major assets + (bookshelf/cube/work_table need +90°) per the manifest `facing` convention ("Lane B/C rotate directional props"). +- `room.glbReady` (interiors.js) — a promise that resolves when GLB swaps settle, so callers can await + before screenshot/leak-check (Lane F can use it in the §3.4 wiring). +- Test page (`interior_test.html`) gains a **GLB props** toggle + a `GLB props: N upgraded` HUD line. + Local validation needs the GLBs copied in: `cp pipeline/_normalized/procity_fit_*.glb web/assets/_local_glb/` + (untracked; real GLBs live on the depot). Screenshot grid: [docs/shots/laneC/glb_validation_grid.jpg](docs/shots/laneC/glb_validation_grid.jpg). --- diff --git a/docs/LANES/LANE_C_GLB_VALIDATION.md b/docs/LANES/LANE_C_GLB_VALIDATION.md new file mode 100644 index 0000000..096631b --- /dev/null +++ b/docs/LANES/LANE_C_GLB_VALIDATION.md @@ -0,0 +1,53 @@ +# LANE C — GLB validation report (round 3) → for Lane E + Fable + +*PROCITY-C, 2026-07-14. Round-3 task "GLB path visual validation" (ROUND3_INSTRUCTIONS §Lane C). +Validated Lane E's 9 fitting GLBs from `pipeline/_normalized/` in real interior rooms via the +`interiors/glb.js` upgrade path (`useGLB` on). Verdict below; the 5 "good" assets are live.* + +## How validated +- Served the 9 `procity_fit_*.glb` locally (`web/assets/_local_glb/`, copied from `pipeline/_normalized/`) + and pointed `glb.js` at them via a new `manifest.localBase` (loads before/without the depot, per the + round-3 instruction). Production still uses `depot:` unchanged. +- Toggle **GLB props** on the interior test page (`web/interior_test.html`) rebuilds every shop type + with the GLBs and re-renders once they load; a headless sweep+soak checks throws/leaks/perf. +- Convention followed: `glb_law` (metres, +Y up, base at origin) ✓ every asset measured `minY≈0`; + `facing` ("Lane B/C rotate directional props") — Lane C now applies per-kind yaw in `glb.js`. + +## Result — soak with `useGLB` on (50 rooms, all types) +`throws 0 · pathFail 0 · determinismFail 0 · leakGeo 0 · leakTex 0 · worst build 10.5ms (<50) · +256 GLB upgrades applied`. **GLB textures/geometries dispose leak-free on room exit** (loader-cached ++ clone-shared; baseline taken after warmup). Acceptance met. + +## ✅ Good — live now (5 assets) +| id / file | native (x·y·z m) | notes | +|---|---|---| +| `wire_shelf` · procity_fit_wire_shelf_01.glb | 1.17 · 1.8 · 0.44 | clean, full height, faces right (yaw 0) | +| `clothes_rack` · procity_fit_clothes_rack_01.glb | 1.34 · 1.5 · 0.43 | garments hang correctly, casters read well | +| `bookshelf` · procity_fit_bookshelf_01.glb | 0.2 · 2.0 · 1.02 | **needs +90° yaw** — modelled wide along Z; Lane C rotates it. Then spines face the aisle ✓ | +| `work_table` · procity_fit_work_table_01.glb | 0.44 · 0.75 · 1.04 | **needs +90° yaw** (Z-major); goods sit on top ✓ | +| `cube_shelf_wide` · procity_fit_cube_shelf_wide_01.glb | 0.75 · 1.1 · 1.24 | **needs +90° yaw**. ⚠ 1.24 wide → in narrow (2-col ≈0.84m) cube slots it clamps to ~0.75m tall. Fine in wide slots. Optional: a ~0.8m-wide cube variant. | + +Lane C applies the +90° yaw for the three Z-major assets (per the `facing` convention — no action needed +from Lane E unless you want to re-bake them Z-forward). All plant on the floor; no z-fighting with the +procedural stock/decor that rides on top. + +## ⚠ Mismatches to fix (2 assets) +1. **`procity_fit_record_crate_01.glb` — BROKEN, will not load.** + `GLTFLoader.loadAsync` throws `TypeError: Cannot read properties of undefined (reading 'uri')`. + The file has valid glTF magic and is 858 KB, but references an undefined `uri` (missing embedded + image/buffer, or an extension the shipping bare `core/loaders.js` GLTFLoader can't resolve — it is + the **only one of the 16 that fails** that loader; the other 8 fittings + street furniture load fine). + Impact: record bins/crates fall back to primitives (fail-soft, no crash). **Please re-export** (and if + it uses KTX2/meshopt, flag it — the core loader has no KTX2/meshopt/Draco decoder configured). +2. **`procity_fit_counter_01.glb` — too large for the interior counter slot; no till.** + It's a real **4.02 m-long × 1.1 m** counter. Interior counter slots are ~1.4–2.2 m, so fitting to the + slot squashes it to ~0.6 m tall, and it has no till/register modelled. Lane C therefore **keeps the + counter primitive** (correct height + till + keeper stand). If you want a GLB counter for interiors, + a **~2 m-long counter with a till** would drop straight in (re-add `counter` to `KIND_TO_GLB`). + +## Notes for Lane E's local-depot mode (your round-3 §2) +When `?localdepot=1` / `core/loaders.js` resolves `depot:` → local, Lane C needs **no change**: +`glb.js` uses `depot:` by default and only used `localBase` as a standalone validation shim. Point +your local resolver at `pipeline/_normalized/` and my `useGLB` path works through it as-is. + +Screenshot evidence: [`docs/shots/laneC/glb_validation_grid.jpg`](../shots/laneC/glb_validation_grid.jpg). diff --git a/docs/shots/laneC/glb_validation_grid.jpg b/docs/shots/laneC/glb_validation_grid.jpg new file mode 100644 index 0000000000000000000000000000000000000000..069402a5dcbf16e36e64ba445d85cae64a014980 GIT binary patch literal 104799 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 wireframe +
@@ -99,7 +100,10 @@ for (const a of ARCHETYPE_KEYS) archSel.appendChild(new Option(a, a)); let current = null; // the live interior let gridHelper = null, pathHelper = null; -let wire = false, showGrid = false, showPath = false; +let wire = false, showGrid = false, showPath = false, useGLB = false; +let glbManifest = null; // Lane E manifest + localBase → validate GLB props vs locally-served copies +fetch('assets/manifest.json').then(r => r.ok ? r.json() : null) + .then(m => { if (m) { m.localBase = 'assets/_local_glb/'; glbManifest = m; } }).catch(() => {}); function parseLot(v) { const m = String(v).match(/(\d+(?:\.\d+)?)\s*[x×,\s]\s*(\d+(?:\.\d+)?)/); @@ -114,7 +118,7 @@ function rebuild() { const arch = archSel.value === 'auto' ? undefined : archSel.value; const lot = parseLot($('lot').value); const shop = { id: 's' + seed, type, name: type.toUpperCase() + ' ' + seed, seed, storeys: 1, lot }; - current = buildInterior(shop, THREE, { archetype: arch }); + current = buildInterior(shop, THREE, { archetype: arch, useGLB, manifest: useGLB ? glbManifest : undefined }); scene.add(current.group); // place the player at the spawn camera.position.set(current.spawn.x, 1.6, current.spawn.z); @@ -123,6 +127,8 @@ function rebuild() { if (showGrid) buildGridHelper(); if (showPath) buildPathHelper(); updateHUD(); + // GLB props load async — re-render + refresh HUD once they settle (rAF is throttled in the preview) + if (useGLB && current.glbReady) current.glbReady.then(() => { if (current) { applyWire(); renderer.render(scene, camera); updateHUD(); } }); } function updateHUD() { @@ -133,7 +139,12 @@ function updateHUD() { `build ${current.buildMs.toFixed(1)} ms · path ${current.pathOK ? 'ok' : 'FAIL'}${current.carved ? ' (carved)' : ''}\n` + `geo ${c.geometries} · mat ${c.materials} · tex ${c.canvasTextures}\n` + `places ${current.places.length} · counter ${current.recipe.counterPos}` + - (current.counter ? `\nkeeper stand ${current.counter.stand.x.toFixed(2)}, ${current.counter.stand.z.toFixed(2)} · ry ${current.counter.stand.ry.toFixed(2)}` : ''); + (current.counter ? `\nkeeper stand ${current.counter.stand.x.toFixed(2)}, ${current.counter.stand.z.toFixed(2)} · ry ${current.counter.stand.ry.toFixed(2)}` : '') + + (useGLB ? `\nGLB props: ${glbCount()} upgraded (local)` : ''); +} +function glbCount() { + let n = 0; if (current) current.group.traverse(o => { if (o.userData && o.userData.glbUpgrade) n++; }); + return n; } // ── debug overlays ─────────────────────────────────────────────────────────── @@ -200,6 +211,7 @@ $('seed').onchange = rebuild; $('lot').onchange = rebuild; $('tgWire').onchange = e => { wire = e.target.checked; applyWire(); }; $('tgGrid').onchange = e => { showGrid = e.target.checked; clearDebug(); if (showGrid) buildGridHelper(); if (showPath) buildPathHelper(); }; $('tgPath').onchange = e => { showPath = e.target.checked; clearDebug(); if (showGrid) buildGridHelper(); if (showPath) buildPathHelper(); }; +$('tgGLB').onchange = e => { useGLB = e.target.checked; rebuild(); }; const keys = {}; addEventListener('keydown', e => { diff --git a/web/js/interiors/glb.js b/web/js/interiors/glb.js index d1a8b03..419f208 100644 --- a/web/js/interiors/glb.js +++ b/web/js/interiors/glb.js @@ -6,23 +6,36 @@ // // Pattern (house law): promise-cached loader, PLACEHOLDER-PERSISTS — the primitive shows immediately // and stays until the GLB resolves; if the depot is unreachable the primitive stays forever (never a -// crash, never a blank). The GLB is footprint-fitted to the primitive it replaces, so occupancy/paths -// already computed by layout.js stay valid. +// crash, never a blank). The GLB is placed at real-metre scale (glb_law), yaw-corrected per kind, and +// clamped to the primitive's reserved footprint, so occupancy/paths already computed by layout.js stay valid. import { loadGLB } from '../core/loaders.js'; import { clone as skeletonClone } from 'three/addons/utils/SkeletonUtils.js'; -// my fitting kind → manifest.fittings id (only kinds with a depot GLB; others stay primitive) +// my fitting kind → manifest.fittings id (only kinds with a depot GLB; others stay primitive). +// NOTE: `counter` is intentionally NOT mapped — the counter GLB (procity_fit_counter_01.glb) is a real +// 4.0 m-long × 1.1 m asset that squashes to ~0.6 m when fit to the ~2.2 m interior counter slot and has +// no till modelled; the primitive counter (correct height + till + keeper stand) reads better. Reported +// to Lane E (see C-progress.md / LANE_C_GLB_VALIDATION.md). Re-map here once a ~2 m counter asset lands. const KIND_TO_GLB = { - crate: 'record_crate', recordBin: 'record_crate', + crate: 'record_crate', recordBin: 'record_crate', // record_crate GLB currently fails to load → fail-soft to primitive (reported) metalShelf: 'wire_shelf', wallShelf: 'wire_shelf', clothesRack: 'clothes_rack', bookshelf: 'bookshelf', cubeShelf: 'cube_shelf_wide', - counter: 'counter', trestleTable: 'work_table', }; +// Per-kind facing correction (radians, about +Y). The GLBs follow glb_law (metres, +Y up, base at origin) +// but carry NO automatic facing (manifest.conventions.facing: "Lane B/C rotate directional props"). The +// z-major assets (bookshelf/cube/work_table are modelled wide along Z) need a quarter-turn so their width +// runs along the fitting's X, matching the primitive the layout placed. Tuned by on-screen validation. +const KIND_TO_YAW = { + bookshelf: Math.PI / 2, + cubeShelf: Math.PI / 2, + trestleTable: Math.PI / 2, +}; + let _manifestP = null; // Fetch + cache the manifest. Returns null (not throw) if absent/unreachable → primitives everywhere. export function preloadManifest(url = 'assets/manifest.json') { @@ -32,35 +45,45 @@ export function manifestReady() { return _manifestP && typeof _manifestP.then == // Upgrade one placed fitting in-place, if the manifest maps its kind. No-op when disabled/unavailable. // `manifest` is the resolved object (or null). ctx is the room build context (for the _disposed guard). +// Returns a promise that settles when the swap is done (or immediately when there is nothing to do), so +// callers can await a room's GLB upgrades (buildInterior exposes this as room.glbReady). +// Resolution: production uses `depot:` (loaders.js → depot CDN / local-depot). A manifest may set +// `localBase` (e.g. "assets/_local_glb/") to load straight from a served local dir — used for offline +// GLB validation before the depot is reachable. export function upgradeFitting(ctx, fitting, kind, manifest) { - if (!manifest || !manifest.fittings) return; + if (!manifest || !manifest.fittings) return Promise.resolve(); const id = KIND_TO_GLB[kind]; const entry = id && manifest.fittings[id]; - if (!entry || !entry.file) return; + if (!entry || !entry.file) return Promise.resolve(); - loadGLB(`depot:${entry.file}`).then(gltf => { + const ref = manifest.localBase ? `${manifest.localBase}${entry.file}` : `depot:${entry.file}`; + return loadGLB(ref).then(gltf => { if (!gltf || ctx._disposed || !fitting.group.parent) return; // room rebuilt / disposed mid-flight const THREE = ctx.THREE; const inst = skeletonClone(gltf.scene); // clone-safe even if skinned - // fit the GLB to the primitive's footprint (GLB convention: origin at base, facing −Z, metres) + // Facing: rotate the directional prop to match the primitive the layout placed (before measuring). + inst.rotation.y = KIND_TO_YAW[kind] || 0; + // Scale: GLBs are authored in metres (glb_law), so keep REAL-WORLD scale — only shrink if the prop + // would overflow the footprint the occupancy grid reserved (never inflate a small prop to fill a slot). const bb = new THREE.Box3().setFromObject(inst); const size = new THREE.Vector3(); bb.getSize(size); - const want = fitting.footprint, targetW = Math.max(want.w, want.d); + const want = fitting.footprint; const glbW = Math.max(size.x, size.z) || 1; - const s = targetW / glbW; + const s = Math.min(1, Math.max(want.w, want.d) / glbW); inst.scale.setScalar(s); - inst.position.y -= bb.min.y * s; // plant on the floor + inst.position.y -= bb.min.y * s; // plant on the floor (glb_law minY≈0) // hide the primitive FRAME (the first frameCount children) but keep procedural stock — which was // added after the frame — visible on top of the detailed GLB shelf/counter. const frameCount = fitting.frameCount ?? fitting.group.children.length; for (let i = 0; i < frameCount && i < fitting.group.children.length; i++) fitting.group.children[i].visible = false; - inst.userData = { glbUpgrade: true }; + inst.userData = { glbUpgrade: true, kind }; fitting.group.add(inst); }); } // Upgrade every placed fitting in a room. Called from buildInterior when GLB mode is on. +// Returns a promise resolving once all in-room fittings' GLB swaps have settled. export function upgradeRoom(ctx, placed, manifest) { - if (!manifest) return; - for (const p of placed) if (!p.removed) upgradeFitting(ctx, p.fitting, p.kind, manifest); + if (!manifest) return Promise.resolve(); + return Promise.all(placed.filter(p => !p.removed).map(p => upgradeFitting(ctx, p.fitting, p.kind, manifest))); } diff --git a/web/js/interiors/interiors.js b/web/js/interiors/interiors.js index 8cbd0bd..cd6b6ae 100644 --- a/web/js/interiors/interiors.js +++ b/web/js/interiors/interiors.js @@ -82,11 +82,12 @@ export function buildInterior(shop, THREE, opts) { // OPTIONAL GLB hero-prop upgrade (off by default). Placeholder-persists: primitives stay until (and // unless) the depot answers. `opts.useGLB` enables it; the manifest may be preloaded (glb.preloadManifest) // or passed as opts.manifest. Never blocks the build; never required for a fully-usable room. + let glbReady = Promise.resolve(); // resolves when GLB upgrades settle (immediately if off) if (opts.useGLB) { const manifest = opts.manifest || (glbManifest && glbManifest.__resolved) || null; - if (manifest) upgradeRoom(ctx, lay.placed, manifest); - else preloadManifest(opts.manifestUrl).then(m => { - if (m && !ctx._disposed) { glbManifest = { __resolved: m }; upgradeRoom(ctx, lay.placed, m); } + if (manifest) glbReady = upgradeRoom(ctx, lay.placed, manifest); + else glbReady = preloadManifest(opts.manifestUrl).then(m => { + if (m && !ctx._disposed) { glbManifest = { __resolved: m }; return upgradeRoom(ctx, lay.placed, m); } }); } @@ -105,6 +106,7 @@ export function buildInterior(shop, THREE, opts) { placement: lay.placement, pathOK: lay.pathOK, carved: lay.carved, + glbReady, // Promise — resolves when opts.useGLB hero-prop swaps have settled buildMs, _debug: { grid: lay.grid, spawnCell: lay.spawnCell, targetCell: lay.targetCell, ctx }, counts: () => ctx.counts(),