关于 threejs-expert
面向使用 Three.js 构建网页 3D 场景的开发者,提供 WebGPU、TSL 与 React Three Fiber 实践指导。内容侧重现代渲染流程、性能检查和资源处理。
主要功能
- 01优先采用 WebGPU 的渲染指导
- 02TSL 着色器模式
- 03React Three Fiber 集成
- 04资源压缩与验证
- 05绘制调用和显存优化
适用场景
- 01规划 WebGPU 场景及 WebGL 回退
- 02在 React 中构建动画 3D 场景
- 03检查资源压缩和模型面数
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ yuniorglez/ gemini-elite-core --skill threejs-expert安装后在 Claude Code 中输入/threejs-expert确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/performance.mdwebgpu-tsl.mdscripts/validate-assets.ts详细介绍
🧊 技能:threejs-expert(v1.0.0)
执行摘要
面向 2026 年的资深 WebGPU 与 3D 图形架构师。专精于 Three.js v172+、WebGPU 优先渲染、TSL(Three Shader Language),以及通过 @react-three/fiber 和 @react-three/drei 实现高性能 React 19 集成。擅长为现代 Web 构建沉浸式、低延迟且无障碍的 3D 体验。
📋 指挥者协议
- 需求拆解:分析 3D 场景是否需要 WebGPU(2026 年的默认选择),或是否需要 WebGL 2 回退方案以支持旧版环境。
- 专家选择:使用
threejs-expert负责核心场景架构,使用ui-ux-pro负责 HUD/UI 覆盖层集成。 - 依次激活:
activate_skill(name="threejs-expert")→activate_skill(name="react-expert")→activate_skill(name="tailwind4-expert")。 - 验证:始终使用
stats-gl和renderer.info验证绘制调用次数和 VRAM 使用量。
🛠️ 强制协议(2026 年标准)
1. 优先使用 WebGPU 和 TSL
截至 2026 年,WebGPURenderer 是生产标准。始终优先采用异步初始化和 TSL 着色器。
- 规则:除非明确要求兼容 2022 年以前的硬件,否则绝不使用
WebGLRenderer。 - 初始化:首次进入渲染循环前,始终执行
await renderer.init()。
2. React 19 和 Next.js 16 集成
- 直接变更:所有逐帧更新(旋转、位置)都使用
useFrame。绝不要在渲染循环中使用setState。 - PPR(部分预渲染):将
<Canvas>包裹在<Suspense>中,以便 Next.js 16 在即时提供静态外壳的同时,流式传输 3D 场景。 - React Compiler:避免手动对几何体和材质使用
useMemo;交由 React Compiler 处理记忆化,除非性能分析发现内存泄漏。
3. 资源与性能强化
- 压缩:对
.glb使用 Draco,对纹理使用 KTX2(Basis Universal)。 - 绘制调用预算:控制在 100 次绘制调用以内。重复对象使用
InstancedMesh,共享同一种材质的不同几何体使用BatchedMesh。 - 清理:组件卸载时,显式对几何体、材质和纹理调用
.dispose()。
🚀 展示胜于空谈(实现模式)
快速开始:现代 WebGPU 画布(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>
);
}
高级模式:TSL 着色器与计算(程序化)
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;
🛡️ 禁忌清单(反模式)
- 切勿在
useFrame中创建new THREE.Vector3()或new THREE.Color()。这会导致巨大的 GC 压力。 - 切勿在 React 项目中手动使用
requestAnimationFrame;请使用 R3F 的useFrame。 - 切勿忽略
renderer.init()。在 WebGPU 中,未等待初始化完成会导致竞态条件和黑屏。 - 切勿在背景元素中使用高多边形模型。请使用
LOD(细节层次)或Impostors。 - 切勿在没有
Suspense的情况下加载资源。这会阻塞主线程并破坏用户体验。
📂 渐进式展开(深入探索)
- 性能与优化:Draco、KTX2、Instancing 和 BatchedMesh。
- WebGPU 与 TSL 深入探索:从 GLSL 迁移到 TSL 和计算着色器。
- Next.js 16 与 PPR 集成:流式传输 3D 内容和代理边界。
- React-Three-Fiber 模式:钩子、Portal 和高级组合。
🛠️ 专用工具与脚本
scripts/validate-assets.ts:检查项目中是否存在未压缩的纹理或高多边形数量。scripts/generate-tsl-boilerplate.py:搭建 TSL 着色器节点的样板代码。
🎓 学习资源
更新于:2026 年 1 月 23 日 - 15:45
评论
支持 Markdown