From 04e15d3e39c4fc01b53d5bf5b2c5ae527ce03ab7 Mon Sep 17 00:00:00 2001 From: type-two Date: Sat, 18 Jul 2026 20:49:22 +1000 Subject: [PATCH] [laneA] M3-polish: PiP cap+swap, spec-gloss GLB fix (lady renders textured) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PiP: sized in _resize (~24% w, 16:9, bottom-right) — CSS aspect-ratio is unreliable on and had ballooned it. Click-to-swap main<->active cam; _render(cam,canvas) restores aspect after a pip blit so swap never distorts. renderActiveCamera/pause/resume contract unchanged (M3 finalRender safe). - room3d: SpecGlossPlugin on GLTFLoader — CC/Reallusion GLBs use KHR_materials_pbrSpecularGlossiness (dropped in three r160) and rendered flat white; map spec-gloss -> MeshStandard. lady.glb now withMap=26/26. Verified live at :8020, zero console errors. Co-Authored-By: Claude Opus 4.8 --- logs/laneA.md | 32 +++++++++++++++++++++++++++++ logs/shots/m3-pip-swap.png | Bin 0 -> 70576 bytes scenegod/web/room3d.js | 24 +++++++++++++++++++++- scenegod/web/stage.js | 41 +++++++++++++++++++++++-------------- scenegod/web/style.css | 8 ++++---- 5 files changed, 85 insertions(+), 20 deletions(-) create mode 100644 logs/shots/m3-pip-swap.png diff --git a/logs/laneA.md b/logs/laneA.md index f9de794..990630b 100644 --- a/logs/laneA.md +++ b/logs/laneA.md @@ -115,3 +115,35 @@ BLOCKED/REQUESTS — INTEGRATION GAP (orchestrator, please route): NEXT: once the entity-mirror seam is decided, the "lady + man + street + 2 cameras + sunset" SYNC-2 demo should play. Holding at the M2 boundary until the orchestrator flips the milestone line. + +## 2026-07-18 session 3 (M3-polish) +DONE: both M3-polish items the orchestrator flagged, verified live at :8020. +- **PiP cap + swap.** Was fixed 256×144 and (with the CSS `aspect-ratio`/`%` combo) blew up to + 340×413 portrait on a `` — CSS aspect-ratio is unreliable on replaced elements. Now sized + in `_resize()`: `clamp(180, view.width*0.24, 340)` wide × 16:9, bottom-right. Click the inset to + swap main↔active-cam (`_pipSwap`). Refactored `renderActiveCamera`→ private `_render(cam,canvas)` + that restores the cam's aspect after a pip blit, so swapping never distorts either camera + (verified: dirCam.aspect stays 1.79 while it's shown in the inset). `renderActiveCamera(canvas)` + is now a one-line wrapper over `_render(this._activeCam(), canvas)` — M3 contract unchanged; + `pause()/resume()` untouched. Verified 180×101 @1.78 ratio, swap flips the views cleanly. +- **lady.glb flat-white diagnosed + fixed.** It's the ASSET: a Reallusion/Character-Creator export + with `extensionsRequired:["KHR_materials_pbrSpecularGlossiness"]` — diffuse lives in that + extension, which three r160 dropped, so all 26 materials fell back to white MeshStandard. (rigroom + would show the same — no port regression.) Since SCENEGOD must eat any dropped character, added a + minimal `SpecGlossPlugin` registered on GLTFLoader in room3d.js: spec-gloss → MeshStandard + (diffuse→map/color, roughness≈1−glossiness, metalness 0). Only touches materials carrying the + extension; metallic-rough GLBs and FBX untouched. Verified: lady loads with withMap=26/26 and + renders fully textured (skin/clothes/face). Shot: `logs/shots/m3-pip-swap.png`. + +DECISIONS: +- Runtime spec-gloss shim over an offline gltf-transform convert: keeps CC characters "just work" + in the drop-on-stage flow and in the render pipeline, no per-asset conversion step. Approximation + (ignores the specular map) is fine for machinima lighting; upgrade path = full spec→metal convert + if a hero asset needs it. +- PiP size lives in JS, not CSS — `` + `aspect-ratio` is the trap that produced the giant + inset. CSS keeps only position/border. + +BLOCKED/REQUESTS: none. + +NEXT: hold at M3-polish boundary. Available for SYNC-3 findings (finalRender drives +`pause`/`resume`/`renderActiveCamera` — kept stable per the hard contract). diff --git a/logs/shots/m3-pip-swap.png b/logs/shots/m3-pip-swap.png new file mode 100644 index 0000000000000000000000000000000000000000..4de7bd682a07081b7c5407402e30c026d770cd64 GIT binary patch literal 70576 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/glb) + magic-byte fallback: gltf binary starts "glTF" @@ -19,7 +39,9 @@ export async function parseAny(buf, name){ else name += '.glb'; // worst case the loader throws a clear error } if(name.endsWith('.glb') || name.endsWith('.gltf')){ - const g = await new GLTFLoader().parseAsync(buf, ''); return {root:g.scene, anims:g.animations||[]}; } + const loader = new GLTFLoader(); + loader.register(p => new SpecGlossPlugin(p)); // Reallusion/CC exports need this (r160 dropped it) + const g = await loader.parseAsync(buf, ''); return {root:g.scene, anims:g.animations||[]}; } if(name.endsWith('.fbx')){ const r = new FBXLoader().parse(buf, ''); return {root:r, anims:r.animations||[]}; } if(name.endsWith('.obj')){ const r = new OBJLoader().parse(new TextDecoder().decode(buf)); r.traverse(o=>{ if(o.isMesh && !o.material.map) o.material = new THREE.MeshStandardMaterial({color:0x9aa4af, roughness:.7}); }); diff --git a/scenegod/web/stage.js b/scenegod/web/stage.js index f89150c..8fc2205 100644 --- a/scenegod/web/stage.js +++ b/scenegod/web/stage.js @@ -26,9 +26,13 @@ export class Stage { view.appendChild(r.domElement); this._paused = false; // M3 final render freezes the director loop, then drives renderActiveCamera - // PiP overlay — the active camera's view, shown top-right when a camera is active + // PiP overlay — the active camera's view (bottom-right). CSS sizes it (~24% w); the buffer + // stays small. Click to swap which view is main vs inset. const pip = this._pip = document.createElement('canvas'); - pip.width = 256; pip.height = 144; pip.className = 'pip'; pip.style.display = 'none'; + pip.width = 320; pip.height = 180; pip.className = 'pip'; pip.style.display = 'none'; + pip.title = 'click to swap with the main view'; + this._pipSwap = false; + pip.addEventListener('click', () => { this._pipSwap = !this._pipSwap; }); view.appendChild(pip); const scene = this.scene = new THREE.Scene(); @@ -68,15 +72,19 @@ export class Stage { if(this._paused) return; // M3: caller drives rendering deterministically ctr.update(); if(this._mixerAuto) for(const en of this._entities.values()) en.mixer && en.mixer.update(dt); - // PiP first (it scribbles the active cam onto the main canvas), then the director view last - if(this._activeCamId && pip.style.display !== 'none') this.renderActiveCamera(pip); - r.render(scene, this._dirCam); + // inset first (it scribbles onto the main canvas), then the main view last so it wins + if(this._activeCamId && pip.style.display !== 'none') + this._render(this._pipSwap ? this._dirCam : this._activeCam(), pip); + this._render((this._pipSwap && this._activeCamId) ? this._activeCam() : this._dirCam, null); }; loop(); } _resize(){ const w=this.view.clientWidth, h=this.view.clientHeight; - this.renderer.setSize(w, h, false); this._dirCam.aspect = w/h; this._dirCam.updateProjectionMatrix(); } + this.renderer.setSize(w, h, false); this._dirCam.aspect = w/h; this._dirCam.updateProjectionMatrix(); + // size the inset here — CSS aspect-ratio/% is unreliable on a + const pw = Math.max(180, Math.min(340, w*0.24)); + this._pip.style.width = Math.round(pw)+'px'; this._pip.style.height = Math.round(pw*9/16)+'px'; } // ---- callbacks ---- onSelect(cb){ this._selCbs.push(cb); } @@ -322,17 +330,20 @@ export class Stage { } _activeCam(){ const en = this._activeCamId && this._entities.get(this._activeCamId); return en && en.cam ? en.cam : this._dirCam; } + // render `cam` to the main WebGL canvas at the target's aspect; if `canvas` given, blit there and + // restore the cam's aspect (so using a cam for the inset never distorts it in the main view). + _render(cam, canvas){ + const w = canvas ? canvas.width : this.renderer.domElement.width; + const h = canvas ? canvas.height : this.renderer.domElement.height; + const prev = cam.aspect; + if(cam.isPerspectiveCamera){ cam.aspect = w/h; cam.updateProjectionMatrix(); } + this.renderer.render(this.scene, cam); + if(canvas){ canvas.getContext('2d').drawImage(this.renderer.domElement, 0, 0, canvas.width, canvas.height); + if(cam.isPerspectiveCamera && cam.aspect !== prev){ cam.aspect = prev; cam.updateProjectionMatrix(); } } + } // PiP: pass the small overlay canvas. Final render (M3): pass null after pause() — the active cam // lands on the main WebGL canvas at its current size for readPixels/toBlob. Hard contract, keep it. - renderActiveCamera(canvas){ - const cam = this._activeCam(); - const aspect = canvas ? canvas.width/canvas.height - : this.renderer.domElement.width/this.renderer.domElement.height; - if(cam.isPerspectiveCamera){ cam.aspect = aspect; cam.updateProjectionMatrix(); } - this.renderer.render(this.scene, cam); - if(canvas){ const ctx = canvas.getContext('2d'); - ctx.drawImage(this.renderer.domElement, 0, 0, canvas.width, canvas.height); } - } + renderActiveCamera(canvas){ this._render(this._activeCam(), canvas); } pause(){ this._paused = true; } resume(){ this._paused = false; this.clock.getDelta(); } // swallow the paused gap so mixers don't jump diff --git a/scenegod/web/style.css b/scenegod/web/style.css index be3c8d5..a7b3d1f 100644 --- a/scenegod/web/style.css +++ b/scenegod/web/style.css @@ -66,10 +66,10 @@ body.hot::after{content:'drop to load';position:fixed;inset:0;display:flex;align #toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:var(--panel); border:1px solid var(--teal);border-radius:9px;padding:9px 16px;font-size:13px;display:none;z-index:50;max-width:80vw} -/* PiP — active camera preview overlay */ -.pip{position:absolute;top:12px;right:12px;width:256px;height:144px;border:1px solid var(--teal); - border-radius:6px;background:#000;box-shadow:0 4px 18px rgba(0,0,0,.55);z-index:5} -.pip::after{content:'CAM'} +/* PiP — active camera preview inset (bottom-right, ~24% wide, click to swap). Size set in JS. */ +.pip{position:absolute;right:12px;bottom:12px;border:1px solid var(--teal);border-radius:6px; + background:#000;cursor:pointer;box-shadow:0 4px 18px rgba(0,0,0,.55);z-index:5} +.pip:hover{border-color:var(--ink)} /* dock "add rig" toolbar (cameras + lights have no asset file) */ .addbar{display:flex;gap:6px;margin-bottom:10px}