mcpField
T
three-js

three-js

github.com/jbmanllrDevelopment1168 installsUpdated 39w ago
Repository

About three-js

three-js is a reference skill for developers building with vanilla Three.js. Its task-oriented guides cover core 3D concepts, visuals, interaction, assets, performance, and advanced topics including WebGPU.

Key features

  1. 01Scene, camera, and geometry reference
  2. 02Materials, textures, and lighting guides
  3. 03Animation, interaction, and controls patterns
  4. 04Model loading and post-processing
  5. 05Performance, physics, and WebGPU topics

Use cases

  1. 01Setting up a Three.js scene and renderer
  2. 02Implementing animation and object selection
  3. 03Loading GLTF models and environment maps
  4. 04Looking up WebGPU or performance techniques

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/jbmanllr/agent-skills --skill three-js

After installing, type/three-jsin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

README.md
references/
01-fundamentals.md
02-geometry.md
03-materials.md
04-textures.md
05-lighting.md
06-cameras.md
07-loaders.md
08-animation.md
09-interaction.md
10-controls.md
11-shaders.md
12-postprocessing.md
13-math.md
14-performance.md
15-node-materials.md
16-physics-vr.md
17-webgpu.md
18-patterns.md

Details

From the project README

Three.js Complete Reference (Vanilla)

React Three Fiber users: This reference is for vanilla Three.js. For R3F/Drei patterns, use the r3f-best-practices skill. However, understanding Three.js concepts here helps when working with R3F since R3F is a React renderer for Three.js.

Quick Start

import * as THREE from 'three';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer({ antialias: true });

renderer.setSize(window.innerWidth, window.innerHeight);
renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
document.body.appendChild(renderer.domElement);

const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);

scene.add(new THREE.AmbientLight(0xffffff, 0.5));
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(5, 5, 5);
scene.add(light);

camera.position.z = 5;

function animate() {
  requestAnimationFrame(animate);
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.01;
  renderer.render(scene, camera);
}
animate();

Reference Index

Load the appropriate reference file based on task:

Core Foundation
ReferenceUse When
references/01-fundamentals.mdScene setup, renderer config, Object3D hierarchy, coordinate systems
references/02-geometry.mdCreating shapes, BufferGeometry, instancing, points, lines
references/06-cameras.mdCamera types, frustum, viewport, projection
references/13-math.mdVector3, Matrix4, Quaternion, Euler, Color, MathUtils
Visual Appearance
ReferenceUse When
references/03-materials.mdPBR materials, shader materials, all material types
references/04-textures.mdTexture loading, UV mapping, render targets, environment maps
references/05-lighting.mdLight types, shadows, IBL, light probes
references/11-shaders.mdCustom GLSL shaders, uniforms, varyings, shader patterns
Motion & Interaction
ReferenceUse When
references/08-animation.mdKeyframe animation, skeletal, morph targets, procedural motion
references/09-interaction.mdRaycasting, selection, drag, coordinate conversion
references/10-controls.mdOrbitControls, FlyControls, PointerLockControls, etc.
Assets
ReferenceUse When
references/07-loaders.mdGLTF, FBX, textures, HDR, Draco compression, async patterns
Effects
ReferenceUse When
references/12-postprocessing.mdBloom, DOF, SSAO, custom effects, EffectComposer
Advanced
ReferenceUse When
references/14-performance.mdOptimization, profiling, LOD, culling, batching
references/15-node-materials.mdTSL (Three Shading Language), node-based materials
references/16-physics-vr.mdPhysics engines, WebXR, VR/AR integration
references/17-webgpu.mdWebGPU renderer, compute shaders, WGSL
references/18-patterns.mdArchitecture patterns, asset management, cleanup, state

Common Patterns Quick Reference

Resize Handler
window.addEventListener('resize', () => {
  camera.aspect = window.innerWidth / window.innerHeight;
  camera.updateProjectionMatrix();
  renderer.setSize(window.innerWidth, window.innerHeight);
});
Cleanup/Dispose
function dispose(obj) {
  obj.traverse(child => {
    if (child.geometry) child.geometry.dispose();
    if (child.material) {
      if (Array.isArray(child.material)) {
        child.material.forEach(m => m.dispose());
      } else {
        child.material.dispose();
      }
    }
  });
}
Animation Loop with Clock
const clock = new THREE.Clock();

function animate() {
  const delta = clock.getDelta();
  const elapsed = clock.getElapsedTime();

  // Use delta for frame-rate independent animation
  mixer?.update(delta);

  requestAnimationFrame(animate);
  renderer.render(scene, camera);
}

Import Patterns

// Core
import * as THREE from 'three';

// Addons (controls, loaders, effects)
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
import { RGBELoader } from 'three/addons/loaders/RGBELoader.js';
import { EffectComposer } from 'three/addons/postprocessing/EffectComposer.js';

// Compression support
import { DRACOLoader } from 'three/addons/loaders/DRACOLoader.js';
import { KTX2Loader } from 'three/addons/loaders/KTX2Loader.js';

Version Notes

This reference targets Three.js r150+ with notes for:

  • WebGPU support (r150+)
  • Node materials / TSL
  • Modern ES module imports

For version-specific APIs, check the Three.js migration guide.

Comments

Markdown supported