From 848ca76060431714c2e07a5c3b5a58cb4c13f481 Mon Sep 17 00:00:00 2001 From: Ruofei Du Date: Sat, 18 Jul 2026 19:45:32 -0700 Subject: [PATCH 1/2] feat(web demo): Added a GNM web demo using XR Blocks Live demo: https://xrblocks.github.io/demos/gnm Introduces a purely browser-based demonstration for the Generative aNthropometric Model (GNM) that runs across desktop, mobile, and Android XR devices. This demo leverages the XR Blocks SDK for 3D scene management, rendering, and spatial UI. Key additions include: - Core WebGL/JS components: GNMModel, GNMControls, GNMScene, and SemanticSampler to handle model logic, rendering, and interactions. - Demo web application structure: index.html, main.js, and CSS files. - Python export utility (tools/export_gnm_web.py) to convert GNM weights into web-optimized binary formats. - Comprehensive README with instructions on running locally and fetching model assets (either dynamically via CDN or locally). - A teaser preview video and reference JSON cases. --- gnm/shape/demos/.gitignore | 2 + gnm/shape/demos/web/GNMControls.js | 751 ++++++++++++++++++ gnm/shape/demos/web/GNMModel.js | 551 +++++++++++++ gnm/shape/demos/web/GNMScene.js | 708 +++++++++++++++++ gnm/shape/demos/web/GNMSpatialUI.js | 488 ++++++++++++ gnm/shape/demos/web/README.md | 36 + gnm/shape/demos/web/SemanticSampler.js | 181 +++++ gnm/shape/demos/web/demo.css | 236 ++++++ gnm/shape/demos/web/gnm.css | 341 ++++++++ gnm/shape/demos/web/index.html | 55 ++ gnm/shape/demos/web/main.js | 85 ++ gnm/shape/demos/web/teaser/teaser.webm | Bin 0 -> 314094 bytes gnm/shape/demos/web/tools/export_gnm_web.py | 338 ++++++++ gnm/shape/demos/web/tools/reference_case.json | 74 ++ 14 files changed, 3846 insertions(+) create mode 100644 gnm/shape/demos/.gitignore create mode 100644 gnm/shape/demos/web/GNMControls.js create mode 100644 gnm/shape/demos/web/GNMModel.js create mode 100644 gnm/shape/demos/web/GNMScene.js create mode 100644 gnm/shape/demos/web/GNMSpatialUI.js create mode 100644 gnm/shape/demos/web/README.md create mode 100644 gnm/shape/demos/web/SemanticSampler.js create mode 100644 gnm/shape/demos/web/demo.css create mode 100644 gnm/shape/demos/web/gnm.css create mode 100644 gnm/shape/demos/web/index.html create mode 100644 gnm/shape/demos/web/main.js create mode 100644 gnm/shape/demos/web/teaser/teaser.webm create mode 100644 gnm/shape/demos/web/tools/export_gnm_web.py create mode 100644 gnm/shape/demos/web/tools/reference_case.json diff --git a/gnm/shape/demos/.gitignore b/gnm/shape/demos/.gitignore new file mode 100644 index 00000000..9c7c54c2 --- /dev/null +++ b/gnm/shape/demos/.gitignore @@ -0,0 +1,2 @@ +*.bin +*.mp4 diff --git a/gnm/shape/demos/web/GNMControls.js b/gnm/shape/demos/web/GNMControls.js new file mode 100644 index 00000000..2c648d49 --- /dev/null +++ b/gnm/shape/demos/web/GNMControls.js @@ -0,0 +1,751 @@ +/** + * GNMControls — DOM control panel for the GNM head demo. + * + * Provides the full parameter surface of the model: semantic sampling + * (gender/ethnicity identities, 20 expression classes), grouped PCA sliders + * for all 253 identity + 383 expression components, joint pose, animation + * drivers, and view options. Styling lives in gnm.css. + */ + +const MATERIAL_MODES = [ + ['studio', 'Studio'], + ['clay', 'Clay'], + ['normals', 'Normals'], + ['regions', 'Regions'], +]; + +const INITIAL_SLIDERS_PER_GROUP = 10; +const PARAM_RANGE = 3; + +function prettify(name) { + return name + .replace(/_region$/, '') + .replace(/_/g, ' ') + .replace(/^./, (c) => c.toUpperCase()); +} + +/** Splits ordered PCA names like head_000… into contiguous groups. */ +function groupParams(names) { + const groups = []; + let current = null; + names.forEach((name, index) => { + const key = name.replace(/_?\d+$/, '').replace(/_mean$/, ''); + if (!current || current.key !== key) { + current = {key, title: prettify(key), start: index, names: []}; + groups.push(current); + } + current.names.push(name); + }); + return groups; +} + +function gaussian() { + let u = 0; + while (u === 0) u = Math.random(); + return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * Math.random()); +} + +export class GNMControls { + constructor(model, samplers, scene) { + this.model = model; + this.samplers = samplers; + this.scene = scene; + this._paramInputs = new Map(); // 'identity:12' -> {input, output} + this._poseInputs = []; + scene.onModelChanged = () => this.syncParams(); + scene.onStatus = (text) => this.setStatus(text); + } + + attach() { + const meta = this.model.meta; + this.root = document.createElement('div'); + this.root.id = 'gnm-panel'; + // demo.css styles bare
as a fixed, full-width page banner, so the + // panel chrome uses scoped divs instead of semantic header/footer tags. + this.root.innerHTML = ` +
+
+

GNM Head Explorer

+

Generative aNthropometric Model v${meta.gnmVersion}

+
+ +
+
+ +
+ `; + document.body.appendChild(this.root); + + this.statusElement = this.root.querySelector('#gnm-status'); + this.statsElement = this.root.querySelector('#gnm-stats'); + this.tabsElement = this.root.querySelector('#gnm-tabs'); + this.pagesElement = this.root.querySelector('#gnm-pages'); + this.root.querySelector('#gnm-collapse').addEventListener('click', () => { + this.root.classList.toggle('collapsed'); + this.root.querySelector('#gnm-collapse').textContent = + this.root.classList.contains('collapsed') ? '+' : '–'; + }); + + this._buildTabs([ + ['Sample', () => this._buildSampleTab()], + ['Identity', () => this._buildParamTab('identity')], + ['Expression', () => this._buildParamTab('expression')], + ['Pose', () => this._buildPoseTab()], + ['Animate', () => this._buildAnimateTab()], + ['View', () => this._buildViewTab()], + ]); + this._bindKeyboard(); + this._startStatsLoop(); + } + + // ------------------------------------------------------------------ tabs -- + + _buildTabs(tabs) { + this._pages = []; + tabs.forEach(([label, build], index) => { + const button = document.createElement('button'); + button.textContent = label; + button.addEventListener('click', () => this._selectTab(index)); + this.tabsElement.appendChild(button); + const page = document.createElement('div'); + page.className = 'gnm-page'; + this.pagesElement.appendChild(page); + const entry = {button, page, built: false}; + entry.buildInto = () => { + if (!entry.built) { + entry.built = true; + page.appendChild(build.call(this)); + } + }; + this._pages.push(entry); + }); + this._selectTab(0); + } + + _selectTab(index) { + this._pages.forEach((entry, i) => { + const active = i === index; + entry.button.classList.toggle('active', active); + entry.page.classList.toggle('active', active); + if (active) entry.buildInto(); + }); + this.syncParams(); + } + + _section(parent, title) { + const section = document.createElement('section'); + if (title) { + const heading = document.createElement('h2'); + heading.textContent = title; + section.appendChild(heading); + } + parent.appendChild(section); + return section; + } + + _button(parent, label, onClick, className = '') { + const button = document.createElement('button'); + button.className = `gnm-btn ${className}`; + button.textContent = label; + button.addEventListener('click', onClick); + parent.appendChild(button); + return button; + } + + _toggle(parent, label, initial, onChange) { + const row = document.createElement('label'); + row.className = 'gnm-toggle'; + const input = document.createElement('input'); + input.type = 'checkbox'; + input.checked = initial; + input.addEventListener('change', () => onChange(input.checked)); + row.appendChild(input); + row.appendChild(document.createTextNode(label)); + parent.appendChild(row); + return input; + } + + _slider(parent, label, min, max, step, value, onInput, onReset) { + const row = document.createElement('div'); + row.className = 'gnm-slider'; + const name = document.createElement('span'); + name.textContent = label; + const input = document.createElement('input'); + input.type = 'range'; + input.min = min; + input.max = max; + input.step = step; + input.value = value; + const output = document.createElement('output'); + output.textContent = (+value).toFixed(2); + input.addEventListener('input', () => { + output.textContent = (+input.value).toFixed(2); + onInput(+input.value); + }); + if (onReset) { + row.title = 'Double-click to reset'; + row.addEventListener('dblclick', () => { + input.value = onReset(); + output.textContent = (+input.value).toFixed(2); + }); + } + row.append(name, input, output); + parent.appendChild(row); + return {row, input, output}; + } + + // ---------------------------------------------------------------- sample -- + + _buildSampleTab() { + const fragment = document.createDocumentFragment(); + const identity = this._section(fragment, 'Semantic identity'); + identity.insertAdjacentHTML( + 'beforeend', + `
+ + +
` + ); + this._sigma = 0.9; + // Gender and ethnicity apply live (like the slider tabs); changing either + // re-rolls a new face of that demographic. + identity + .querySelector('#gnm-gender') + .addEventListener('change', () => this._sampleSemanticIdentity(true)); + identity + .querySelector('#gnm-ethnicity') + .addEventListener('change', () => this._sampleSemanticIdentity(true)); + + // The Variation slider is live too: it reuses the current face's random + // seed, so dragging exaggerates the same identity instead of re-rolling. + const sigmaRow = this._slider( + identity, + 'Variation', + 0, + 1.5, + 0.05, + 0.9, + (v) => { + this._sigma = v; + this._sampleSemanticIdentity(false, false); + } + ); + sigmaRow.row.classList.add('wide'); + const identityButtons = document.createElement('div'); + identityButtons.className = 'gnm-btn-row'; + this._button(identityButtons, 'New face', () => + this._sampleSemanticIdentity(true) + ); + this._button(identityButtons, 'Random mix', () => { + this.scene.sampleRandomIdentity(this._sigma); + this.setStatus('sampled a random identity mix'); + }); + this._button(identityButtons, 'Template', () => { + this.model.resetIdentity(); + this.syncParams(); + this.setStatus('template (mean) face'); + }); + identity.appendChild(identityButtons); + + const expression = this._section(fragment, 'Semantic expression'); + const chips = document.createElement('div'); + chips.className = 'gnm-chips'; + this.samplers.expressionClasses.forEach((label, index) => { + const chip = document.createElement('button'); + chip.className = 'gnm-chip'; + chip.textContent = prettify(label); + chip.addEventListener('click', () => { + this.scene.sampleExpression(index, this._sigma); + this.setStatus(`expression: ${prettify(label).toLowerCase()}`); + }); + chips.appendChild(chip); + }); + expression.appendChild(chips); + const expressionButtons = document.createElement('div'); + expressionButtons.className = 'gnm-btn-row'; + this._button(expressionButtons, 'Random blend', () => { + this.scene.sampleRandomExpression(this._sigma); + this.setStatus('random expression blend'); + }); + this._button(expressionButtons, 'Neutral', () => { + this.model.resetExpression(); + this.syncParams(); + this.setStatus('neutral expression'); + }); + expression.appendChild(expressionButtons); + return fragment; + } + + /** + * Samples an identity from the current gender/ethnicity selection. + * + * @param {boolean} reroll - When true, draws a fresh random seed (a new + * face). When false, reuses the last seed so only `sigma` changes, letting + * the Variation slider morph the same identity smoothly. + * @param {boolean} [smooth=true] - Whether to blend toward the new shape. + */ + _sampleSemanticIdentity(reroll, smooth = true) { + if (reroll || this._identitySeed === undefined) { + this._identitySeed = (Math.random() * 0x100000000) >>> 0; + } + const gender = this.root.querySelector('#gnm-gender').value; + const ethnicity = this.root.querySelector('#gnm-ethnicity').value; + const genderWeights = + gender === 'blend' + ? [1, 1] + : this.samplers.genders.map((g) => (g === gender ? 1 : 0)); + const ethnicityWeights = + ethnicity === 'blend' + ? [1, 1, 1, 1] + : this.samplers.ethnicities.map((e) => (e === ethnicity ? 1 : 0)); + // Reseed so the same selection + seed is reproducible; the Variation + // slider then only changes the latent scale, not the face. + this.samplers.seed(this._identitySeed); + this.scene.sampleIdentity( + genderWeights, + ethnicityWeights, + this._sigma, + smooth + ); + this.setStatus( + `sampled ${gender === 'blend' ? 'mixed' : gender} · ` + + `${ethnicity === 'blend' ? 'mixed' : prettify(ethnicity)}` + ); + } + + // ---------------------------------------------------------------- params -- + + _buildParamTab(kind) { + const fragment = document.createDocumentFragment(); + const names = + kind === 'identity' + ? this.model.meta.identityNames + : this.model.meta.expressionNames; + for (const group of groupParams(names)) { + const section = this._section( + fragment, + `${group.title} (${group.names.length})` + ); + const buttons = document.createElement('div'); + buttons.className = 'gnm-btn-row'; + this._button(buttons, 'Randomize', () => { + for (let i = 0; i < group.names.length; ++i) { + this._setParam(kind, group.start + i, gaussian()); + } + this.syncParams(); + }); + this._button(buttons, 'Zero', () => { + for (let i = 0; i < group.names.length; ++i) { + this._setParam(kind, group.start + i, 0); + } + this.syncParams(); + }); + section.appendChild(buttons); + const list = document.createElement('div'); + section.appendChild(list); + const buildRows = (from, to) => { + for (let i = from; i < to; ++i) { + const index = group.start + i; + const suffix = group.names[i].match(/(\d+|mean)$/)?.[1] ?? `${i}`; + const {input, output} = this._slider( + list, + suffix, + -PARAM_RANGE, + PARAM_RANGE, + 0.01, + this._getParam(kind, index), + (value) => { + this._setParam(kind, index, value); + this.scene.setPulse(kind, index); + }, + () => { + this._setParam(kind, index, 0); + return 0; + } + ); + this._paramInputs.set(`${kind}:${index}`, {input, output}); + } + }; + const initial = Math.min(INITIAL_SLIDERS_PER_GROUP, group.names.length); + buildRows(0, initial); + if (group.names.length > initial) { + const more = this._button( + section, + `Show all ${group.names.length}`, + () => { + buildRows(initial, group.names.length); + more.remove(); + this.syncParams(); + }, + 'ghost' + ); + } + } + return fragment; + } + + _getParam(kind, index) { + return kind === 'identity' + ? this.model.identity[index] + : this.model.expression[index]; + } + + _setParam(kind, index, value) { + if (kind === 'identity') this.model.setIdentityParam(index, value); + else this.model.setExpressionParam(index, value); + } + + // ------------------------------------------------------------------ pose -- + + _buildPoseTab() { + const fragment = document.createDocumentFragment(); + const tracking = this._section(fragment, 'Tracking'); + this._eyesToggle = this._toggle( + tracking, + 'Eyes follow camera', + this.scene.eyesFollowCamera, + (checked) => { + this.scene.eyesFollowCamera = checked; + this._updatePoseDisabled(); + } + ); + this._headToggle = this._toggle( + tracking, + 'Head follows camera', + this.scene.headFollowsCamera, + (checked) => { + this.scene.headFollowsCamera = checked; + this._updatePoseDisabled(); + } + ); + + const jointSpecs = [ + [0, 'Neck', 0.5], + [1, 'Head', 0.6], + [2, 'Left eye', 0.6], + [3, 'Right eye', 0.6], + ]; + const axes = ['pitch (x)', 'yaw (y)', 'roll (z)']; + for (const [joint, label, range] of jointSpecs) { + const section = this._section(fragment, label); + for (let axis = 0; axis < 3; ++axis) { + if (joint >= 2 && axis === 2) continue; // eye roll is not meaningful + const {input, output} = this._slider( + section, + axes[axis], + -range, + range, + 0.01, + this.model.rotations[joint * 3 + axis], + (value) => { + const o = joint * 3; + const r = this.model.rotations; + const next = [r[o], r[o + 1], r[o + 2]]; + next[axis] = value; + this.model.setJointRotation(joint, ...next); + this.scene._smoothedRotations.set(next, o); + } + ); + this._poseInputs.push({joint, axis, input, output}); + } + } + const translation = this._section(fragment, 'Translation (m)'); + ['x', 'y', 'z'].forEach((axis, index) => { + const {input, output} = this._slider( + translation, + axis, + -0.25, + 0.25, + 0.005, + this.model.translation[index], + (value) => { + const t = this.model.translation; + const next = [t[0], t[1], t[2]]; + next[index] = value; + this.model.setTranslation(...next); + } + ); + this._poseInputs.push({translationAxis: index, input, output}); + }); + const buttons = document.createElement('div'); + buttons.className = 'gnm-btn-row'; + this._button(buttons, 'Reset pose', () => { + this.model.resetPose(); + this.scene._smoothedRotations.fill(0); + this.syncParams(); + }); + fragment.appendChild(buttons); + this._updatePoseDisabled(); + return fragment; + } + + _updatePoseDisabled() { + for (const entry of this._poseInputs) { + if (entry.translationAxis !== undefined) continue; + const trackedEyes = this.scene.eyesFollowCamera && entry.joint >= 2; + const trackedHead = this.scene.headFollowsCamera && entry.joint === 1; + const sway = this.scene.idleSway && entry.joint === 0; + entry.input.disabled = trackedEyes || trackedHead || sway; + } + } + + // --------------------------------------------------------------- animate -- + + _buildAnimateTab() { + const fragment = document.createDocumentFragment(); + const drivers = this._section(fragment, 'Drivers'); + this._animToggles = { + tour: this._toggle( + drivers, + 'Expression tour (20 classes)', + false, + (checked) => this.scene.setExpressionTour(checked) + ), + morph: this._toggle( + drivers, + 'Identity morph (random walk)', + false, + (checked) => this.scene.setIdentityMorph(checked) + ), + pulse: this._toggle( + drivers, + 'Pulse last-touched slider ±2.3', + false, + (checked) => this.scene.setPulseEnabled(checked) + ), + sway: this._toggle(drivers, 'Idle neck sway', false, (checked) => { + this.scene.idleSway = checked; + this._updatePoseDisabled(); + }), + turntable: this._toggle(drivers, 'Turntable', false, (checked) => { + this.scene.turntable = checked; + }), + }; + const speed = this._section(fragment, 'Speed'); + this._slider(speed, 'Rate', 0.25, 2.5, 0.05, 1, (value) => { + this.scene.animationSpeed = value; + }); + const hint = document.createElement('p'); + hint.className = 'gnm-hint'; + hint.textContent = + 'Tip: touch any Identity/Expression slider first, then enable Pulse ' + + 'to see what that PCA component does.'; + fragment.appendChild(hint); + return fragment; + } + + // ------------------------------------------------------------------ view -- + + _buildViewTab() { + const fragment = document.createDocumentFragment(); + const material = this._section(fragment, 'Material'); + const modes = document.createElement('div'); + modes.className = 'gnm-btn-row'; + this._materialButtons = MATERIAL_MODES.map(([mode, label]) => { + const button = this._button( + modes, + label, + () => this.setMaterialMode(mode), + mode === this.scene.materialMode ? 'active' : '' + ); + button.dataset.mode = mode; + return button; + }); + material.appendChild(modes); + + const overlays = this._section(fragment, 'Overlays'); + this._wireToggle = this._toggle(overlays, 'Quad wireframe', false, (c) => + this.scene.setWireframeVisible(c) + ); + this._landmarkToggle = this._toggle( + overlays, + '68 facial landmarks', + false, + (c) => this.scene.setLandmarksVisible(c) + ); + this._skeletonToggle = this._toggle( + overlays, + 'Skeleton (neck → head → eyes)', + false, + (c) => this.scene.setSkeletonVisible(c) + ); + + const components = this._section(fragment, 'Mesh components'); + this._componentToggles = this.model.meta.componentNames.map((name, index) => + this._toggle(components, prettify(name), true, (checked) => + this.scene.setComponentVisible(index, checked) + ) + ); + + const exportSection = this._section(fragment, 'Export'); + const buttons = document.createElement('div'); + buttons.className = 'gnm-btn-row'; + this._button(buttons, 'Download OBJ', () => { + const blob = new Blob([this.scene.exportOBJ()], {type: 'text/plain'}); + const link = document.createElement('a'); + link.href = URL.createObjectURL(blob); + link.download = 'gnm_head.obj'; + link.click(); + URL.revokeObjectURL(link.href); + this.setStatus('exported gnm_head.obj'); + }); + exportSection.appendChild(buttons); + return fragment; + } + + setMaterialMode(mode) { + this.scene.setMaterialMode(mode); + this._materialButtons?.forEach((button) => + button.classList.toggle('active', button.dataset.mode === mode) + ); + } + + // ------------------------------------------------------------------ sync -- + + /** Reflects model parameter values into any built slider rows. */ + syncParams() { + for (const [key, {input, output}] of this._paramInputs) { + const [kind, index] = key.split(':'); + const value = this._getParam(kind, +index); + input.value = value; + output.textContent = value.toFixed(2); + } + for (const entry of this._poseInputs) { + const value = + entry.translationAxis !== undefined + ? this.model.translation[entry.translationAxis] + : this.model.rotations[entry.joint * 3 + entry.axis]; + entry.input.value = value; + entry.output.textContent = value.toFixed(2); + } + } + + setStatus(text) { + if (this.statusElement) this.statusElement.textContent = text; + } + + _startStatsLoop() { + let frames = 0; + let last = performance.now(); + const tick = () => { + frames++; + const now = performance.now(); + if (now - last >= 500) { + const fps = (frames * 1000) / (now - last); + this.statsElement.textContent = + `${fps.toFixed(0)} fps · mesh update ` + + `${this.scene.lastComputeMs.toFixed(1)} ms`; + frames = 0; + last = now; + // Keep sliders live while animation drivers run. + if ( + this.scene.tour || + this.scene.morph || + this.scene.pulseEnabled || + this.scene._idFade || + this.scene._exprFade + ) { + this.syncParams(); + } + // Reflect state changed from the spatial (XR) panels. + this._syncViewFromScene(); + } + requestAnimationFrame(tick); + }; + requestAnimationFrame(tick); + } + + /** Mirrors scene state into checkboxes/buttons built by this panel. */ + _syncViewFromScene() { + const scene = this.scene; + if (this._wireToggle) this._wireToggle.checked = scene.wireframe.visible; + if (this._landmarkToggle) { + this._landmarkToggle.checked = scene.landmarkMesh.visible; + } + if (this._skeletonToggle) { + this._skeletonToggle.checked = scene.skeletonGroup.visible; + } + this._componentToggles?.forEach((toggle, index) => { + toggle.checked = scene.visibleComponents[index]; + }); + this._materialButtons?.forEach((button) => + button.classList.toggle( + 'active', + button.dataset.mode === scene.materialMode + ) + ); + if (this._animToggles) { + this._animToggles.tour.checked = !!scene.tour; + this._animToggles.morph.checked = !!scene.morph; + this._animToggles.pulse.checked = scene.pulseEnabled; + this._animToggles.sway.checked = scene.idleSway; + this._animToggles.turntable.checked = scene.turntable; + } + if (this._eyesToggle && this._headToggle) { + const changed = + this._eyesToggle.checked !== scene.eyesFollowCamera || + this._headToggle.checked !== scene.headFollowsCamera; + this._eyesToggle.checked = scene.eyesFollowCamera; + this._headToggle.checked = scene.headFollowsCamera; + if (changed) this._updatePoseDisabled(); + } + } + + _bindKeyboard() { + document.addEventListener('keydown', (event) => { + const tag = document.activeElement?.tagName; + if (tag === 'INPUT' || tag === 'SELECT' || tag === 'TEXTAREA') return; + switch (event.key.toLowerCase()) { + case 'r': + this.scene.sampleRandomIdentity(this._sigma ?? 0.9); + this.setStatus('random identity (R)'); + break; + case 'e': + this.scene.sampleRandomExpression(this._sigma ?? 0.9); + this.setStatus('random expression (E)'); + break; + case 'n': + this.scene.resetToNeutral(); + this.syncParams(); + this.setStatus('neutral (N)'); + break; + case 't': + this.scene.setExpressionTour(!this.scene.tour); + break; + case 'w': + if (this._wireToggle) { + this._wireToggle.checked = !this._wireToggle.checked; + } + this.scene.setWireframeVisible( + this._wireToggle?.checked ?? !this.scene.wireframe.visible + ); + break; + case 'g': + this.scene.turntable = !this.scene.turntable; + break; + default: + return; + } + }); + } +} diff --git a/gnm/shape/demos/web/GNMModel.js b/gnm/shape/demos/web/GNMModel.js new file mode 100644 index 00000000..9034f1e8 --- /dev/null +++ b/gnm/shape/demos/web/GNMModel.js @@ -0,0 +1,551 @@ +/** + * GNMModel.js — JavaScript port of the GNM (Generative aNthropometric Model) + * head forward function, mirroring gnm/shape/gnm_common.py: + * + * bind = template + identity_basis^T id + expression_basis^T expr + * joints = template_joints + joint_identity_basis^T id + * world = LinearBlendSkinning(bind + pose_correctives, FK(joints, rotations)) + * + * The model data is read from a 'GNMW' container produced by + * tools/export_gnm_web.py. The large PCA bases are int8-quantized with one + * float32 scale per component; coefficients fold the scale in at accumulation + * time so dequantization is free. + * + * This file is dependency-free (typed arrays only) so it runs in Node for + * verification as well as in the browser. + */ + +const MAGIC = 0x474e4d57; // 'GNMW' +const EPSILON = 1e-8; +// Full re-accumulation after this many incremental slider updates bounds +// float32 drift. +const MAX_INCREMENTAL_UPDATES = 2000; + +const DTYPE_CTORS = { + float32: Float32Array, + int8: Int8Array, + uint8: Uint8Array, + uint16: Uint16Array, + int32: Int32Array, +}; + +/** Parses a GNMW container buffer into {meta, sections}. */ +export function parseContainer(buffer) { + const view = new DataView(buffer); + const magic = + (view.getUint8(0) << 24) | + (view.getUint8(1) << 16) | + (view.getUint8(2) << 8) | + view.getUint8(3); + if (magic !== MAGIC) { + throw new Error('Not a GNMW container.'); + } + const version = view.getUint32(4, true); + if (version !== 1) { + throw new Error(`Unsupported GNMW version ${version}.`); + } + const headerLength = view.getUint32(8, true); + const headerText = new TextDecoder().decode( + new Uint8Array(buffer, 12, headerLength) + ); + const header = JSON.parse(headerText); + const base = 12 + headerLength; + const sections = {}; + for (const section of header.sections) { + const Ctor = DTYPE_CTORS[section.dtype]; + sections[section.name] = new Ctor( + buffer, + base + section.offset, + section.byteLength / Ctor.BYTES_PER_ELEMENT + ); + } + return {meta: header.meta, sections}; +} + +/** Fetches a URL into an ArrayBuffer, reporting streaming progress. */ +export async function fetchWithProgress(url, onProgress) { + const response = await fetch(url); + if (!response.ok) { + throw new Error(`Failed to fetch ${url}: ${response.status}`); + } + const total = Number(response.headers.get('Content-Length')) || 0; + if (!response.body || !total) { + return await response.arrayBuffer(); + } + const reader = response.body.getReader(); + const data = new Uint8Array(total); + let received = 0; + for (;;) { + const {done, value} = await reader.read(); + if (done) break; + if (received + value.length > total) { + // Content-Length lied (e.g. proxy); fall back to chunk list. + const chunks = [data.subarray(0, received), value]; + for (;;) { + const next = await reader.read(); + if (next.done) break; + chunks.push(next.value); + } + const length = chunks.reduce((n, c) => n + c.length, 0); + const out = new Uint8Array(length); + let offset = 0; + for (const chunk of chunks) { + out.set(chunk, offset); + offset += chunk.length; + } + return out.buffer; + } + data.set(value, received); + received += value.length; + if (onProgress) onProgress(received / total); + } + return data.buffer.byteLength === received + ? data.buffer + : data.slice(0, received).buffer; +} + +/** Rodrigues' formula matching gnm_common.axis_angle_to_rotation_matrix. */ +export function axisAngleToMatrix(x, y, z, out, offset = 0) { + const normSquared = x * x + y * y + z * z; + const angle = Math.sqrt(Math.max(normSquared, EPSILON)); + const ax = x / angle; + const ay = y / angle; + const az = z / angle; + const s = Math.sin(angle); + const c = Math.cos(angle); + const t = 1 - c; + out[offset + 0] = c + t * ax * ax; + out[offset + 1] = t * ax * ay - s * az; + out[offset + 2] = t * ax * az + s * ay; + out[offset + 3] = t * ax * ay + s * az; + out[offset + 4] = c + t * ay * ay; + out[offset + 5] = t * ay * az - s * ax; + out[offset + 6] = t * ax * az - s * ay; + out[offset + 7] = t * ay * az + s * ax; + out[offset + 8] = c + t * az * az; +} + +export class GNMHeadModel { + constructor(meta, sections) { + this.meta = meta; + this.numVertices = meta.numVertices; + this.numJoints = meta.numJoints; + this.identityDim = meta.identityDim; + this.expressionDim = meta.expressionDim; + + this.template = sections.template; + this.triangles = sections.triangles; + this.quads = sections.quads; + this.templateJoints = sections.template_joints; + this.jointParents = sections.joint_parents; + this.skinningWeights = sections.skinning_weights; + this.jointIdentityBasis = sections.joint_identity_basis; + this.identityBasis = sections.identity_basis; + this.identityScales = sections.identity_scales; + this.expressionBasis = sections.expression_basis; + this.expressionScales = sections.expression_scales; + this.componentId = sections.component_id; + this.materialId = sections.material_id; + this.regionId = sections.region_id; + this.landmarkIndices = sections.landmark_indices; + this.landmarkWeights = sections.landmark_weights; + + const v3 = this.numVertices * 3; + // Parameters. + this.identity = new Float32Array(this.identityDim); + this.expression = new Float32Array(this.expressionDim); + this.rotations = new Float32Array(this.numJoints * 3); + this.translation = new Float32Array(3); + + // Cached linear-basis sums (bind-pose displacements). + this._idSum = new Float32Array(v3); + this._exprSum = new Float32Array(v3); + this._incrementalUpdates = 0; + + // Blend states (null when inactive). + this._idBlend = null; + this._exprBlend = null; + + // Scratch buffers for the pose pipeline. + this._bind = new Float32Array(v3); + this._jointsBind = new Float32Array(this.numJoints * 3); + this._rotWorld = new Float32Array(this.numJoints * 9); + this._skinTrans = new Float32Array(this.numJoints * 3); + this.jointsWorld = new Float32Array(this.numJoints * 3); + + this.dirty = true; + } + + static async load(url, onProgress) { + const buffer = await fetchWithProgress(url, onProgress); + const {meta, sections} = parseContainer(buffer); + return new GNMHeadModel(meta, sections); + } + + // ---------------------------------------------------------------- params -- + + /** Adds `factor` times basis component `index` into `sum`. */ + _addComponent(sum, basis, index, factor) { + if (factor === 0) return; + const offset = index * sum.length; + for (let j = 0, n = sum.length; j < n; ++j) { + sum[j] += basis[offset + j] * factor; + } + } + + _accumulate(sum, basis, scales, coefficients) { + sum.fill(0); + for (let i = 0; i < coefficients.length; ++i) { + const c = coefficients[i]; + if (c !== 0) this._addComponent(sum, basis, i, c * scales[i]); + } + } + + _maybeReaccumulate() { + if (++this._incrementalUpdates < MAX_INCREMENTAL_UPDATES) return; + this._incrementalUpdates = 0; + this._accumulate( + this._idSum, + this.identityBasis, + this.identityScales, + this.identity + ); + this._accumulate( + this._exprSum, + this.expressionBasis, + this.expressionScales, + this.expression + ); + } + + setIdentityParam(index, value) { + const delta = value - this.identity[index]; + if (delta === 0) return; + this.identity[index] = value; + this._addComponent( + this._idSum, + this.identityBasis, + index, + delta * this.identityScales[index] + ); + this._maybeReaccumulate(); + this.dirty = true; + } + + setExpressionParam(index, value) { + const delta = value - this.expression[index]; + if (delta === 0) return; + this.expression[index] = value; + this._addComponent( + this._exprSum, + this.expressionBasis, + index, + delta * this.expressionScales[index] + ); + this._maybeReaccumulate(); + this.dirty = true; + } + + setIdentityVector(values) { + this.identity.set(values.subarray ? values : Float32Array.from(values)); + this._accumulate( + this._idSum, + this.identityBasis, + this.identityScales, + this.identity + ); + this._idBlend = null; + this.dirty = true; + } + + setExpressionVector(values) { + this.expression.set(values.subarray ? values : Float32Array.from(values)); + this._accumulate( + this._exprSum, + this.expressionBasis, + this.expressionScales, + this.expression + ); + this._exprBlend = null; + this.dirty = true; + } + + resetIdentity() { + this.setIdentityVector(new Float32Array(this.identityDim)); + } + + resetExpression() { + this.setExpressionVector(new Float32Array(this.expressionDim)); + } + + setJointRotation(jointIndex, x, y, z) { + const o = jointIndex * 3; + this.rotations[o] = x; + this.rotations[o + 1] = y; + this.rotations[o + 2] = z; + this.dirty = true; + } + + setTranslation(x, y, z) { + this.translation[0] = x; + this.translation[1] = y; + this.translation[2] = z; + this.dirty = true; + } + + resetPose() { + this.rotations.fill(0); + this.translation.fill(0); + this.dirty = true; + } + + // ---------------------------------------------------------------- blends -- + // Blending exploits linearity: sum(lerp(a, b, t)) == lerp(sumA, sumB, t), + // so a full-vector crossfade costs one lerp over V*3 floats per frame + // instead of a (dim × V × 3) re-accumulation. + + _beginBlend(kind, target, basis, scales, current, currentSum) { + const targetArray = Float32Array.from(target); + const sumB = new Float32Array(currentSum.length); + this._accumulate(sumB, basis, scales, targetArray); + this[kind] = { + coeffA: Float32Array.from(current), + coeffB: targetArray, + sumA: Float32Array.from(currentSum), + sumB, + }; + } + + beginIdentityBlend(target) { + this._beginBlend( + '_idBlend', + target, + this.identityBasis, + this.identityScales, + this.identity, + this._idSum + ); + } + + beginExpressionBlend(target) { + this._beginBlend( + '_exprBlend', + target, + this.expressionBasis, + this.expressionScales, + this.expression, + this._exprSum + ); + } + + _applyBlend(blend, coefficients, sum, t) { + const s = 1 - t; + const {coeffA, coeffB, sumA, sumB} = blend; + for (let i = 0; i < coefficients.length; ++i) { + coefficients[i] = coeffA[i] * s + coeffB[i] * t; + } + for (let j = 0, n = sum.length; j < n; ++j) { + sum[j] = sumA[j] * s + sumB[j] * t; + } + this.dirty = true; + } + + setIdentityBlend(t) { + if (this._idBlend) { + this._applyBlend(this._idBlend, this.identity, this._idSum, t); + } + } + + setExpressionBlend(t) { + if (this._exprBlend) { + this._applyBlend(this._exprBlend, this.expression, this._exprSum, t); + } + } + + // --------------------------------------------------------------- forward -- + + _computeJointsBind() { + const out = this._jointsBind; + out.set(this.templateJoints); + const basis = this.jointIdentityBasis; + const stride = this.numJoints * 3; + for (let i = 0; i < this.identityDim; ++i) { + const c = this.identity[i]; + if (c === 0) continue; + const offset = i * stride; + for (let k = 0; k < stride; ++k) { + out[k] += basis[offset + k] * c; + } + } + } + + /** + * Forward kinematics matching gnm_common.joint_transforms_world, followed + * by the skinning-transform construction from linear_blend_skinning: + * per joint, rotation R_world and translation t_world − R_world·j_bind. + */ + _computeJointTransforms() { + const J = this.numJoints; + const joints = this._jointsBind; + const parents = this.jointParents; + const rotWorld = this._rotWorld; + const localRot = new Float32Array(9); + const worldTrans = this.jointsWorld; + + for (let j = 0; j < J; ++j) { + axisAngleToMatrix( + this.rotations[j * 3], + this.rotations[j * 3 + 1], + this.rotations[j * 3 + 2], + localRot, + 0 + ); + let lx, ly, lz; + if (j === 0) { + lx = joints[0] + this.translation[0]; + ly = joints[1] + this.translation[1]; + lz = joints[2] + this.translation[2]; + rotWorld.set(localRot, 0); + worldTrans[0] = lx; + worldTrans[1] = ly; + worldTrans[2] = lz; + } else { + const p = parents[j]; + lx = joints[j * 3] - joints[p * 3]; + ly = joints[j * 3 + 1] - joints[p * 3 + 1]; + lz = joints[j * 3 + 2] - joints[p * 3 + 2]; + const po = p * 9; + const jo = j * 9; + // rotWorld[j] = rotWorld[p] * localRot + for (let r = 0; r < 3; ++r) { + for (let c = 0; c < 3; ++c) { + rotWorld[jo + r * 3 + c] = + rotWorld[po + r * 3] * localRot[c] + + rotWorld[po + r * 3 + 1] * localRot[3 + c] + + rotWorld[po + r * 3 + 2] * localRot[6 + c]; + } + } + // worldTrans[j] = rotWorld[p] * local + worldTrans[p] + worldTrans[j * 3] = + rotWorld[po] * lx + + rotWorld[po + 1] * ly + + rotWorld[po + 2] * lz + + worldTrans[p * 3]; + worldTrans[j * 3 + 1] = + rotWorld[po + 3] * lx + + rotWorld[po + 4] * ly + + rotWorld[po + 5] * lz + + worldTrans[p * 3 + 1]; + worldTrans[j * 3 + 2] = + rotWorld[po + 6] * lx + + rotWorld[po + 7] * ly + + rotWorld[po + 8] * lz + + worldTrans[p * 3 + 2]; + } + } + + // Skinning translation: t_world − R_world · j_bind. + const skinTrans = this._skinTrans; + for (let j = 0; j < J; ++j) { + const jo = j * 9; + const bx = joints[j * 3]; + const by = joints[j * 3 + 1]; + const bz = joints[j * 3 + 2]; + skinTrans[j * 3] = + worldTrans[j * 3] - + (rotWorld[jo] * bx + rotWorld[jo + 1] * by + rotWorld[jo + 2] * bz); + skinTrans[j * 3 + 1] = + worldTrans[j * 3 + 1] - + (rotWorld[jo + 3] * bx + rotWorld[jo + 4] * by + rotWorld[jo + 5] * bz); + skinTrans[j * 3 + 2] = + worldTrans[j * 3 + 2] - + (rotWorld[jo + 6] * bx + rotWorld[jo + 7] * by + rotWorld[jo + 8] * bz); + } + } + + /** + * Runs the full forward pass and writes world-space vertices into `out` + * (Float32Array of length numVertices*3). Also refreshes `jointsWorld`. + */ + computeVertices(out) { + const V = this.numVertices; + const bind = this._bind; + const template = this.template; + const idSum = this._idSum; + const exprSum = this._exprSum; + for (let j = 0, n = V * 3; j < n; ++j) { + bind[j] = template[j] + idSum[j] + exprSum[j]; + } + + this._computeJointsBind(); + this._computeJointTransforms(); + + const weights = this.skinningWeights; + const rotWorld = this._rotWorld; + const skinTrans = this._skinTrans; + const J = this.numJoints; + for (let v = 0; v < V; ++v) { + const px = bind[v * 3]; + const py = bind[v * 3 + 1]; + const pz = bind[v * 3 + 2]; + let ox = 0; + let oy = 0; + let oz = 0; + for (let j = 0; j < J; ++j) { + const w = weights[j * V + v]; + if (w === 0) continue; + const jo = j * 9; + ox += + w * + (rotWorld[jo] * px + + rotWorld[jo + 1] * py + + rotWorld[jo + 2] * pz + + skinTrans[j * 3]); + oy += + w * + (rotWorld[jo + 3] * px + + rotWorld[jo + 4] * py + + rotWorld[jo + 5] * pz + + skinTrans[j * 3 + 1]); + oz += + w * + (rotWorld[jo + 6] * px + + rotWorld[jo + 7] * py + + rotWorld[jo + 8] * pz + + skinTrans[j * 3 + 2]); + } + out[v * 3] = ox; + out[v * 3 + 1] = oy; + out[v * 3 + 2] = oz; + } + this.dirty = false; + } + + /** Barycentric landmark extraction (68 × 3 vertices/weights). */ + computeLandmarks(vertices, out) { + const indices = this.landmarkIndices; + const weights = this.landmarkWeights; + const count = indices.length / 3; + for (let l = 0; l < count; ++l) { + let x = 0; + let y = 0; + let z = 0; + for (let k = 0; k < 3; ++k) { + const vi = indices[l * 3 + k] * 3; + const w = weights[l * 3 + k]; + x += vertices[vi] * w; + y += vertices[vi + 1] * w; + z += vertices[vi + 2] * w; + } + out[l * 3] = x; + out[l * 3 + 1] = y; + out[l * 3 + 2] = z; + } + return count; + } + + /** World-space rotation frame (row-major 3x3) of a joint after FK. */ + getJointWorldRotation(jointIndex) { + return this._rotWorld.subarray(jointIndex * 9, jointIndex * 9 + 9); + } +} diff --git a/gnm/shape/demos/web/GNMScene.js b/gnm/shape/demos/web/GNMScene.js new file mode 100644 index 00000000..de734997 --- /dev/null +++ b/gnm/shape/demos/web/GNMScene.js @@ -0,0 +1,708 @@ +import * as THREE from 'three'; +import {raycastSortFunction} from 'uiblocks'; +import * as xb from 'xrblocks'; + +import {GNMSpatialUI} from './GNMSpatialUI.js'; + +/** + * GNMScene — renders the GNM parametric head and animates it. + * + * Owns the Three.js mesh (positions streamed from GNMHeadModel), the material + * modes, wireframe / landmark / skeleton overlays, per-component visibility, + * gaze tracking, and the animation drivers (expression tour, identity morph, + * component pulse, idle sway, turntable). + */ + +const WORLD_HEAD_Y = 1.35; // where to place the head center in world space +const WORLD_HEAD_Z = -0.62; + +// Per-vertex material palette (indexed by material_id from the exporter: +// skin, teeth, gums, tongue, scleras, irises, pupils). +const MATERIAL_COLORS = [ + '#d9a183', + '#f2eddc', + '#c4726b', + '#b44f48', + '#f4f2ec', + '#5d4630', + '#100e0d', +]; + +const JOINT_LABELS = ['neck', 'head', 'left eye', 'right eye']; + +const TOUR_FADE_SECONDS = 0.9; +const TOUR_HOLD_SECONDS = 1.3; +const MORPH_FADE_SECONDS = 1.6; +const MORPH_HOLD_SECONDS = 0.9; + +export class GNMScene extends xb.Script { + constructor(model, samplers) { + super(); + this.model = model; + this.samplers = samplers; + + // View state. + this.materialMode = 'studio'; + this.visibleComponents = new Array(model.meta.componentNames.length).fill( + true + ); + + // Tracking / animation state. + this.eyesFollowCamera = true; + this.headFollowsCamera = false; + this.idleSway = false; + this.turntable = false; + this.animationSpeed = 1; + this.tour = null; // {phase, t, classIndex} + this.morph = null; // {phase, t} + this.pulse = null; // {kind: 'identity'|'expression', index, base} + this.pulseEnabled = false; + this._pulseTime = 0; + this._time = 0; + this._smoothedRotations = new Float32Array(model.numJoints * 3); + + this.lastComputeMs = 0; + /** Called when identity/expression change from inside the scene. */ + this.onModelChanged = null; + /** Called with a status string (e.g. current tour expression). */ + this.onStatus = null; + + // uiblocks UICore must be constructed with the owning Script. + this.spatialUI = new GNMSpatialUI(this); + } + + init() { + const model = this.model; + + // The head + overlays live under `anchor`, which is wrapped in a + // ModelViewer so the user can grab the pedestal to move it and grab the + // head to rotate it. The ModelViewer is positioned in _setupModelViewer() + // once the mesh (and thus its bounding box) exists. + this.anchor = new THREE.Group(); + this.modelViewer = new xb.ModelViewer({}); + this.modelViewer.add(this.anchor); + this.add(this.modelViewer); + + // ---- Geometry -------------------------------------------------------- + const geometry = new THREE.BufferGeometry(); + this.positionAttribute = new THREE.BufferAttribute( + new Float32Array(model.numVertices * 3), + 3 + ); + this.positionAttribute.setUsage(THREE.DynamicDrawUsage); + geometry.setAttribute('position', this.positionAttribute); + geometry.setAttribute( + 'color', + new THREE.BufferAttribute(this._buildMaterialColors(), 3) + ); + this._regionColors = null; // built lazily for the regions mode + this.fullIndex = new THREE.BufferAttribute(model.triangles, 1); + geometry.setIndex(this.fullIndex); + this.geometry = geometry; + + this.materials = { + studio: new THREE.MeshStandardMaterial({ + vertexColors: true, + roughness: 0.58, + metalness: 0.02, + polygonOffset: true, + polygonOffsetFactor: 1, + polygonOffsetUnits: 1, + }), + clay: new THREE.MeshStandardMaterial({ + color: 0xb9b2aa, + roughness: 0.82, + metalness: 0.0, + polygonOffset: true, + polygonOffsetFactor: 1, + polygonOffsetUnits: 1, + }), + normals: new THREE.MeshNormalMaterial({ + polygonOffset: true, + polygonOffsetFactor: 1, + polygonOffsetUnits: 1, + }), + regions: new THREE.MeshStandardMaterial({ + vertexColors: true, + roughness: 0.75, + metalness: 0.0, + polygonOffset: true, + polygonOffsetFactor: 1, + polygonOffsetUnits: 1, + }), + }; + this.mesh = new THREE.Mesh(geometry, this.materials.studio); + this.mesh.frustumCulled = false; + this.mesh.name = 'GNM Head'; + this.anchor.add(this.mesh); + + // ---- Wireframe (quad edges, sharing the position attribute) ---------- + const wireGeometry = new THREE.BufferGeometry(); + wireGeometry.setAttribute('position', this.positionAttribute); + wireGeometry.setIndex( + new THREE.BufferAttribute(this._buildQuadEdgeIndex(), 1) + ); + this.wireframe = new THREE.LineSegments( + wireGeometry, + new THREE.LineBasicMaterial({ + color: 0x30343c, + transparent: true, + opacity: 0.45, + }) + ); + this.wireframe.frustumCulled = false; + this.wireframe.visible = false; + // Overlay: never a reticle target — lines return no surface normal, which + // would otherwise trap the reticle at the origin (it also occludes the head + // because THREE raycasts objects even while hidden). + this.wireframe.ignoreReticleRaycast = true; + this.anchor.add(this.wireframe); + + // ---- Landmarks ------------------------------------------------------- + const landmarkCount = model.landmarkIndices.length / 3; + this.landmarkPoints = new Float32Array(landmarkCount * 3); + this.landmarkMesh = new THREE.InstancedMesh( + new THREE.SphereGeometry(0.0021, 10, 8), + new THREE.MeshBasicMaterial({color: 0x2fe3a8}), + landmarkCount + ); + this.landmarkMesh.frustumCulled = false; + this.landmarkMesh.visible = false; + this.landmarkMesh.ignoreReticleRaycast = true; // overlay, not a target + this.anchor.add(this.landmarkMesh); + + // ---- Skeleton -------------------------------------------------------- + this.jointMesh = new THREE.InstancedMesh( + new THREE.SphereGeometry(0.0055, 12, 10), + new THREE.MeshBasicMaterial({color: 0xffb037, depthTest: false}), + model.numJoints + ); + this.jointMesh.renderOrder = 10; + this.jointMesh.frustumCulled = false; + const bonePositions = new Float32Array((model.numJoints - 1) * 2 * 3); + this.boneAttribute = new THREE.BufferAttribute(bonePositions, 3); + this.boneAttribute.setUsage(THREE.DynamicDrawUsage); + const boneGeometry = new THREE.BufferGeometry(); + boneGeometry.setAttribute('position', this.boneAttribute); + this.boneLines = new THREE.LineSegments( + boneGeometry, + new THREE.LineBasicMaterial({color: 0xffb037, depthTest: false}) + ); + this.boneLines.renderOrder = 10; + this.boneLines.frustumCulled = false; + this.skeletonGroup = new THREE.Group(); + this.skeletonGroup.add(this.jointMesh, this.boneLines); + this.skeletonGroup.visible = false; + this.skeletonGroup.ignoreReticleRaycast = true; // overlay, not a target + this.anchor.add(this.skeletonGroup); + + // ---- Lights ---------------------------------------------------------- + const key = new THREE.DirectionalLight(0xfff1e0, 2.6); + key.position.set(0.7, 2.3, 0.9); + const fill = new THREE.DirectionalLight(0xbdd2ff, 1.0); + fill.position.set(-1.1, 1.4, 0.4); + const rim = new THREE.DirectionalLight(0xffffff, 1.6); + rim.position.set(-0.2, 1.9, -1.4); + const hemisphere = new THREE.HemisphereLight(0x93a4c0, 0x40382f, 0.9); + for (const light of [key, fill, rim]) { + light.target.position.set(0, WORLD_HEAD_Y, WORLD_HEAD_Z); + this.add(light.target); + this.add(light); + } + this.add(hemisphere); + + // Required for raycasting against uiblocks panels. + if (xb.core.input?.raycaster) { + xb.core.input.raycaster.sortFunction = raycastSortFunction; + } + this.spatialUI.build(); + + // First shape. + this.model.dirty = true; + this._refreshGeometry(); + + // Now that geometry exists, wrap it in the ModelViewer pedestal. + this._setupModelViewer(); + } + + /** + * Configures the ModelViewer around the head: a rotation proxy (grab the + * head to rotate) and a platform (grab the pedestal to move it), then places + * the whole thing so the head centre sits at the intended world position. + */ + _setupModelViewer() { + const viewer = this.modelViewer; + viewer.setupBoundingBox(); + viewer.setupRaycastCylinder(); + // A tighter pedestal than the default so it reads as a stand for the bust. + viewer.setupPlatform(new THREE.Vector2(0.12, 0.12)); + const size = new THREE.Vector3(); + viewer.bbox.getSize(size); + viewer.position.set(0, WORLD_HEAD_Y - size.y / 2, WORLD_HEAD_Z); + this._modelViewerHomeY = viewer.position.y; + } + + // -------------------------------------------------------------- helpers -- + + _buildMaterialColors() { + const model = this.model; + const palette = MATERIAL_COLORS.map((c) => new THREE.Color(c)); + const colors = new Float32Array(model.numVertices * 3); + for (let v = 0; v < model.numVertices; ++v) { + const color = palette[model.materialId[v]] ?? palette[0]; + colors[v * 3] = color.r; + colors[v * 3 + 1] = color.g; + colors[v * 3 + 2] = color.b; + } + return colors; + } + + _buildRegionColors() { + const model = this.model; + const regionCount = model.meta.regionNames.length; + const palette = []; + for (let i = 0; i < regionCount; ++i) { + palette.push(new THREE.Color().setHSL((i * 0.61803) % 1, 0.62, 0.55)); + } + const neutral = new THREE.Color('#6d6d70'); + const colors = new Float32Array(model.numVertices * 3); + for (let v = 0; v < model.numVertices; ++v) { + const id = model.regionId[v]; + const color = id === 255 ? neutral : palette[id]; + colors[v * 3] = color.r; + colors[v * 3 + 1] = color.g; + colors[v * 3 + 2] = color.b; + } + return colors; + } + + _buildQuadEdgeIndex() { + const quads = this.model.quads; + const V = this.model.numVertices; + const seen = new Set(); + const edges = []; + for (let q = 0; q < quads.length; q += 4) { + for (let k = 0; k < 4; ++k) { + const a = quads[q + k]; + const b = quads[q + ((k + 1) % 4)]; + const key = a < b ? a * V + b : b * V + a; + if (seen.has(key)) continue; + seen.add(key); + edges.push(a, b); + } + } + return Uint16Array.from(edges); + } + + /** Sends a status line to both the DOM panel and the spatial panels. */ + _emitStatus(text) { + this.onStatus?.(text); + this.spatialUI?.setStatus(text); + } + + // ------------------------------------------------------------ view state -- + + setMaterialMode(mode) { + if (!this.materials[mode]) return; + this.materialMode = mode; + if (mode === 'regions' && !this._regionColors) { + this._regionColors = new THREE.BufferAttribute( + this._buildRegionColors(), + 3 + ); + } + if (mode === 'regions') { + this.geometry.setAttribute('color', this._regionColors); + } else if (mode === 'studio') { + this.geometry.setAttribute( + 'color', + new THREE.BufferAttribute(this._buildMaterialColors(), 3) + ); + } + this.mesh.material = this.materials[mode]; + } + + setWireframeVisible(visible) { + this.wireframe.visible = visible; + } + + setLandmarksVisible(visible) { + this.landmarkMesh.visible = visible; + if (visible) this._updateLandmarks(); + } + + setSkeletonVisible(visible) { + this.skeletonGroup.visible = visible; + if (visible) this._updateSkeleton(); + } + + setComponentVisible(componentIndex, visible) { + this.visibleComponents[componentIndex] = visible; + const allVisible = this.visibleComponents.every(Boolean); + if (allVisible) { + this.geometry.setIndex(this.fullIndex); + return; + } + const {triangles, componentId} = this.model; + const filtered = []; + for (let t = 0; t < triangles.length; t += 3) { + if (this.visibleComponents[componentId[triangles[t]]]) { + filtered.push(triangles[t], triangles[t + 1], triangles[t + 2]); + } + } + this.geometry.setIndex( + new THREE.BufferAttribute(Uint16Array.from(filtered), 1) + ); + } + + // ------------------------------------------------------------- sampling -- + + sampleIdentity(genderWeights, ethnicityWeights, sigma, smooth = true) { + const target = this.samplers.sampleIdentity( + genderWeights, + ethnicityWeights, + sigma + ); + this._applyIdentity(target, smooth); + return target; + } + + sampleRandomIdentity(sigma = 1) { + this._applyIdentity(this.samplers.randomIdentity(sigma), true); + } + + sampleExpression(classWeights, sigma, smooth = true) { + const target = this.samplers.sampleExpression(classWeights, sigma); + this._applyExpression(target, smooth); + return target; + } + + sampleRandomExpression(sigma = 1) { + this._applyExpression(this.samplers.randomExpression(sigma), true); + } + + resetToNeutral() { + this.setExpressionTour(false); + this.setIdentityMorph(false); + this.model.resetExpression(); + this.model.resetPose(); + this._smoothedRotations.fill(0); + this.onModelChanged?.(); + } + + _applyIdentity(target, smooth) { + this.morph = null; + if (smooth) { + this.model.beginIdentityBlend(target); + this._idFade = {t: 0}; + } else { + this.model.setIdentityVector(target); + } + this.onModelChanged?.(); + } + + _applyExpression(target, smooth) { + this.tour = null; + if (smooth) { + this.model.beginExpressionBlend(target); + this._exprFade = {t: 0}; + } else { + this.model.setExpressionVector(target); + } + this.onModelChanged?.(); + } + + // ------------------------------------------------------------ animation -- + + setExpressionTour(enabled) { + this.tour = enabled ? {phase: 'fade', t: 0, classIndex: 0} : null; + if (enabled) { + this._startTourStep(0); + } else { + this._emitStatus(''); + } + } + + setIdentityMorph(enabled) { + this.morph = enabled ? {phase: 'fade', t: 0} : null; + if (enabled) { + this.model.beginIdentityBlend(this.samplers.randomIdentity(1)); + } + } + + setPulse(kind, index) { + this.pulse = {kind, index, base: this._paramValue(kind, index)}; + this._pulseTime = 0; + } + + setPulseEnabled(enabled) { + if (!enabled && this.pulse) { + this._setParamValue(this.pulse.kind, this.pulse.index, this.pulse.base); + this.onModelChanged?.(); + } + this.pulseEnabled = enabled; + this._pulseTime = 0; + if (enabled && this.pulse) { + this.pulse.base = this._paramValue(this.pulse.kind, this.pulse.index); + } + } + + _paramValue(kind, index) { + return kind === 'identity' + ? this.model.identity[index] + : this.model.expression[index]; + } + + _setParamValue(kind, index, value) { + if (kind === 'identity') this.model.setIdentityParam(index, value); + else this.model.setExpressionParam(index, value); + } + + _startTourStep(classIndex) { + const target = this.samplers.sampleExpression(classIndex, 0.85); + this.model.beginExpressionBlend(target); + this.tour = {phase: 'fade', t: 0, classIndex}; + const label = this.samplers.expressionClasses[classIndex].replace( + /_/g, + ' ' + ); + this._emitStatus(`expression tour — ${label}`); + } + + _updateTour(dt) { + const tour = this.tour; + tour.t += dt; + if (tour.phase === 'fade') { + const t = Math.min(tour.t / TOUR_FADE_SECONDS, 1); + this.model.setExpressionBlend(smoothstep(t)); + if (t >= 1) { + tour.phase = 'hold'; + tour.t = 0; + } + } else if (tour.t >= TOUR_HOLD_SECONDS) { + const next = + (tour.classIndex + 1) % this.samplers.expressionClasses.length; + this._startTourStep(next); + } + } + + _updateMorph(dt) { + const morph = this.morph; + morph.t += dt; + if (morph.phase === 'fade') { + const t = Math.min(morph.t / MORPH_FADE_SECONDS, 1); + this.model.setIdentityBlend(smoothstep(t)); + if (t >= 1) { + morph.phase = 'hold'; + morph.t = 0; + } + } else if (morph.t >= MORPH_HOLD_SECONDS) { + this.model.beginIdentityBlend(this.samplers.randomIdentity(1)); + morph.phase = 'fade'; + morph.t = 0; + } + } + + _updatePulse(dt) { + if (!this.pulseEnabled || !this.pulse) return; + this._pulseTime += dt; + const value = this.pulse.base + 2.3 * Math.sin(this._pulseTime * 2.6); + this._setParamValue(this.pulse.kind, this.pulse.index, value); + } + + _updateGaze(dt) { + const camera = xb.core?.camera; + if (!camera) return; + const model = this.model; + const target = this._tmpTarget ?? (this._tmpTarget = new THREE.Vector3()); + camera.getWorldPosition(target); + this.anchor.worldToLocal(target); + + const setLook = (jointIndex, parentIndex, maxAngle, rate) => { + const jw = model.jointsWorld; + const jx = jw[jointIndex * 3]; + const jy = jw[jointIndex * 3 + 1]; + const jz = jw[jointIndex * 3 + 2]; + let dx = target.x - jx; + let dy = target.y - jy; + let dz = target.z - jz; + const length = Math.hypot(dx, dy, dz) || 1; + dx /= length; + dy /= length; + dz /= length; + // Direction in the parent joint's frame (rows of R^T are columns of R). + const parentRotation = model.getJointWorldRotation(parentIndex); + const lx = + parentRotation[0] * dx + + parentRotation[3] * dy + + parentRotation[6] * dz; + const ly = + parentRotation[1] * dx + + parentRotation[4] * dy + + parentRotation[7] * dz; + const lz = + parentRotation[2] * dx + + parentRotation[5] * dy + + parentRotation[8] * dz; + // Rotation taking +z to (lx, ly, lz): axis = z × d, angle = atan2. + let axisX = -ly; + let axisY = lx; + const sinAngle = Math.hypot(axisX, axisY); + let angle = Math.atan2(sinAngle, lz); + if (sinAngle > 1e-6) { + axisX /= sinAngle; + axisY /= sinAngle; + } else { + axisX = 0; + axisY = 0; + angle = 0; + } + angle = Math.min(angle, maxAngle); + const targetRx = axisX * angle; + const targetRy = axisY * angle; + const blend = 1 - Math.exp(-rate * dt); + const o = jointIndex * 3; + const smoothed = this._smoothedRotations; + smoothed[o] += (targetRx - smoothed[o]) * blend; + smoothed[o + 1] += (targetRy - smoothed[o + 1]) * blend; + smoothed[o + 2] += (0 - smoothed[o + 2]) * blend; + model.setJointRotation(jointIndex, smoothed[o], smoothed[o + 1], 0); + }; + + if (this.headFollowsCamera) setLook(1, 0, 0.42, 4); + if (this.eyesFollowCamera) { + setLook(2, 1, 0.55, 12); + setLook(3, 1, 0.55, 12); + } + } + + _updateIdleSway(time) { + const sway = 0.05; + this.model.setJointRotation( + 0, + Math.sin(time * 0.53) * sway * 0.6, + Math.sin(time * 0.31) * sway, + Math.sin(time * 0.43) * sway * 0.35 + ); + } + + // --------------------------------------------------------------- update -- + + update() { + const dt = + Math.min(xb.core?.timer?.getDelta?.() ?? 0.016, 0.1) * + this.animationSpeed || 0.016; + this._time += dt; + + if (this.turntable) this.anchor.rotation.y += dt * 0.6; + if (this.tour) this._updateTour(dt); + if (this.morph) this._updateMorph(dt); + if (this._idFade) { + this._idFade.t += dt / 1.1; + this.model.setIdentityBlend(smoothstep(Math.min(this._idFade.t, 1))); + if (this._idFade.t >= 1) this._idFade = null; + } + if (this._exprFade) { + this._exprFade.t += dt / 0.7; + this.model.setExpressionBlend(smoothstep(Math.min(this._exprFade.t, 1))); + if (this._exprFade.t >= 1) this._exprFade = null; + } + this._updatePulse(dt); + if (this.idleSway) this._updateIdleSway(this._time); + if (this.eyesFollowCamera || this.headFollowsCamera) this._updateGaze(dt); + + this.spatialUI?.update(); + if (this.model.dirty) this._refreshGeometry(); + } + + _refreshGeometry() { + const start = performance.now(); + this.model.computeVertices(this.positionAttribute.array); + this.positionAttribute.needsUpdate = true; + this.geometry.computeVertexNormals(); + this.geometry.boundingSphere = null; + if (this.landmarkMesh.visible) this._updateLandmarks(); + if (this.skeletonGroup.visible) this._updateSkeleton(); + this.lastComputeMs = performance.now() - start; + } + + _updateLandmarks() { + const count = this.model.computeLandmarks( + this.positionAttribute.array, + this.landmarkPoints + ); + const matrix = this._tmpMatrix ?? (this._tmpMatrix = new THREE.Matrix4()); + for (let l = 0; l < count; ++l) { + matrix.makeTranslation( + this.landmarkPoints[l * 3], + this.landmarkPoints[l * 3 + 1], + this.landmarkPoints[l * 3 + 2] + ); + this.landmarkMesh.setMatrixAt(l, matrix); + } + this.landmarkMesh.instanceMatrix.needsUpdate = true; + } + + _updateSkeleton() { + const model = this.model; + const joints = model.jointsWorld; + const matrix = this._tmpMatrix ?? (this._tmpMatrix = new THREE.Matrix4()); + for (let j = 0; j < model.numJoints; ++j) { + matrix.makeTranslation( + joints[j * 3], + joints[j * 3 + 1], + joints[j * 3 + 2] + ); + this.jointMesh.setMatrixAt(j, matrix); + } + this.jointMesh.instanceMatrix.needsUpdate = true; + const bones = this.boneAttribute.array; + let b = 0; + for (let j = 1; j < model.numJoints; ++j) { + const p = model.jointParents[j]; + bones[b++] = joints[p * 3]; + bones[b++] = joints[p * 3 + 1]; + bones[b++] = joints[p * 3 + 2]; + bones[b++] = joints[j * 3]; + bones[b++] = joints[j * 3 + 1]; + bones[b++] = joints[j * 3 + 2]; + } + this.boneAttribute.needsUpdate = true; + } + + // ---------------------------------------------------------------- export -- + + exportOBJ() { + const positions = this.positionAttribute.array; + const normals = this.geometry.getAttribute('normal').array; + const triangles = this.model.triangles; + const lines = ['# GNM Head — exported from the XR Blocks GNM demo']; + for (let v = 0; v < positions.length; v += 3) { + lines.push( + `v ${positions[v].toFixed(6)} ${positions[v + 1].toFixed(6)} ` + + `${positions[v + 2].toFixed(6)}` + ); + } + for (let v = 0; v < normals.length; v += 3) { + lines.push( + `vn ${normals[v].toFixed(4)} ${normals[v + 1].toFixed(4)} ` + + `${normals[v + 2].toFixed(4)}` + ); + } + for (let t = 0; t < triangles.length; t += 3) { + const a = triangles[t] + 1; + const b = triangles[t + 1] + 1; + const c = triangles[t + 2] + 1; + lines.push(`f ${a}//${a} ${b}//${b} ${c}//${c}`); + } + return lines.join('\n'); + } + + get jointLabels() { + return JOINT_LABELS; + } +} + +function smoothstep(t) { + return t * t * (3 - 2 * t); +} diff --git a/gnm/shape/demos/web/GNMSpatialUI.js b/gnm/shape/demos/web/GNMSpatialUI.js new file mode 100644 index 00000000..42a96190 --- /dev/null +++ b/gnm/shape/demos/web/GNMSpatialUI.js @@ -0,0 +1,488 @@ +import * as THREE from 'three'; +import {ManipulationBehavior, UICore, UIIcon, UIPanel, UIText} from 'uiblocks'; + +/** + * GNMSpatialUI — in-headset control surface built with the uiblocks addon + * (flexbox-laid-out spatial cards; see src/addons/uiblocks/SKILL.md). + * + * Three draggable UICards arranged around the head mirror the desktop panel: + * SAMPLE (left) semantic identity recipe + all 20 expression + * classes (paged chips), random blend, neutral. + * MOTION (right, top) gaze tracking and animation driver toggles. + * VIEW (right, bottom) material modes and inspection overlays. + * + * Buttons are composed UIPanel + UIText (uiblocks has no button class) and + * reflect live scene state — also when changed from the DOM panel — via + * update(), called from GNMScene.update(). + */ + +// Design tokens (§6.1 of the uiblocks skill): one density, a small type +// scale, spacing rhythm, two radii, and a restrained hex palette. +const PIXEL_SIZE = 0.0015; +const SURFACE = '#12161f'; +const CONTROL = '#232a38'; +const CONTROL_HOVER = '#31394c'; +const CONTROL_ACTIVE = '#1d4238'; +const ACCENT = '#4fe0ae'; +const TEXT = '#f0f3f8'; +const MUTED = '#93a0b8'; +const STROKE = '#333a4c'; +const RADIUS_CARD = 24; +const RADIUS_CONTROL = 12; + +const CHIPS_PER_PAGE = 8; + +function prettify(name) { + return name.replace(/_/g, ' ').replace(/^./, (c) => c.toUpperCase()); +} + +export class GNMSpatialUI { + /** @param scene The owning GNMScene (an xb.Script). */ + constructor(scene) { + this.scene = scene; + this.model = scene.model; + this.samplers = scene.samplers; + this.uiCore = new UICore(scene); + + this._genderWeights = [1, 1]; + this._ethnicityWeights = [1, 1, 1, 1]; + this._chipPage = 0; + this._chips = []; + this._toggles = []; // {button, get} + this._modeButtons = []; // {button, mode} + this._recipeButtons = {gender: [], ethnicity: []}; + this._lastStates = new Map(); + } + + build() { + this._buildSampleCard(); + this._buildMotionCard(); + this._buildViewCard(); + this._highlightRecipe(); + this._renderChipPage(); + } + + setStatus(text) { + this._statusText?.setText(text || ' '); + } + + // ------------------------------------------------------------ primitives -- + + _card(name, sizeX, sizeY, x, y, z, rotationY) { + return this.uiCore.createCard({ + name, + sizeX, + sizeY, + pixelSize: PIXEL_SIZE, + position: new THREE.Vector3(x, y, z), + rotation: new THREE.Quaternion().setFromEuler( + new THREE.Euler(0, rotationY, 0) + ), + behaviors: [ + new ManipulationBehavior({ + draggable: true, + faceCamera: true, + manipulationMargin: 24, + manipulationCornerRadius: RADIUS_CARD, + }), + ], + }); + } + + _surface(card, {padding = 20, gap = 12} = {}) { + const panel = new UIPanel({ + width: '100%', + height: '100%', + flexDirection: 'column', + fillColor: SURFACE, + cornerRadius: RADIUS_CARD, + padding, + gap, + strokeWidth: 1, + strokeColor: STROKE, + strokeAlign: 'inside', + dropShadowColor: '#000000', + dropShadowBlur: 20, + dropShadowSpread: 2, + }); + card.add(panel); + return panel; + } + + _header(parent, icon, title) { + const row = new UIPanel({ + width: '100%', + flexDirection: 'row', + alignItems: 'center', + gap: 10, + }); + row.add(new UIIcon(icon, {width: 26, height: 26, color: ACCENT})); + row.add(new UIText(title, {fontSize: 24, fontWeight: 'bold', color: TEXT})); + parent.add(row); + return row; + } + + _sectionLabel(parent, label) { + parent.add( + new UIText(label, {fontSize: 14, fontWeight: 'bold', color: MUTED}) + ); + } + + _row(parent, {gap = 10, height} = {}) { + const row = new UIPanel({ + width: '100%', + flexDirection: 'row', + gap, + ...(height ? {height} : {}), + alignItems: 'center', + }); + parent.add(row); + return row; + } + + /** Composes a button from UIPanel + UIText (uiblocks skill §5.3). */ + _button( + parent, + label, + {fontSize = 16, height = 40, accent = false, onClick} + ) { + const state = { + hovered: false, + base: CONTROL, + textColor: accent ? ACCENT : TEXT, + }; + const panel = new UIPanel({ + flexGrow: 1, + height, + cornerRadius: RADIUS_CONTROL, + fillColor: state.base, + justifyContent: 'center', + alignItems: 'center', + padding: 4, + onHoverEnter: () => { + state.hovered = true; + panel.setFillColor(CONTROL_HOVER); + }, + onHoverExit: () => { + state.hovered = false; + panel.setFillColor(state.base); + }, + onClick: () => { + onClick?.(); + return true; + }, + }); + const text = new UIText(label, { + fontSize, + color: state.textColor, + textAlign: 'center', + }); + panel.add(text); + parent.add(panel); + const button = { + panel, + text, + setActive(active) { + state.base = active ? CONTROL_ACTIVE : CONTROL; + text.setColor(active ? ACCENT : state.textColor); + if (!state.hovered) panel.setFillColor(state.base); + }, + setLabel(value) { + text.setText(value); + }, + }; + return button; + } + + // ----------------------------------------------------------------- cards -- + + _buildSampleCard() { + const card = this._card('GNMSample', 0.6, 0.8, -0.62, 1.32, -0.46, 0.6); + const root = this._surface(card); + + this._header(root, 'face', 'GNM Sample'); + this._sectionLabel(root, 'IDENTITY'); + + const genderRow = this._row(root); + this._recipeButtons.gender = [ + ['Female', 0], + ['Male', 1], + ['Mix', -1], + ].map(([label, index]) => + this._button(genderRow, label, { + fontSize: 15, + height: 36, + onClick: () => this._pickGender(index), + }) + ); + + const ethnicityRow = this._row(root, {gap: 8}); + this._recipeButtons.ethnicity = [ + ['Mid-East', 0], + ['Asian', 1], + ['White', 2], + ['Black', 3], + ['Mix', -1], + ].map(([label, index]) => + this._button(ethnicityRow, label, { + fontSize: 12, + height: 36, + onClick: () => this._pickEthnicity(index), + }) + ); + + const identityActions = this._row(root); + this._button(identityActions, 'New face', { + accent: true, + onClick: () => this._sampleIdentity(), + }); + this._button(identityActions, 'Template', { + onClick: () => { + this.model.resetIdentity(); + this.scene.onModelChanged?.(); + this.scene._emitStatus('template (mean) face'); + }, + }); + + this._sectionLabel(root, 'EXPRESSION'); + + const classes = this.samplers.expressionClasses; + for (let r = 0; r < CHIPS_PER_PAGE / 4; ++r) { + const chipRow = this._row(root, {gap: 8}); + for (let c = 0; c < 4; ++c) { + const chip = this._button(chipRow, '', { + fontSize: 12, + height: 40, + onClick: () => { + if (chip.classIndex === undefined || chip.classIndex < 0) return; + this.scene.sampleExpression(chip.classIndex, 0.9); + this.scene._emitStatus( + `expression: ${classes[chip.classIndex].replace(/_/g, ' ')}` + ); + }, + }); + this._chips.push(chip); + } + } + + const pageCount = Math.ceil(classes.length / CHIPS_PER_PAGE); + const pager = this._row(root); + this._button(pager, '<', { + fontSize: 15, + height: 30, + onClick: () => { + this._chipPage = (this._chipPage + pageCount - 1) % pageCount; + this._renderChipPage(); + }, + }); + this._pageText = new UIText('', { + fontSize: 14, + color: MUTED, + textAlign: 'center', + flexGrow: 1, + }); + pager.add(this._pageText); + this._button(pager, '>', { + fontSize: 15, + height: 30, + onClick: () => { + this._chipPage = (this._chipPage + 1) % pageCount; + this._renderChipPage(); + }, + }); + + const expressionActions = this._row(root); + this._button(expressionActions, 'Random blend', { + accent: true, + onClick: () => { + this.scene.sampleRandomExpression(0.9); + this.scene._emitStatus('random expression blend'); + }, + }); + this._button(expressionActions, 'Neutral', { + onClick: () => { + this.model.resetExpression(); + this.scene.onModelChanged?.(); + this.scene._emitStatus('neutral expression'); + }, + }); + + this._statusText = new UIText(' ', { + fontSize: 14, + color: ACCENT, + textAlign: 'center', + width: '100%', + }); + root.add(this._statusText); + } + + _buildMotionCard() { + const card = this._card('GNMMotion', 0.52, 0.46, 0.62, 1.52, -0.46, -0.6); + const root = this._surface(card); + this._header(root, 'animation', 'Motion'); + + const scene = this.scene; + const specs = [ + [ + 'Eyes follow', + () => scene.eyesFollowCamera, + (v) => (scene.eyesFollowCamera = v), + ], + [ + 'Head follow', + () => scene.headFollowsCamera, + (v) => (scene.headFollowsCamera = v), + ], + ['Tour', () => !!scene.tour, (v) => scene.setExpressionTour(v)], + ['Morph', () => !!scene.morph, (v) => scene.setIdentityMorph(v)], + ['Sway', () => scene.idleSway, (v) => (scene.idleSway = v)], + ['Turntable', () => scene.turntable, (v) => (scene.turntable = v)], + ]; + for (let r = 0; r < specs.length; r += 2) { + const row = this._row(root); + for (const [label, get, set] of specs.slice(r, r + 2)) { + const button = this._button(row, label, { + fontSize: 15, + onClick: () => set(!get()), + }); + this._toggles.push({button, get}); + } + } + + const actions = this._row(root); + this._button(actions, 'Reset pose', { + onClick: () => { + this.model.resetPose(); + scene._smoothedRotations.fill(0); + scene.onModelChanged?.(); + }, + }); + this._button(actions, 'Neutral all', { + onClick: () => scene.resetToNeutral(), + }); + } + + _buildViewCard() { + const card = this._card('GNMView', 0.52, 0.4, 0.64, 1.08, -0.46, -0.6); + const root = this._surface(card); + this._header(root, 'visibility', 'View'); + + const scene = this.scene; + const modeRow = this._row(root, {gap: 8}); + for (const [mode, label] of [ + ['studio', 'Studio'], + ['clay', 'Clay'], + ['normals', 'Normals'], + ['regions', 'Regions'], + ]) { + const button = this._button(modeRow, label, { + fontSize: 13, + height: 36, + onClick: () => scene.setMaterialMode(mode), + }); + this._modeButtons.push({button, mode}); + } + + const overlaySpecs = [ + [ + 'Wireframe', + () => scene.wireframe.visible, + (v) => scene.setWireframeVisible(v), + ], + [ + 'Landmarks', + () => scene.landmarkMesh.visible, + (v) => scene.setLandmarksVisible(v), + ], + [ + 'Skeleton', + () => scene.skeletonGroup.visible, + (v) => scene.setSkeletonVisible(v), + ], + [ + 'Anatomy', + () => !scene.visibleComponents[0], + (v) => scene.setComponentVisible(0, !v), + ], + ]; + for (let r = 0; r < overlaySpecs.length; r += 2) { + const row = this._row(root); + for (const [label, get, set] of overlaySpecs.slice(r, r + 2)) { + const button = this._button(row, label, { + fontSize: 15, + onClick: () => set(!get()), + }); + this._toggles.push({button, get}); + } + } + } + + // -------------------------------------------------------------- behavior -- + + _pickGender(index) { + this._genderWeights = + index < 0 ? [1, 1] : [index === 0 ? 1 : 0, index === 1 ? 1 : 0]; + this._highlightRecipe(); + this._sampleIdentity(); + } + + _pickEthnicity(index) { + this._ethnicityWeights = + index < 0 ? [1, 1, 1, 1] : [0, 1, 2, 3].map((i) => (i === index ? 1 : 0)); + this._highlightRecipe(); + this._sampleIdentity(); + } + + _sampleIdentity() { + this.scene.sampleIdentity(this._genderWeights, this._ethnicityWeights, 0.9); + this.scene._emitStatus('sampled identity'); + } + + _highlightRecipe() { + const [female, male] = this._genderWeights; + const genderActive = [ + female === 1 && male === 0, + male === 1 && female === 0, + female === male, + ]; + this._recipeButtons.gender.forEach((button, i) => + button.setActive(genderActive[i]) + ); + const mix = this._ethnicityWeights.every((w) => w === 1); + this._recipeButtons.ethnicity.forEach((button, i) => { + const active = i === 4 ? mix : !mix && this._ethnicityWeights[i] === 1; + button.setActive(active); + }); + } + + _renderChipPage() { + const classes = this.samplers.expressionClasses; + const pageCount = Math.ceil(classes.length / CHIPS_PER_PAGE); + this._chips.forEach((chip, i) => { + const classIndex = this._chipPage * CHIPS_PER_PAGE + i; + chip.classIndex = classIndex < classes.length ? classIndex : -1; + chip.setLabel( + chip.classIndex >= 0 ? prettify(classes[chip.classIndex]) : '' + ); + }); + this._pageText?.setText(`${this._chipPage + 1} / ${pageCount}`); + } + + /** Reflects scene state into toggle fills and mode highlights. */ + update() { + for (const toggle of this._toggles) { + const on = !!toggle.get(); + if (this._lastStates.get(toggle) !== on) { + this._lastStates.set(toggle, on); + toggle.button.setActive(on); + } + } + const mode = this.scene.materialMode; + if (this._lastStates.get('mode') !== mode) { + this._lastStates.set('mode', mode); + for (const entry of this._modeButtons) { + entry.button.setActive(entry.mode === mode); + } + } + } +} diff --git a/gnm/shape/demos/web/README.md b/gnm/shape/demos/web/README.md new file mode 100644 index 00000000..6c47d3c3 --- /dev/null +++ b/gnm/shape/demos/web/README.md @@ -0,0 +1,36 @@ +# GNM Web Demo + +[![GNM Head Explorer Preview](teaser/teaser.webm)](https://xrblocks.github.io/demos/gnm/) + +**Live Demo:** [https://xrblocks.github.io/demos/gnm/](https://xrblocks.github.io/demos/gnm/) + +This is a standalone web demonstration of the [GNM](https://github.com/google/gnm) (Generative aNthropometric Model) running purely in the Chrome browser +across desktop, mobile, and [Android XR](https://android.com/xr) devices. + +The demo runs using [XR Blocks](https://github.com/google/xrblocks), loading it dynamically via CDN, which provides the 3D scene, rendering, and spatial UI. You can explore more interactive XR examples and the full SDK in the [XR Blocks repository](https://github.com/google/xrblocks). + +## Running the Demo + +Because this demo uses ES modules, you must serve it over HTTP (opening `index.html` directly from your file system via `file://` will not work). + +You can use any local web server. For example, if you have Python installed, run this command in this directory: + +```bash +# Python 3 +python -m http.server 8000 +``` + +Then, open your browser and navigate to: +[http://localhost:8000/](http://localhost:8000/) + +## Model Assets + +By default, the demo fetches the required model weights (`gnm_head_web.bin` and `gnm_samplers_web.bin`) dynamically from a CDN. + +If you prefer to run the demo entirely offline, you can download the pre-converted `.bin` files from the [assets-gnm repository](https://github.com/xrblocks/assets-gnm/tree/main). + +1. Create an `assets/` folder in this directory. +2. Place `gnm_head_web.bin` and `gnm_samplers_web.bin` inside `assets/`. +3. Open `main.js` and set `const USE_LOCAL_ASSETS = true;`, or append `?localAssets=1` to your URL. + +Alternatively, you can generate the `.bin` files yourself from the main GNM repository using the script located in `tools/export_gnm_web.py`. diff --git a/gnm/shape/demos/web/SemanticSampler.js b/gnm/shape/demos/web/SemanticSampler.js new file mode 100644 index 00000000..0393c9f5 --- /dev/null +++ b/gnm/shape/demos/web/SemanticSampler.js @@ -0,0 +1,181 @@ +/** + * SemanticSampler.js — JavaScript port of gnm/shape/semantic_sampler.py. + * + * The identity and expression samplers are conditional-VAE decoders: a small + * MLP mapping [latent z, one-hot condition] to a GNM parameter vector. The + * exported weights (tools/export_gnm_web.py) run here as plain typed-array + * matrix products, enabling live semantic sampling in the browser: + * + * identity: z(64) + [gender(2), ethnicity(4)] -> 253 identity params + * expression: z(64) + [expression class(20)] -> 383 expression params + * + * Blending mirrors the Python reference: expressions blend per-class latents + * and one-hots; identities share one latent with blended condition one-hots. + */ + +import {fetchWithProgress, parseContainer} from './GNMModel.js'; + +/** Deterministic 32-bit PRNG (mulberry32) so results are reproducible. */ +export function createRng(seed) { + let state = seed >>> 0; + return function () { + state = (state + 0x6d2b79f5) >>> 0; + let t = state; + t = Math.imul(t ^ (t >>> 15), t | 1); + t ^= t + Math.imul(t ^ (t >>> 7), t | 61); + return ((t ^ (t >>> 14)) >>> 0) / 4294967296; + }; +} + +/** Standard normal via Box–Muller. */ +function gaussian(rng) { + let u = 0; + while (u === 0) u = rng(); + const v = rng(); + return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v); +} + +class MLPDecoder { + /** @param layers Array of {weights, bias, activation, inputDim, outputDim} */ + constructor(layers) { + this.layers = layers; + this.inputDim = layers[0].inputDim; + this.outputDim = layers[layers.length - 1].outputDim; + let maxDim = this.inputDim; + for (const layer of layers) maxDim = Math.max(maxDim, layer.outputDim); + this._bufferA = new Float32Array(maxDim); + this._bufferB = new Float32Array(maxDim); + } + + /** input: Float32Array(inputDim) -> Float32Array(outputDim) (fresh copy). */ + forward(input) { + let x = this._bufferA; + let y = this._bufferB; + x.set(input); + let currentDim = this.inputDim; + for (const layer of this.layers) { + const {weights, bias, activation, outputDim} = layer; + for (let o = 0; o < outputDim; ++o) { + let acc = bias[o]; + for (let i = 0; i < currentDim; ++i) { + acc += x[i] * weights[i * outputDim + o]; + } + y[o] = activation === 'relu' && acc < 0 ? 0 : acc; + } + [x, y] = [y, x]; + currentDim = outputDim; + } + return x.slice(0, currentDim); + } +} + +export class GNMSamplers { + constructor(meta, sections) { + this.identityMeta = meta.identity; + this.expressionMeta = meta.expression; + this.identityDecoder = new MLPDecoder( + meta.identity.layers.map((l) => ({ + ...l, + weights: sections[l.weights], + bias: sections[l.bias], + })) + ); + this.expressionDecoder = new MLPDecoder( + meta.expression.layers.map((l) => ({ + ...l, + weights: sections[l.weights], + bias: sections[l.bias], + })) + ); + this.genders = meta.identity.genders; + this.ethnicities = meta.identity.ethnicities; + this.expressionClasses = meta.expression.labels; + this._rng = createRng(20260717); + } + + static async load(url, onProgress) { + const buffer = await fetchWithProgress(url, onProgress); + const {meta, sections} = parseContainer(buffer); + return new GNMSamplers(meta, sections); + } + + /** Reseeds the internal RNG (useful for reproducible demos). */ + seed(value) { + this._rng = createRng(value); + } + + _sampleLatent(dim, sigma) { + const z = new Float32Array(dim); + for (let i = 0; i < dim; ++i) z[i] = gaussian(this._rng) * sigma; + return z; + } + + /** + * Samples an identity vector. + * genderWeights / ethnicityWeights: arrays of non-negative weights (one per + * class, normalized internally); pass a one-hot for a pure class. + * sigma scales latent variation (0 = class mean). + */ + sampleIdentity(genderWeights, ethnicityWeights, sigma = 1) { + const {latentDim} = this.identityMeta; + const input = new Float32Array(this.identityDecoder.inputDim); + input.set(this._sampleLatent(latentDim, sigma), 0); + normalizeInto(input, latentDim, genderWeights); + normalizeInto(input, latentDim + genderWeights.length, ethnicityWeights); + return this.identityDecoder.forward(input); + } + + /** + * Samples an expression vector for one class index, or blends several: + * pass a Map/object of classIndex -> weight. Each class contributes its own + * latent sample, matching ExpressionSampler.blend_expressions. + */ + sampleExpression(classWeights, sigma = 1) { + const {latentDim, conditionDim} = this.expressionMeta; + const entries = + typeof classWeights === 'number' + ? [[classWeights, 1]] + : Object.entries(classWeights).map(([k, w]) => [Number(k), w]); + let total = 0; + for (const [, w] of entries) total += w; + if (!(total > 0)) total = 1; + + const input = new Float32Array(this.expressionDecoder.inputDim); + for (const [classIndex, weight] of entries) { + const w = weight / total; + if (w === 0) continue; + const z = this._sampleLatent(latentDim, sigma); + for (let i = 0; i < latentDim; ++i) input[i] += z[i] * w; + input[latentDim + classIndex] += w; + } + return this.expressionDecoder.forward(input); + } + + /** Random blended identity, mirroring IdentitySampler.randomize_identities. */ + randomIdentity(sigma = 1) { + const genderWeights = this.genders.map(() => this._rng()); + const ethnicityWeights = this.ethnicities.map(() => this._rng()); + return this.sampleIdentity(genderWeights, ethnicityWeights, sigma); + } + + /** Random 2–3 class expression blend, mirroring randomize_expressions. */ + randomExpression(sigma = 1, maxClasses = 3) { + const count = 2 + Math.floor(this._rng() * (maxClasses - 1)); + const chosen = new Set(); + while (chosen.size < count) { + chosen.add(Math.floor(this._rng() * this.expressionClasses.length)); + } + const weights = {}; + for (const c of chosen) weights[c] = this._rng(); + return this.sampleExpression(weights, sigma); + } +} + +function normalizeInto(target, offset, weights) { + let total = 0; + for (const w of weights) total += w; + if (!(total > 0)) total = 1; + for (let i = 0; i < weights.length; ++i) { + target[offset + i] = weights[i] / total; + } +} diff --git a/gnm/shape/demos/web/demo.css b/gnm/shape/demos/web/demo.css new file mode 100644 index 00000000..315ba759 --- /dev/null +++ b/gnm/shape/demos/web/demo.css @@ -0,0 +1,236 @@ +html, +body { + height: 100%; + margin: 0; + padding: 0; + overflow: hidden; /* Prevents scroll bars if the image overflows slightly */ +} + +body { + background-size: cover; + background-position: center; + background-repeat: no-repeat; + color: #fff; + font-family: Monospace; + font-size: 13px; + line-height: 24px; + overscroll-behavior: none; +} + +.content { + position: relative; + color: #fff; + font-family: Monospace; + font-size: 13px; + line-height: 24px; + overscroll-behavior: none; +} + +a { + color: #ff0; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +button { + cursor: pointer; + text-transform: uppercase; +} + +#info { + position: absolute; + top: 0px; + width: 100%; + padding: 10px; + box-sizing: border-box; + text-align: center; + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + pointer-events: none; + z-index: 1; /* TODO Solve this in HTML */ +} + +a, +button, +input, +select { + pointer-events: auto; +} + +.lil-gui { + z-index: 2 !important; /* TODO Solve this in HTML */ +} + +@media all and (max-width: 640px) { + .lil-gui.root { + right: auto; + top: auto; + max-height: 50%; + max-width: 80%; + bottom: 0; + left: 0; + } +} + +#overlay { + position: absolute; + font-size: 16px; + z-index: 2; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + flex-direction: column; + background: rgba(0, 0, 0, 0.7); +} + +#overlay button { + background: transparent; + border: 0; + border: 1px solid rgb(255, 255, 255); + border-radius: 4px; + color: #ffffff; + padding: 12px 18px; + text-transform: uppercase; + cursor: pointer; +} + +#notSupported { + width: 50%; + margin: auto; + background-color: #f00; + margin-top: 20px; + padding: 10px; +} + +header { + position: fixed; + top: 0px; + left: 0px; + width: 100%; + padding: 0.8rem 1.6rem; + color: rgb(255, 255, 255); + mix-blend-mode: exclusion; + display: flex; + align-items: center; + justify-content: space-between; + z-index: 101; + pointer-events: none; +} + +.logo { + font-family: 'Google Sans Text', system-ui, sans-serif; + font-size: 1.8rem; + font-style: normal; + font-weight: 500; + letter-spacing: -0.018rem; + transform: translate(0px, 0.05rem); +} + +.logo-link { + display: flex; + align-items: center; + gap: 0.4rem; + pointer-events: all; + flex: 0.55 1 0%; +} + +.logo-text { + font-family: 'Google Sans Text', system-ui, sans-serif; + color: white; + font-size: 1.8rem; + font-style: normal; + font-weight: 500; + letter-spacing: -0.018rem; + transform: translate(0px, 0.05rem); +} + +.logo-icon { + color: white; + width: 1.6rem; + height: 1.6rem; + margin-left: 0.2rem; + margin-right: 0.2rem; +} + +.slogan { + flex: 0.25 1 0%; + font-family: 'Google Sans Mono', system-ui, sans-serif; + font-weight: 400; + font-size: 1rem; + line-height: 120%; + letter-spacing: 0.06rem; + display: block; +} + +#XRButtonWrapper { + display: flex; + flex-direction: column; + justify-content: center; + background-color: transparent; + color: white; + padding: 10px 20px; + border: none; + cursor: pointer; + font-size: 2rem; + border-radius: 1rem; + display: flex; + align-items: center; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 30rem; + height: 16rem; + gap: 1rem; +} + +.XRButton { + color: white; + background-color: #e74c3c; + border: 0; + flex-grow: 1; + font: 'normal sans-serif'; + font-size: 2rem; + width: 100%; + cursor: pointer; + border-radius: 3rem; +} + +.XRButton svg { + margin-right: 8px; /* Space between the icon and text */ +} + +.XRButton:hover { + background-color: #c0392b; /* Darken the background on hover */ +} + +#xrlogo { + display: inline-block; + width: 3rem; + height: 3rem; + margin-right: 0.8rem; + background-image: url('xrlogo.webp'); + background-size: contain; /* Ensures the image fits within the defined size */ + background-repeat: no-repeat; + vertical-align: middle; /* Aligns with the text */ +} + +.background-image { + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: -1; /* Sends the background behind the content */ + background-size: cover; /* Keeps aspect ratio and covers the screen */ + background-position: center; +} diff --git a/gnm/shape/demos/web/gnm.css b/gnm/shape/demos/web/gnm.css new file mode 100644 index 00000000..c2f00240 --- /dev/null +++ b/gnm/shape/demos/web/gnm.css @@ -0,0 +1,341 @@ +/* GNM Head Explorer — control panel styling. */ + +#gnm-panel { + position: absolute; + top: 12px; + right: 12px; + width: 340px; + max-height: calc(100% - 24px); + display: flex; + flex-direction: column; + z-index: 5; + color: #e8ecf4; + color-scheme: dark; /* dark native widgets: select popups, sliders, checks */ + font-family: + 'Inter', + system-ui, + -apple-system, + sans-serif; + font-size: 12.5px; + line-height: 1.45; + background: rgba(13, 17, 26, 0.86); + backdrop-filter: blur(14px); + -webkit-backdrop-filter: blur(14px); + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 14px; + box-shadow: 0 12px 40px rgba(0, 0, 0, 0.45); + overflow: hidden; + user-select: none; +} + +#gnm-panel.collapsed { + width: 230px; +} + +#gnm-panel.collapsed #gnm-tabs, +#gnm-panel.collapsed #gnm-pages, +#gnm-panel.collapsed #gnm-status, +#gnm-panel.collapsed .gnm-footer, +#gnm-panel.collapsed .gnm-header p { + display: none; +} + +#gnm-panel.collapsed .gnm-header { + padding: 8px 12px; +} + +#gnm-panel .gnm-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 12px 14px 8px; +} + +#gnm-panel .gnm-header h1 { + margin: 0; + font-size: 15px; + font-weight: 650; + letter-spacing: 0.02em; + color: #e8ecf4; +} + +#gnm-panel .gnm-header p { + margin: 1px 0 0; + font-size: 11px; + color: #93a0b8; +} + +#gnm-collapse { + width: 26px; + height: 26px; + border-radius: 8px; + border: 1px solid rgba(255, 255, 255, 0.14); + background: rgba(255, 255, 255, 0.06); + color: #e8ecf4; + font-size: 15px; + line-height: 1; + text-transform: none; +} + +#gnm-status { + min-height: 16px; + padding: 0 14px 6px; + font-size: 11px; + color: #4fe0ae; +} + +#gnm-tabs { + display: flex; + gap: 2px; + padding: 0 10px; + border-bottom: 1px solid rgba(255, 255, 255, 0.08); +} + +#gnm-tabs button { + flex: 1; + padding: 7px 2px; + font-size: 11px; + border: none; + border-bottom: 2px solid transparent; + background: none; + color: #93a0b8; + text-transform: none; +} + +#gnm-tabs button.active { + color: #ffffff; + border-bottom-color: #4f8ce0; +} + +#gnm-pages { + overflow-y: auto; + flex: 1; + scrollbar-width: thin; + scrollbar-color: #3a4356 transparent; +} + +.gnm-page { + display: none; + padding: 10px 14px; +} + +.gnm-page.active { + display: block; +} + +.gnm-page section { + margin-bottom: 14px; +} + +.gnm-page h2 { + margin: 0 0 6px; + font-size: 11px; + font-weight: 650; + text-transform: uppercase; + letter-spacing: 0.08em; + color: #8fa0bd; +} + +.gnm-btn-row { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin: 6px 0; +} + +.gnm-btn { + padding: 6px 10px; + border-radius: 8px; + border: 1px solid rgba(255, 255, 255, 0.14); + background: rgba(79, 140, 224, 0.16); + color: #e8ecf4; + font-size: 11.5px; + text-transform: none; +} + +.gnm-btn:hover { + background: rgba(79, 140, 224, 0.34); +} + +.gnm-btn.active { + background: #4f8ce0; + border-color: #4f8ce0; + color: #fff; +} + +.gnm-btn.ghost { + background: none; + border-style: dashed; + color: #93a0b8; + width: 100%; + margin-top: 4px; +} + +.gnm-chips { + display: flex; + flex-wrap: wrap; + gap: 5px; +} + +.gnm-chip { + padding: 4px 9px; + border-radius: 999px; + border: 1px solid rgba(255, 255, 255, 0.16); + background: rgba(255, 255, 255, 0.05); + color: #cfd8e8; + font-size: 11px; + text-transform: none; +} + +.gnm-chip:hover { + background: rgba(79, 224, 174, 0.22); + border-color: rgba(79, 224, 174, 0.6); +} + +.gnm-slider { + display: grid; + grid-template-columns: 64px 1fr 38px; + align-items: center; + gap: 8px; + padding: 2px 0; +} + +.gnm-slider.wide { + grid-template-columns: 64px 1fr 38px; +} + +.gnm-slider span { + color: #aab6ca; + font-size: 11px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.gnm-slider output { + font-size: 10.5px; + color: #7f8ca3; + text-align: right; + font-variant-numeric: tabular-nums; +} + +.gnm-slider input[type='range'] { + width: 100%; + height: 4px; + accent-color: #4f8ce0; +} + +.gnm-slider input[type='range']:disabled { + opacity: 0.35; +} + +.gnm-toggle { + display: flex; + align-items: center; + gap: 8px; + padding: 3px 0; + cursor: pointer; +} + +.gnm-toggle input { + accent-color: #4f8ce0; +} + +.gnm-selects { + display: flex; + gap: 10px; + margin-bottom: 6px; +} + +.gnm-selects label { + display: flex; + flex-direction: column; + gap: 3px; + flex: 1; + font-size: 11px; + color: #93a0b8; +} + +.gnm-selects select { + background: rgba(255, 255, 255, 0.07); + color: #e8ecf4; + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 7px; + padding: 5px 6px; + font-size: 12px; +} + +.gnm-selects select option { + background: #131826; + color: #e8ecf4; +} + +.gnm-hint { + font-size: 11px; + color: #7f8ca3; + font-style: italic; +} + +#gnm-panel .gnm-footer { + padding: 8px 14px 10px; + border-top: 1px solid rgba(255, 255, 255, 0.08); + font-size: 10.5px; + color: #7f8ca3; +} + +#gnm-panel .gnm-footer a { + color: #4fa3e0; +} + +/* Loading overlay */ +#gnm-loading { + position: absolute; + inset: 0; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + gap: 14px; + z-index: 20; + background: radial-gradient(circle at 50% 40%, #141a26, #07090e); + color: #e8ecf4; + font-family: 'Inter', system-ui, sans-serif; +} + +#gnm-loading h1 { + margin: 0; + font-size: 22px; + font-weight: 650; +} + +#gnm-loading p { + margin: 0; + color: #93a0b8; + font-size: 13px; +} + +#gnm-loading .bar { + width: 260px; + height: 6px; + border-radius: 3px; + background: rgba(255, 255, 255, 0.1); + overflow: hidden; +} + +#gnm-loading .bar div { + height: 100%; + width: 0%; + border-radius: 3px; + background: linear-gradient(90deg, #4f8ce0, #4fe0ae); + transition: width 0.15s ease-out; +} + +@media (max-width: 720px) { + #gnm-panel { + width: min(92vw, 340px); + max-height: 55%; + top: auto; + bottom: 10px; + right: 4vw; + } +} diff --git a/gnm/shape/demos/web/index.html b/gnm/shape/demos/web/index.html new file mode 100644 index 00000000..89facdb0 --- /dev/null +++ b/gnm/shape/demos/web/index.html @@ -0,0 +1,55 @@ + + + + GNM Head Explorer | XR Blocks + + + + + + + + + + +
+

GNM Head Explorer

+
+

Preparing…

+
+ + + diff --git a/gnm/shape/demos/web/main.js b/gnm/shape/demos/web/main.js new file mode 100644 index 00000000..3f0e64e7 --- /dev/null +++ b/gnm/shape/demos/web/main.js @@ -0,0 +1,85 @@ +import 'xrblocks/addons/simulator/SimulatorAddons.js'; + +import * as uikit from '@pmndrs/uikit'; +import * as xb from 'xrblocks'; + +import {GNMControls} from './GNMControls.js'; +import {GNMHeadModel} from './GNMModel.js'; +import {GNMScene} from './GNMScene.js'; +import {GNMSamplers} from './SemanticSampler.js'; + +// The GNM model weights are hosted on a CDN (pinned to a commit) rather than +// checked into the repo, since the head model alone is ~35 MB. They are the +// web export of gnm/shape/data (see tools/export_gnm_web.py). +const CDN_ASSETS_BASE = + 'https://rawcdn.githack.com/xrblocks/assets-gnm/8480138a42ae746a2f7c9808a51ef23af7648653'; +// Local copies for offline development: generate them from a GNM checkout with +// python tools/export_gnm_web.py --gnm_root=/path/to/gnm --out_dir=./assets +// then load them with the toggle below. +const LOCAL_ASSETS_BASE = './assets'; + +// DEBUG TOGGLE — flip to true to load the model from local ./assets instead of +// the public CDN. Can also be overridden per-load without editing code via the +// URL query: ?localAssets=1 (local) or ?localAssets=0 (CDN). +const USE_LOCAL_ASSETS = false; + +const useLocalAssets = xb.getUrlParamBool('localAssets', USE_LOCAL_ASSETS); +const ASSETS_BASE = useLocalAssets ? LOCAL_ASSETS_BASE : CDN_ASSETS_BASE; +const HEAD_MODEL_URL = `${ASSETS_BASE}/gnm_head_web.bin`; +const SAMPLERS_URL = `${ASSETS_BASE}/gnm_samplers_web.bin`; +console.info( + `[GNM] loading model assets from ${useLocalAssets ? 'LOCAL' : 'CDN'}: ${ASSETS_BASE}` +); + +function setLoadingProgress(fraction, label) { + const bar = document.querySelector('#gnm-loading .bar div'); + const text = document.querySelector('#gnm-loading p'); + if (bar) bar.style.width = `${Math.round(fraction * 100)}%`; + if (label && text) text.textContent = label; +} + +async function start() { + try { + let modelProgress = 0; + let samplerProgress = 0; + const report = () => + setLoadingProgress( + modelProgress * 0.92 + samplerProgress * 0.08, + 'Downloading GNM model data…' + ); + const [model, samplers] = await Promise.all([ + GNMHeadModel.load(HEAD_MODEL_URL, (p) => { + modelProgress = p; + report(); + }), + GNMSamplers.load(SAMPLERS_URL, (p) => { + samplerProgress = p; + report(); + }), + ]); + setLoadingProgress(1, 'Starting XR Blocks…'); + + const options = new xb.Options(); + options.enableUI(); + options.uikit.enable(uikit); // registers the uikit renderer for uiblocks + options.enableReticles(); + options.setAppTitle('GNM Head Explorer'); + options.xrButton.startText = ' EXPLORE IN XR'; + options.xrButton.endText = ' EXIT XR'; + + const scene = new GNMScene(model, samplers); + xb.add(scene); + window.gnm = {model, samplers, scene}; + + const controls = new GNMControls(model, samplers, scene); + controls.attach(); + document.getElementById('gnm-loading')?.remove(); + + await xb.init(options); + } catch (error) { + setLoadingProgress(0, `Failed to load: ${error.message}`); + console.error(error); + } +} + +document.addEventListener('DOMContentLoaded', start); diff --git a/gnm/shape/demos/web/teaser/teaser.webm b/gnm/shape/demos/web/teaser/teaser.webm new file mode 100644 index 0000000000000000000000000000000000000000..88177c065bad315994589b94d4ff36a361be5f4f GIT binary patch literal 314094 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

ALT((2WwcA;IF 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

u`5w1{v@8@WZ1jZ%j#HT&M2 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 0) + if has_pose_correctives: + correctives_q, correctives_scales = quantize_int8(correctives) + + # ---- Validate quantization error. ---------------------------------------- + rng = np.random.default_rng(0) + coeff_id = rng.normal(size=(16, identity_dim)).astype(np.float32) + coeff_ex = rng.normal(size=(16, expression_dim)).astype(np.float32) + exact = coeff_id @ identity_basis + coeff_ex @ expression_basis + approx = ((coeff_id * identity_scales) @ identity_q.astype(np.float32) + + (coeff_ex * expression_scales) @ expression_q.astype(np.float32)) + err = np.abs(exact - approx) + print(f'Bind-pose int8 error: max {err.max() * 1000:.4f} mm, ' + f'mean {err.mean() * 1000:.5f} mm') + + if has_pose_correctives: + pose_features = rng.uniform(-0.6, 0.6, size=(16, 9 * num_joints)).astype( + np.float32) + exact_pc = pose_features @ correctives + approx_pc = (pose_features * correctives_scales) @ correctives_q.astype( + np.float32) + err_pc = np.abs(exact_pc - approx_pc) + print(f'Pose-correctives int8 error: max {err_pc.max() * 1000:.4f} mm, ' + f'mean {err_pc.mean() * 1000:.5f} mm') + else: + print('Pose-correctives regressor is all zeros; skipping export.') + + # ---- Per-vertex classification maps. ------------------------------------- + groups = d['vertex_groups'] + group_names = [str(n) for n in d['vertex_group_names']] + + component_names = [str(n) for n in d['mesh_component_names']] + component_weights = group_weight_matrix(groups, group_names, component_names) + component_id = component_weights.argmax(axis=0).astype(np.uint8) + + material_id = np.zeros(num_vertices, dtype=np.uint8) + for material_index, material in enumerate(MATERIALS): + if material == 'skin': + continue + weights = group_weight_matrix(groups, group_names, [material])[0] + material_id[weights > 1e-4] = material_index + + # The sclera/iris/pupil labels live on the interior eye layer; the visible + # surface is the transparent cornea shell (eye_exteriors). Project the + # interior colors onto the shell so eyes render with sclera + iris. + template = d['template_vertex_positions'] + exterior = np.where( + group_weight_matrix(groups, group_names, ['eye_exteriors'])[0] > 1e-4 + )[0] + interior = np.where( + group_weight_matrix(groups, group_names, ['eye_interiors'])[0] > 1e-4 + )[0] + if len(exterior) and len(interior): + d2 = ((template[exterior][:, None, :] - + template[interior][None, :, :]) ** 2).sum(-1) + material_id[exterior] = material_id[interior[d2.argmin(axis=1)]] + + region_names = [n for n in group_names if n.endswith('_region')] + region_weights = group_weight_matrix(groups, group_names, region_names) + region_max = region_weights.max(axis=0) + region_id = region_weights.argmax(axis=0).astype(np.uint8) + region_id[region_max <= 1e-4] = 255 + + # ---- Landmarks. ----------------------------------------------------------- + landmark_rows = [] + with open(landmarks_path, 'r', encoding='utf-8') as f: + for line in f: + parts = line.split() + if len(parts) >= 6: + landmark_rows.append([float(x) for x in parts[:6]]) + landmarks = np.array(landmark_rows, dtype=np.float64) + landmark_indices = landmarks[:, 0::2].astype(np.uint16) + landmark_weights = landmarks[:, 1::2].astype(np.float32) + print(f'Landmarks: {landmark_indices.shape[0]}') + + # ---- Write the model container. ------------------------------------------ + writer = ContainerWriter() + writer.add('template', d['template_vertex_positions'].astype(np.float32)) + writer.add('triangles', d['triangles'].astype(np.uint16)) + writer.add('quads', d['quads'].astype(np.uint16)) + writer.add('template_joints', + d['template_joint_positions'].astype(np.float32)) + writer.add('joint_parents', d['joint_parent_indices'].astype(np.int32)) + writer.add('skinning_weights', d['skinning_weights'].astype(np.float32)) + writer.add('joint_identity_basis', + d['joint_identity_basis'].astype(np.float32)) + writer.add('identity_basis', identity_q) + writer.add('identity_scales', identity_scales) + writer.add('expression_basis', expression_q) + writer.add('expression_scales', expression_scales) + if has_pose_correctives: + writer.add('pose_correctives', correctives_q) + writer.add('pose_correctives_scales', correctives_scales) + writer.add('component_id', component_id) + writer.add('material_id', material_id) + writer.add('region_id', region_id) + writer.add('landmark_indices', landmark_indices) + writer.add('landmark_weights', landmark_weights) + + meta = { + 'model': 'GNM Head', + 'gnmVersion': str(d['version']), + 'variant': str(d['variant']), + 'numVertices': int(num_vertices), + 'numJoints': int(num_joints), + 'identityDim': int(identity_dim), + 'expressionDim': int(expression_dim), + 'identityNames': [str(n) for n in d['identity_names']], + 'expressionNames': [str(n) for n in d['expression_names']], + 'jointNames': [str(n) for n in d['joint_names']], + 'componentNames': component_names, + 'materialNames': MATERIALS, + 'regionNames': [re.sub('_region$', '', n) for n in region_names], + 'bboxMin': [float(x) for x in template.min(axis=0)], + 'bboxMax': [float(x) for x in template.max(axis=0)], + 'hasPoseCorrectives': has_pose_correctives, + } + writer.write(os.path.join(args.out_dir, 'gnm_head_web.bin'), meta) + + # ---- Semantic sampler decoders. ------------------------------------------ + sampler_writer = ContainerWriter() + sampler_meta = {} + specs = [ + ('identity', 'identity_decoder_model.h5', GENDERS + ETHNICITIES), + ('expression', 'expression_decoder_model.h5', EXPRESSION_CLASSES), + ] + for key, filename, labels in specs: + layers = load_keras_mlp(os.path.join(sampler_dir, filename)) + layer_meta = [] + for i, layer in enumerate(layers): + writer_key_w = f'{key}_w{i}' + writer_key_b = f'{key}_b{i}' + sampler_writer.add(writer_key_w, layer['kernel']) + sampler_writer.add(writer_key_b, layer['bias']) + layer_meta.append({ + 'weights': writer_key_w, + 'bias': writer_key_b, + 'activation': layer['activation'], + 'inputDim': int(layer['kernel'].shape[0]), + 'outputDim': int(layer['kernel'].shape[1]), + }) + condition_dim = len(labels) + latent_dim = layer_meta[0]['inputDim'] - condition_dim + sampler_meta[key] = { + 'latentDim': latent_dim, + 'conditionDim': condition_dim, + 'labels': labels, + 'layers': layer_meta, + } + # Smoke test: decode a zero latent with the first class. + x = np.zeros((1, layer_meta[0]['inputDim']), dtype=np.float32) + x[0, latent_dim] = 1.0 + out = run_mlp(layers, x) + print(f'{key} decoder: latent {latent_dim} + {condition_dim} classes -> ' + f'{out.shape[1]} params (zero-latent output range ' + f'[{out.min():.3f}, {out.max():.3f}])') + + sampler_meta['identity']['genders'] = GENDERS + sampler_meta['identity']['ethnicities'] = ETHNICITIES + sampler_writer.write( + os.path.join(args.out_dir, 'gnm_samplers_web.bin'), sampler_meta) + + +if __name__ == '__main__': + main() diff --git a/gnm/shape/demos/web/tools/reference_case.json b/gnm/shape/demos/web/tools/reference_case.json new file mode 100644 index 00000000..816268ec --- /dev/null +++ b/gnm/shape/demos/web/tools/reference_case.json @@ -0,0 +1,74 @@ +{ + "sampleVertexIndices": [ + 0, + 1234, + 5678, + 9000, + 17820 + ], + "sampleVertices": [ + [ + 0.07524014151191177, + 0.132701584213881, + 0.04278368914796994 + ], + [ + 0.07066148681726514, + 0.2763427407195387, + 0.1334917336734655 + ], + [ + 0.07264009026446368, + 0.21735470224169007, + 0.07959980053316922 + ], + [ + -0.03549145619356031, + 0.1885630748765137, + 0.05491466889200118 + ], + [ + 0.009579310257967339, + 0.28682860020996653, + 0.12624630734082742 + ] + ], + "meanAbs": 0.1284833692321981, + "jointsWorld": [ + [ + 0.009713157311082021, + 0.11783295185559228, + 0.023818299447652853 + ], + [ + 0.022748622893714755, + 0.18772338394274307, + 0.05506041872352304 + ], + [ + 0.0743935550256453, + 0.28198126237605065, + 0.11654204803710386 + ], + [ + 0.02219130736267548, + 0.28373561225958843, + 0.1328420499877698 + ] + ], + "landmark0": [ + -0.039455113326315926, + 0.2715785058492075, + 0.0954536817877415 + ], + "landmark33": [ + 0.05599806164359592, + 0.2334553728585174, + 0.15864090428228947 + ], + "landmark67": [ + 0.034890903048064414, + 0.20489460443296154, + 0.15772462971053758 + ] +} \ No newline at end of file From c7e9b046119fcd821daf1b8c378e3561c9b7ede3 Mon Sep 17 00:00:00 2001 From: Ruofei Du Date: Sat, 18 Jul 2026 19:54:30 -0700 Subject: [PATCH 2/2] fix(lint): remove unused variable 'i' in export_gnm_web.py --- gnm/shape/demos/web/tools/export_gnm_web.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gnm/shape/demos/web/tools/export_gnm_web.py b/gnm/shape/demos/web/tools/export_gnm_web.py index fded05a7..e285fa06 100644 --- a/gnm/shape/demos/web/tools/export_gnm_web.py +++ b/gnm/shape/demos/web/tools/export_gnm_web.py @@ -127,7 +127,7 @@ def load_keras_mlp(path): def run_mlp(layers, x): - for i, layer in enumerate(layers): + for layer in layers: x = x @ layer['kernel'] + layer['bias'] if layer['activation'] == 'relu': x = np.maximum(x, 0.0)