threejs · mengto — скилл для Claude Code: 3D-сцены на Three.js
Помогает агенту собирать и отлаживать интерактивные 3D-сцены на Three.js: сцена, камера, свет, загрузка glTF, контролы и производительность.
npx skills add MengTo/Skills --skill threejs -a claude-codeЧто делает threejs
Скилл включается, когда вы делаете на веб-странице настоящую 3D-графику, а не фоновые эффекты: вращающийся товар, интерактивную hero-сцену, шейдеры, визуализацию данных. Агент держит в голове базовую модель Three.js — Scene, Camera, WebGLRenderer, Mesh из геометрии и материала, источники света — и цикл отрисовки через requestAnimationFrame.
Внутри есть готовые рецепты. Минимальный вращающийся куб: создание рендерера с antialias и alpha, перспективная камера, MeshStandardMaterial, AmbientLight и DirectionalLight, обработчик resize с setPixelRatio(Math.min(window.devicePixelRatio, 2)) и updateProjectionMatrix(). Отдельный пункт — уважать prefers-reduced-motion: reduce и рисовать статичный кадр без цикла.
Скилл отдельно предупреждает про утечки: в SPA после смены маршрута нужно звать geometry.dispose(), material.dispose(), texture.dispose() и renderer.dispose(), снимать слушатели и отменять RAF. Иначе вкладка падает. Ещё он советует не задирать pixel ratio на мобильных и не грузить тяжёлые текстуры — отсюда тормоза на старте. Перед работой агент спросит, декоративная это сцена или функциональный просмотрщик, какие целевые устройства и в каком формате лежат ассеты.
Какие задачи решает
- собрать интерактивную 3D-сцену с нуля без копания в документации
- починить растянутый рендер после изменения размера окна
- найти утечку WebGL-ресурсов после перехода между маршрутами в SPA
- загрузить модель в glTF и подключить OrbitControls
- уложиться в бюджет по производительности на мобильных GPU
Примеры запросов агенту
- Сделай вращающийся куб на Three.js в canvas #c, с обработкой resize и prefers-reduced-motion
- Загрузи модель через GLTFLoader, добавь OrbitControls и dispose при размонтировании компонента
- Почему после смены роута падает вкладка? Проверь dispose геометрий, материалов и рендерера
Как установить threejs
1Через Skills CLI (Vercel)
npx skills add MengTo/Skills --skill threejs -a claude-code2Вручную: положить файлы
~/.claude/skills/threejs/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/threejs/
1Через Skills CLI (Vercel)
npx skills add MengTo/Skills --skill threejs -a codex2Вручную: положить файлы
.agents/skills/threejs/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add MengTo/Skills --skill threejs -a cursor2Вручную: положить файлы
.cursor/skills/threejs/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install MengTo/Skills threejs2Вручную: положить файлы
.github/skills/threejs/SKILL.md1Через Skills CLI (Vercel)
npx skills add MengTo/Skills --skill threejs -a gemini-cli2Командой платформы
gemini skills install https://github.com/MengTo/Skills --path agent-skills/web-design/threejsВручную: положить файлы
.devin/skills/threejs/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add MengTo/Skills --skill threejs -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора148
Другие версии threejs
Похожие
Рядом в теме «Фронтенд и UI»
Всё по теме «Фронтенд и UI» →Вопросы о threejs
Как установить threejs в Claude?
Выполните npx skills add MengTo/Skills --skill threejs -a claude-code. Скилл окажется в ~/.claude/skills/threejs/SKILL.md.
Что делает скилл threejs?
Подсказывает агенту, как строить и отлаживать 3D-сцены на Three.js: сцена, камера, рендерер, свет и материалы, загрузка glTF, контролы, очистка ресурсов.
С какими платформами работает threejs?
Claude, Codex, Cursor, GitHub Copilot, Gemini CLI и OpenCode. Для каждой свой способ установки, например npx skills add MengTo/Skills --skill threejs -a cursor.
Исходный текст
SKILL.md · MIT
---
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
```js
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
© MengTo · MIT · MengTo/Skills