Why
The advanced dynamic component service does not yet provide a reusable parametric human-head component. Google's GNM browser demo already performs the complete GNM Head forward pass and semantic sampling in client-side JavaScript, but the upstream demo also owns its camera, lighting, controls, desktop/XR panels, keyboard shortcuts, animation tours, inspection overlays, and export tools. Those scene and application concerns do not belong inside a regional-scene component.
The reusable capability is the generated head mesh itself: load the published GNM binary containers on demand, compute identity and expression locally, expose a small editor-friendly parameter surface, and return one transformable Three.js object to the host scene.
What Changes
- Add a new
gnmHeadComponent derived from the Apache-2.0 google/xrblocks GNM browser implementation.
- Render a lightweight component-local Three.js loading placeholder immediately, then load the GNM head container from
https://opensource.cdn.icegl.cn/bin/gnm/gnm_head_web.bin after mount without blocking dynamic component import.
- Render the neutral head as soon as the main container is ready, then load
gnm_samplers_web.bin separately so the smaller semantic sampler does not delay first render.
- Expose compact identity, expression, pose, material, visibility, and seed controls as flat Vue props and
src/dcsConfig.ts entries, with default identity strength 0.58 and expression strength 0.68.
- Keep skin always present and expose skin-only opacity instead of whole-head opacity or a separate skin-visibility switch.
- Cancel in-flight requests and ignore stale asynchronous results when URLs change or the component unmounts.
- Keep the upstream DOM/XR UI, camera, controls, lights, background, animation tours, landmarks, skeleton, OBJ export, and keyboard handling out of the component.
- Add a component preview asset and upstream Apache-2.0 attribution.
Capabilities
New Capabilities
gnm-head-component: Provide a lazily loaded, deterministic, browser-only GNM Head mesh that can be configured and transformed as a normal object inside the existing host scene.
Modified Capabilities
Impact
- Affected code:
src/components/gnmHeadComponent/
src/dcsConfig.ts
public/preview/gnmHeadComponent.svg
openspec/changes/add-gnm-head-component/
- APIs:
- Adds one dynamic component with resource URLs, semantic seed/strength, basic pose, skin-only opacity, material, and non-skin anatomy visibility props.
- Dependencies:
- Reuses browser APIs, Vue, tresjs, and Three.js; no new runtime or server dependency is required.
- Network:
- The component downloads approximately 35 MB for the head and 2.7 MB for semantic samplers from the configured CDN URLs after mount.
- Systems:
- Adds one registry entry without modifying generic preview or editor infrastructure.
- Rollback strategy:
- Remove the registry entry, component directory, preview asset, and this OpenSpec change.