
Three.js
Skill用 Three.js 构建或调试网页 3D 场景:场景、相机、渲染器、光照与材质,GLTF 加载与控制器,以及限制设备像素比、处理窗口缩放、释放 WebGL 资源等性能要点,减少动态效果时只渲染静帧。
MengTo/Skills · agent-skills/web-design/threejs7.2k
README
name: threejs
description: Use when building or debugging interactive 3D scenes on the web with Three.js (scene/camera/renderer, lights/materials, GLTF loading, controls, performance). Helpful for designers shipping 3D UI moments.
Three.js — WebGL 3D Scenes Skill
When to use
- Real 3D: product spins, interactive hero scenes, shaders/material effects, 3D data viz
- You need full control beyond “background effects”
- You can budget time for asset pipeline + performance tuning
Core mental model
- Create:
Scene(root graph)Camera(Perspective/Orthographic)Renderer(WebGLRenderer)Mesh=Geometry+Material- Lights (if using non-unlit materials)
- Render loop:
requestAnimationFrame(animate)- Update time-based animations, controls, mixers, then
renderer.render(scene, camera)
Key APIs/patterns
- Setup:
const renderer = new THREE.WebGLRenderer({ canvas, antialias, alpha })renderer.setSize(width, height, false)renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2))
- Camera:
camera.aspect = width / height; camera.updateProjectionMatrix()
- Scene graph:
scene.add(object)/object.position/rotation/scale
- Loading assets:
GLTFLoader(models),TextureLoader(images),DRACOLoader(compressed glTF)
- Controls (common):
OrbitControls(debug/product),PointerLockControls(FPS), custom pointer handlers
- Cleanup (important in SPAs):
geometry.dispose(),material.dispose(),texture.dispose(),renderer.dispose()- Remove event listeners; cancel RAF.
Common pitfalls
- Not handling resize → stretched/cropped rendering
- Too high devicePixelRatio → mobile GPU meltdown
- Leaking WebGL resources (not disposing) → crashes after route changes
- Loading huge textures/models → slow start; use compressed textures, Draco/KTX2, smaller maps
- Using too many lights/shadows → expensive; fake lighting with baked textures when possible
Quick recipes
1) Minimal spinning cube
import * as THREE from "three";
const canvas = document.querySelector("#c");
const renderer = new THREE.WebGLRenderer({ canvas, antialias: true, alpha: true });
const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(45, 1, 0.1, 100);
camera.position.set(0, 0, 4);
const geom = new THREE.BoxGeometry(1, 1, 1);
const mat = new THREE.MeshStandardMaterial({ color: 0x7c3aed });
const mesh = new THREE.Mesh(geom, mat);
scene.add(mesh);
scene.add(new THREE.AmbientLight(0xffffff, 0.8));
const dir = new THREE.DirectionalLight(0xffffff, 0.8);
dir.position.set(2, 2, 2);
scene.add(dir);
function resize() {
const w = canvas.clientWidth;
const h = canvas.clientHeight;
renderer.setSize(w, h, false);
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
camera.aspect = w / h;
camera.updateProjectionMatrix();
}
window.addEventListener("resize", resize);
resize();
function animate(t) {
mesh.rotation.y = t * 0.0006;
renderer.render(scene, camera);
requestAnimationFrame(animate);
}
requestAnimationFrame(animate);
2) Respect reduced motion
- If
prefers-reduced-motion: reduce, render a still frame (no RAF) or slow updates.
What to ask the user
- Is this decorative (hero) or functional 3D (product viewer)?
- Target devices: mobile? older iPhones?
- Asset format availability (glTF, HDRI, textures) and file size constraints
- Accessibility/reduced motion requirements
相關資源

WebGL Landing Steering
Skill在制作以 WebGL 为主视觉的落地页前先定方向:按品牌调性与页面类型在四种视觉路线中选一种,过信息、性能、无障碍、稳定性四道关,先做静态降级再增强,输出推荐路线、视觉规格、技术栈与构建顺序。
MengTo/Skills7.2k
Three.js Post-Processing
SkillThree.js 后期处理参考:用 EffectComposer 串联渲染通道,加入泛光、景深、调色、模糊与辉光等屏幕效果,以及编写自定义的屏幕空间着色器,附代码示例。
CloudAI-X/threejs-skills4k
Three.js Lighting
SkillThree.js 光照参考:环境光、半球光、平行光、点光源、聚光灯、面光源的用法与开销对比,阴影配置,基于图像的环境光照(IBL),以及光照性能优化,附代码示例。
CloudAI-X/threejs-skills4k
Three.js Fundamentals
SkillThree.js 入门参考:创建场景、相机与 WebGLRenderer,Object3D 层级、坐标系与变换,渲染循环与窗口缩放处理,附可直接运行的代码示例,适合从零搭建网页 3D 场景。
CloudAI-X/threejs-skills4k
Three.js Geometry
SkillThree.js 几何体参考:立方体、球体、圆柱、圆环等内置形状的参数,用 BufferGeometry 按顶点构建自定义网格,以及用实例化渲染大量相同物体以提升性能,附代码示例。
CloudAI-X/threejs-skills4k
Three.js Materials
SkillThree.js 材质参考:对比 Basic、Lambert、Phong、Standard、Physical、Toon 等材质的用途与光照方式,PBR 材质参数,自定义 ShaderMaterial,以及材质性能优化,附代码示例。
CloudAI-X/threejs-skills4k