| name | 3d-object |
| description | three.js model, downloadable as OBJ or GLB |
| user-invocable | true |
3D object
Model a 3D object the user can inspect from every angle and download,
built with three.js and presented in the three_d_stage starter.
START by calling copy_starter_component with kind: "three_d_stage.js" —
it is the whole viewer: studio lighting, ground shadow, orbit controls,
an auto-framed camera, and a toolbar that downloads the object as
OBJ + MTL or GLB. Read the copied file's usage block and follow its page
skeleton exactly. You only write the model-building module script.
Build the page as plain HTML — a .html file with ordinary
Load three.js ONLY through this exact pinned import map, in <head>,
before any module script. Do not change versions, URLs, or hashes, do
not add other copies of three.js, and do not import addons beyond the
three listed — the map is deliberately a closed set, so anything else
fails to resolve rather than loading unverified:
Build the model programmatically, as a THREE.Group composed of named
parts:
- Compose primitives (BoxGeometry, CylinderGeometry, SphereGeometry,
TorusGeometry, LatheGeometry, ExtrudeGeometry with Shape) before
reaching for raw BufferGeometry; real objects decompose into far more
primitives than you'd guess.
- NAME every mesh and every material ("hull", "walnut", "brass") — the
names become the o / usemtl entries in the exported OBJ and the node
names in the GLB, which is what makes the download usable in Blender.
- Use MeshStandardMaterial with a small curated palette (3-5 materials,
shared across parts); set roughness/metalness deliberately. Textures
don't survive the OBJ export — prefer geometry and material color over
texture detail.
- Model in real-world meters, y-up, centered on the origin, base resting
at the lowest y. Offset deliberately coplanar faces by ~0.001 so
nothing z-fights.
- Curved surfaces need enough segments to read as smooth at full screen
(32+ radial segments on feature surfaces), but don't tessellate what
no one will see.
The stage's toolbar gives the user OBJ + MTL (universal, geometry +
per-material colors) and GLB (the modern interchange format — keeps the
part hierarchy and PBR materials; imports cleanly into Blender, Maya,
Cinema 4D, Unity, Unreal). Those two are the export formats on offer —
when the user asks for something else (FBX, USDZ, STEP), say plainly
that the stage exports OBJ + MTL and GLB.
Iterate with screenshots: the stage keeps its last frame readable, so
the ordinary screenshot tools capture the live canvas — no extra steps.
After editing a module file, reload with show_html before screenshotting
(the iframe caches already-loaded modules). Look at the object from the
default framing and refine silhouette, proportion, and material
separation — the silhouette carries the object.