YuniorGlez

threejs-expert

3
3
# Install this skill:
npx skills add YuniorGlez/gemini-elite-core --skill "threejs-expert"

Install specific skill from multi-skill repository

# Description

Senior WebGPU & 3D Graphics Architect for 2026. Specialized in Three.js v172+, WebGPU-first rendering, TSL (Three Shader Language), and high-performance React 19 integration via `@react-three/fiber` and `@react-three/drei`. Expert in building immersive, low-latency, and accessible 3D experiences for the modern web.

# SKILL.md


name: threejs-expert
description: Senior WebGPU & 3D Graphics Architect for 2026. Specialized in Three.js v172+, WebGPU-first rendering, TSL (Three Shader Language), and high-performance React 19 integration via @react-three/fiber and @react-three/drei. Expert in building immersive, low-latency, and accessible 3D experiences for the modern web.


🧊 Skill: threejs-expert (v1.0.0)

Executive Summary

Senior WebGPU & 3D Graphics Architect for 2026. Specialized in Three.js v172+, WebGPU-first rendering, TSL (Three Shader Language), and high-performance React 19 integration via @react-three/fiber and @react-three/drei. Expert in building immersive, low-latency, and accessible 3D experiences for the modern web.


πŸ“‹ The Conductor's Protocol

  1. Requirement Decomposition: Analyze if the 3D scene needs WebGPU (default for 2026) or if a WebGL 2 fallback is necessary for legacy support.
  2. Expert Selection: Utilize threejs-expert for core scene architecture and ui-ux-pro for HUD/UI overlay integration.
  3. Sequential Activation:
    activate_skill(name="threejs-expert") β†’ activate_skill(name="react-expert") β†’ activate_skill(name="tailwind4-expert").
  4. Verification: Always use stats-gl and renderer.info to verify draw calls and VRAM usage.

πŸ› οΈ Mandatory Protocols (2026 Standards)

1. WebGPU & TSL First

As of 2026, WebGPURenderer is the production standard. Always prioritize asynchronous initialization and TSL for shaders.
- Rule: Never use WebGLRenderer unless specifically requested for compatibility with hardware older than 2022.
- Initialization: Always await renderer.init() before the first render loop.

2. React 19 & Next.js 16 Integration

  • Direct Mutations: Use useFrame for all frame-by-frame updates (rotations, positions). NEVER use setState inside the render loop.
  • PPR (Partial Prerendering): Wrap <Canvas> in <Suspense> to allow Next.js 16 to stream the 3D scene while serving the static shell instantly.
  • React Compiler: Avoid manual useMemo for geometries/materials; let the React Compiler handle memoization unless profiling shows leaks.

3. Asset & Performance Hardening

  • Compression: Use Draco for .glb and KTX2 (Basis Universal) for textures.
  • Draw Call Budget: Keep under 100 draw calls. Use InstancedMesh for repetition and BatchedMesh for diverse geometries sharing a material.
  • Cleanup: Explicitly call .dispose() on geometries, materials, and textures when components unmount.

πŸš€ Show, Don't Just Tell (Implementation Patterns)

Quick Start: Modern WebGPU Canvas (React 19)

"use client";

import { Canvas, useFrame } from "@react-three/fiber";
import { useRef, Suspense } from "react";
import * as THREE from "three";

function RotatingBox() {
  const meshRef = useRef<THREE.Mesh>(null!);

  // Native mutation in React 19 / R3F loop
  useFrame((state, delta) => {
    meshRef.current.rotation.x += delta;
    meshRef.current.rotation.y += delta * 0.5;
  });

  return (
    <mesh ref={meshRef}>
      <boxGeometry args={[1, 1, 1]} />
      <meshStandardMaterial color="royalblue" />
    </mesh>
  );
}

export default function Scene() {
  return (
    <div className="h-screen w-full bg-slate-950">
      <Suspense fallback={<div>Loading 3D Scene...</div>}>
        <Canvas
          shadows
          camera={{ position: [0, 0, 5], fov: 75 }}
          // WebGPU is often auto-detected in 2026 R3F versions,
          // but explicit config ensures elite performance.
          gl={(canvas) => {
            const renderer = new THREE.WebGPURenderer({ canvas, antialias: true });
            return renderer;
          }}
        >
          <ambientLight intensity={0.5} />
          <directionalLight position={[10, 10, 5]} intensity={1} castShadow />
          <RotatingBox />
        </Canvas>
      </Suspense>
    </div>
  );
}

Advanced Pattern: TSL Shader & Compute (Procedural)

import { nodeFrame } from 'three/addons/renderers/webgpu/utils/NodeFrame.js';
import { texture, uv, color, mix, oscSine, timerLocal } from 'three/tsl';

// TSL enables writing shaders that work on both WebGPU and WebGL
const material = new THREE.MeshStandardNodeMaterial();
const time = timerLocal();
const animatedColor = mix(color(0xff0000), color(0x0000ff), oscSine(time));
material.colorNode = animatedColor;

πŸ›‘οΈ The Do Not List (Anti-Patterns)

  1. DO NOT create new THREE.Vector3() or new THREE.Color() inside useFrame. It causes massive GC pressure.
  2. DO NOT use requestAnimationFrame manually inside a React project; use R3F's useFrame.
  3. DO NOT ignore renderer.init(). In WebGPU, failing to await initialization leads to race conditions and black screens.
  4. DO NOT use high-poly models for background elements. Use LOD (Level of Detail) or Impostors.
  5. DO NOT load assets without Suspense. It blocks the main thread and ruins the UX.

πŸ“‚ Progressive Disclosure (Deep Dives)


πŸ› οΈ Specialized Tools & Scripts

  • scripts/validate-assets.ts: Checks for uncompressed textures or high-poly counts in the project.
  • scripts/generate-tsl-boilerplate.py: Scaffolds a TSL shader node.

πŸŽ“ Learning Resources


Updated: January 23, 2026 - 15:45

# Supported AI Coding Agents

This skill is compatible with the SKILL.md standard and works with all major AI coding agents:

Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.