Design Principle
Web 3D combines design, assets, runtime, and performance budgets. Agents can safely generate 3D experiences only after governing model source, geometry complexity, texture format, fallback path, and accessible explanation.
Large Theory
The risk in 3D experiences usually is not the Three.js API; it is the unmanaged asset pipeline: unclear model sources, excessive polygon counts, direct 4K/8K textures, missing KTX/Draco/Meshopt processing, blank first paint, overheated mobile devices, no reduced-motion fallback, and canvas content without text alternatives. Treat 3D as a runtime pipeline, not a single visual component.
Small Points
- Define the 3D task first: product inspection, spatial explanation, brand immersion, data expression, gameplay, or decoration. Heavy 3D without a task should be avoided.
- Record source licenses for models, HDRIs, textures, materials, fonts, sounds, and reference images. Three.js MIT license does not cover third-party models or textures.
- Before intake, inspect glTF/GLB files for vertex/triangle count, texture dimensions, animation clips, materials, unused nodes, bounds, and scale.
- Prefer a glTF Transform pipeline: prune, dedup, resize, meshopt/draco, KTX2/UASTC/ETC1S, or WebP depending on target devices.
- Loading states need poster, skeleton, progress, and error recovery. Do not leave first viewport as a black or blank canvas.
- For reduced motion, low power, and no WebGL, provide a static poster, image sequence, ordinary product image, or text explanation. Interaction goals must be keyboard reachable or available through alternate controls.
Design Judgment
3D is a useful enhancement when it clearly helps users understand a product, space, or state, and the task still works on weak devices, no WebGL, slow networks, and reduced motion. It is risky when it hides content, slows first paint, or lacks asset-license records.
Implementation Notes
Create a 3D intake record: purpose, runtime, modelSource, license, textureSource, hdrSource, polyBudget, textureBudget, compression, loader, fallbackPoster, altSummary, controls, reducedMotion, mobileQuality, memoryBudget, and verificationScreenshots. Before implementation, audit models with glTF Transform inspect/optimize or equivalent tooling. Before delivery, verify desktop and mobile screenshots, canvas pixels, load failure, and reduced-motion states.
Counterexamples/Risks
Downloading Sketchfab or Polycam models without license notes, recording the Three.js license as the whole scene license, shipping 8K normal maps in the first viewport, showing only a black canvas when the model fails, hijacking page scroll for zoom, overheating mobile devices, and giving no product information to no-WebGL users.
Case Study
Three.js is MIT licensed. glTF Transform documentation describes reading and writing glTF 2.0, and positions the tooling for bundling, splitting, and optimizing models; its CLI supports resize, WebP, KTX2/Basis, and mesh compression workflows. KTX-Software documentation says repository-specific files generally fall under Apache 2.0, while the repository also includes multiple licenses and special cases. The reusable lesson is that 3D delivery must record runtime library, model, texture, and compression-tool boundaries separately instead of covering the entire asset chain with one open-source label.
Source Links
Three.js License: https://github.com/mrdoob/three.js/blob/dev/LICENSE Three.js: https://threejs.org/ glTF Transform: https://gltf-transform.dev/ glTF Transform GitHub: https://github.com/donmccurdy/glTF-Transform KTX-Software License: https://github.khronos.org/KTX-Software/license.html
Agent Directive
Before generating 3D, output runtime and asset licenses, model/texture budgets, compression strategy, loading/fallback, reduced-motion, and desktop/mobile verification checklist; do not deliver an unverified canvas alone.