skillZs
★ LIVE SKILL TAGS ★
>>> LIVE SKILLS INDEX <<<
* OPEN SOURCE *
NO LOGIN, NO TRACKING
※ REAL INSTALL DATA ※
← back to all skills
impertio-studio/three.js-claude-skill-package124 installs

threejs-agents-scene-builder

Use when composing a complete Three.js scene from scratch or when asked to create a 3D visualization. Provides decision trees for choosing lighting setup, materials, camera type, controls, and post-processing pipeline. Orchestrates other Three.js skills. Keywords: create scene, build 3D, Three.js project, scene setup, visualization, product viewer, 3D application, scene composition, how to start Three.js, new 3D project, basic scene.

How do I install this agent skill?

npx skills add https://github.com/impertio-studio/three.js-claude-skill-package --skill threejs-agents-scene-builder
view source ↗

Is this agent skill safe to install?

  • Gen Agent Trust Hubpass

    This skill is a technical orchestration guide for Three.js scene building. It provides decision trees and best practices for lighting, materials, and camera setups. No security issues were identified.

  • Socketpass

    No alerts

  • Snykpass

    Risk: LOW · No issues

What does this agent skill do?

threejs-agents-scene-builder

Purpose

This skill is an orchestration guide for building complete Three.js scenes. It provides decision trees that map use cases to the correct combination of lighting, materials, camera, controls, environment, and post-processing. ALWAYS consult this skill first when asked to create a 3D scene or visualization.


Master Decision Tree: Use Case to Scene Recipe

Step 1: Identify the Use Case

Use CaseGo To
Product viewer / configuratorRecipe A
Architectural walkthroughRecipe B
Game level / interactive 3DRecipe C
Data visualization / chartRecipe D
Portfolio / hero sectionRecipe E
CAD / BIM / IFC viewerRecipe F
AR / XR experienceRecipe G

Step 2: Choose R3F vs Imperative

ConditionDecision
Project uses ReactALWAYS use React Three Fiber (R3F)
Project uses Vue, Svelte, or vanilla JSALWAYS use imperative Three.js
Need maximum control over render loopPrefer imperative Three.js
Rapid prototyping with component reusePrefer R3F + Drei
Static scene, no interaction frameworkEither works; imperative is lighter

Cross-reference: threejs-impl-r3f for R3F patterns, threejs-core-scene-graph for imperative patterns.


Decision Tree: Lighting Setup

Step 1: Scene Type to Lighting Strategy

Scene TypePrimary LightFill LightShadows
Outdoor / daylightDirectionalLight (sun)HemisphereLight (sky/ground)DirectionalLight shadow, PCFSoftShadowMap
Indoor / roomPointLight or SpotLight (fixtures)AmbientLight (low)SpotLight shadows, limit to 2-3
Studio / productSpotLight (key) + SpotLight (rim)AmbientLight or HemisphereLightContactShadows (Drei) or AccumulativeShadows
Stylized / toonDirectionalLightHemisphereLightOptional; BasicShadowMap for hard edges
HDR environment onlyNone (IBL provides all lighting)NoneContactShadows or AccumulativeShadows
Night / darkSpotLight (focused pools)AmbientLight (very low, ~0.05)SpotLight shadows

Step 2: Lighting Intensity (Physically Correct, r160+)

Light TypeUnitTypical IndoorTypical Outdoor
DirectionalLightlux1-51-3 (scene scale dependent)
PointLightcandela50-200N/A
SpotLightcandela100-500N/A
AmbientLightunitless0.1-0.50.2-0.5
HemisphereLightunitless0.3-0.80.5-1.0

Step 3: Light Count Budget

PlatformMax Real-Time LightsMax Shadow-Casting Lights
Mobile3-41 (DirectionalLight only)
Desktop8-162-3 (NEVER PointLight shadows on mobile)
High-end16+ (use TiledLighting)4-5

Critical rules:

  • NEVER use PointLight shadows on mobile — each costs 6 shadow map renders
  • ALWAYS add directionalLight.target to the scene when repositioning the target
  • ALWAYS call RectAreaLightUniformsLib.init() before creating RectAreaLight

Cross-reference: threejs-impl-lighting-shadows for shadow tuning and artifact fixes.


Decision Tree: Material Selection

Visual GoalMaterialNotes
Realistic / PBRMeshStandardMaterialDefault choice for most scenes
Realistic + clearcoat, transmission, sheenMeshPhysicalMaterialHeavier than Standard; use only when needed
Toon / cel-shadedMeshToonMaterialRequires gradientMap texture for steps
Unlit / flat colorMeshBasicMaterialZero lighting cost; good for wireframes, UI
Performance-critical (many objects)MeshLambertMaterialVertex-lit; cheaper than Standard
Glass / transparentMeshPhysicalMaterial (transmission: 1)Or Drei's MeshTransmissionMaterial in R3F
Reflective floorDrei MeshReflectorMaterialR3F only
Custom shaderShaderMaterial or RawShaderMaterialFull GLSL control
Node-based (WebGPU)MeshStandardNodeMaterialTSL node system; r160+

Critical rules:

  • NEVER use MeshPhysicalMaterial when MeshStandardMaterial suffices — it is significantly more expensive
  • ALWAYS set material.needsUpdate = true after changing defines or extensions
  • ALWAYS dispose materials when removing objects from the scene

Cross-reference: threejs-syntax-materials for material properties and textures.


Decision Tree: Camera Selection

Use CaseCamera TypeTypical Settings
Most 3D scenesPerspectiveCamerafov: 50-75, near: 0.1, far: 1000
Product viewer (no perspective distortion)PerspectiveCamerafov: 35-45 (narrow = less distortion)
Architectural (wide angle)PerspectiveCamerafov: 60-90
2D game / isometricOrthographicCameraFrustum sized to world units
CAD / technical drawingOrthographicCameraALWAYS
Data visualization (flat)OrthographicCameraFrustum = data range
Cinematic / dramaticPerspectiveCamerafov: 20-35 (telephoto effect)

Critical rules:

  • ALWAYS call camera.updateProjectionMatrix() after changing fov, near, far, or aspect
  • NEVER set near to 0 — this causes z-fighting across the entire scene
  • ALWAYS keep the near/far ratio as small as possible (ideally < 1:10000)

Cross-reference: threejs-core-renderer-camera for camera API details.


Decision Tree: Controls Selection

Interaction PatternControlsNotes
Orbit around object (most common)OrbitControlsALWAYS enable damping
Map / top-down navigationMapControlsLeft-drag = pan, right-drag = rotate
First-person / walkthroughPointerLockControlsRequires pointer lock API
Fly-through (6DOF)FlyControlsKeyboard + mouse
Drag-to-rotate (presentation)Drei PresentationControlsR3F only; spring physics
Scroll-driven animationDrei ScrollControlsR3F only
Object manipulation (translate/rotate/scale)TransformControlsAttach to selected object
Mobile-friendly orbitOrbitControlsTouch gestures built-in

Critical rules:

  • ALWAYS call controls.update() in the animation loop when enableDamping is true
  • ALWAYS call controls.dispose() on cleanup
  • NEVER combine OrbitControls and TransformControls without disabling OrbitControls during transform interaction

Cross-reference: threejs-syntax-controls for controls API details.


Decision Tree: Environment Setup

Visual GoalApproachImplementation
Realistic reflections + ambientHDR environment mapscene.environment = pmremGenerator.fromEquirectangular(hdrTexture)
Solid color backgroundscene.background = new Color(...)Simplest option
Gradient backgroundCustom shader on background planeOr CSS gradient behind transparent canvas
SkyboxCubeTexture on scene.background6 face images
Procedural skyDrei <Sky> or Three.js Sky addonDynamic sun position
No background (transparent)renderer = new WebGLRenderer({ alpha: true })CSS controls what shows behind
R3F environmentDrei <Environment preset="studio" />Presets: apartment, city, dawn, forest, lobby, night, park, studio, sunset, warehouse

Critical rules:

  • ALWAYS use PMREMGenerator to prefilter environment maps for PBR materials
  • NEVER use unprocessed HDR textures as scene.environment — they MUST be PMREM-processed
  • Setting scene.environment provides IBL to ALL PBR materials automatically

Cross-reference: threejs-syntax-materials for environment map usage on materials.


Decision Tree: Post-Processing

When to Add Post-Processing

ConditionDecision
Scene looks flat or lacks depthAdd SSAO/GTAO + subtle bloom
Need glow / emissive highlightsAdd UnrealBloomPass
Need anti-aliasing (no MSAA)Add FXAA or SMAA
Cinematic lookAdd BokehPass (DoF) + FilmPass (grain) + LUTPass (color grading)
Outline selectionAdd OutlinePass
Performance is critical (mobile)NEVER add post-processing; use baked effects

Post-Processing Pipeline Order

ALWAYS follow this pass order:

  1. RenderPass (beauty render) — ALWAYS first
  2. Geometry passes: SSAO, GTAO, SSR
  3. Effect passes: Bloom, DoF, Outline
  4. Anti-aliasing: FXAA or SMAA
  5. Color grading: LUT, Film
  6. OutputPass (tone mapping + color space) — ALWAYS last

R3F Post-Processing

In R3F, use @react-three/postprocessing (wraps pmndrs/postprocessing library):

import { EffectComposer, Bloom, SSAO } from '@react-three/postprocessing'

<EffectComposer>
  <SSAO />
  <Bloom luminanceThreshold={0.9} intensity={0.5} />
</EffectComposer>

Critical rules:

  • ALWAYS resize the composer when the window resizes: composer.setSize(w, h)
  • NEVER forget OutputPass at the end — without it, tone mapping and color space conversion are skipped
  • In R3F, @react-three/postprocessing handles pass ordering automatically

Cross-reference: threejs-impl-postprocessing for pass configuration and tuning.


Scene Composition Checklist

ALWAYS follow this checklist when building a scene:

  1. Renderer — Create WebGLRenderer with antialias: true, set pixel ratio, set size
  2. Scene — Create Scene, set background and/or environment
  3. Camera — Choose type per decision tree, set position
  4. Lighting — Choose recipe per decision tree, respect budget
  5. Ground/Environment — Add ground plane, environment map, or sky
  6. Content — Add geometries, load models, create materials
  7. Controls — Choose per decision tree, configure constraints
  8. Shadows — Enable on renderer + lights + objects (3-step opt-in)
  9. Post-processing — Add if needed, follow pipeline order
  10. Resize handling — ALWAYS handle window resize (camera + renderer + composer)
  11. Animation loop — requestAnimationFrame or R3F useFrame
  12. Disposal — ALWAYS dispose geometries, materials, textures on cleanup

Performance Quick Reference

OptimizationWhen to Apply
InstancedMesh>50 identical objects
LOD (Level of Detail)Large scenes with distant objects
frustumCulled: true (default)ALWAYS keep enabled unless object must render off-screen
matrixAutoUpdate: falseStatic objects that NEVER move
Texture compression (KTX2/Basis)ALWAYS for production; reduces GPU memory 4-6x
Geometry mergingMany small static meshes with same material
frameloop="demand" (R3F)Static scenes / configurators
Baked lightingStatic environments
Object poolingFrequently created/destroyed objects

Cross-reference: threejs-errors-performance for detailed optimization strategies.


Reference Links

Related Skills

SkillWhen to Consult
threejs-core-scene-graphScene hierarchy, Object3D API, disposal
threejs-core-renderer-cameraRenderer setup, camera configuration
threejs-core-math-transformsVectors, matrices, coordinate transforms
threejs-syntax-geometryBufferGeometry, built-in shapes, InstancedMesh
threejs-syntax-materialsMaterial properties, textures, environment maps
threejs-syntax-loadersGLTF, FBX, OBJ loading and optimization
threejs-syntax-controlsCamera controls setup and configuration
threejs-impl-lighting-shadowsLight types, shadow configuration, artifacts
threejs-impl-animationKeyframe animation, morph targets, skeletal
threejs-impl-postprocessingEffectComposer, bloom, SSAO, anti-aliasing
threejs-impl-physicsRapier/Cannon.js integration
threejs-impl-r3fReact Three Fiber patterns and hooks
threejs-impl-webgpuWebGPU renderer, TSL node materials
threejs-impl-ifcIFC/BIM model loading and processing
threejs-errors-performanceFPS optimization, memory leaks, draw calls
threejs-errors-renderingVisual artifacts, z-fighting, color issues
threejs-agents-model-optimizerGLTF optimization, compression, LOD generation

Official Sources

Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.

<a href="https://skillzs.dev/skills/impertio-studio/three.js-claude-skill-package/threejs-agents-scene-builder">View threejs-agents-scene-builder on skillZs</a>