跳到主要内容
VibeStacks
工具条目首选

three.js

Web 3D 的事实标准。在 React 里配合 React Three Fiber,用组件的方式写场景。

最后审阅
适用版本
three 0.186 · React Three Fiber 9.8

适合

  • 产品展示、首页主视觉、数据可视化里需要真正 3D 的场景
  • 想让页面有记忆点、愿意为此投入性能预算的项目
  • React 项目(通过 React Three Fiber 以组件方式编写)

不适合

  • 用 CSS 变换或一段视频就能实现的“伪 3D”效果
  • 低端设备占比高、对加载速度极其敏感的页面

three.js 封装了 WebGL,让你用场景、相机、灯光、网格这些概念描述 3D 画面,而不用直接写着色器。它是 Web 3D 生态最大的库,AI 对它也非常熟悉。

为什么是首选

  • 生态最大。 模型加载、后期效果、物理、控制器都有成熟方案,遇到问题几乎都能搜到答案。
  • React 里写起来自然。 React Three Fiber 把 three.js 对象映射成 JSX 组件,场景跟着状态更新;配套的 drei 提供大量常用组件(相机控制、环境光、文字等)。
  • AI 写得出来。 描述清楚要什么,AI 能给出可运行的场景;难的是性能,这也是纪念品要约束的部分。

上手

pnpm add three @react-three/fiber @react-three/drei
import { Canvas } from '@react-three/fiber';

export function Hero3D() {
  return (
    <Canvas dpr={[1, 2]} frameloop="demand">
      <ambientLight intensity={0.6} />
      <mesh rotation={[0.4, 0.6, 0]}>
        <boxGeometry />
        <meshStandardMaterial color="#ec7a59" />
      </mesh>
    </Canvas>
  );
}

需要知道的取舍

3D 是最容易拖慢页面的展示组件:库本身体积不小,模型和贴图更大,持续渲染还会耗电发热。按下方纪念品的约束来写——限制像素比、按需渲染、懒加载、给不支持或不想要动效的用户一个静态替代——3D 才不会变成负担。

纪念品

带走给你的 AI

把这份 3d-scene-brief.md 放进项目,或直接粘贴给 AI 编程助手。

3d-scene-brief.md
# 3D 场景简报(交给 AI)

用 three.js + React Three Fiber 做一个 <场景描述>,放在 <页面位置>。

## 性能约束
- `<Canvas dpr={[1, 2]}>` 限制像素比;静态场景用 `frameloop="demand"`,只在变化时渲染。
- 3D 组件用 `React.lazy` 懒加载,进入视口后再挂载;加载期间显示同尺寸的静态占位图。
- 模型用压缩过的 glTF(.glb),单个模型不超过 2 MB;贴图尺寸不超过 2048。
- 组件卸载时释放几何体、材质和贴图。

## 可访问性与降级
- 用户开启“减少动态效果”时,不自动旋转或循环动画,只显示静态画面。
- 不支持 WebGL 或加载失败时,显示静态图片,页面其余功能不受影响。
- 画布不承载必要信息;关键文字放在 HTML 里,而不是 3D 场景中。

## 验收
- 在中端手机上滚动页面不卡顿;首屏加载不被 3D 资源阻塞。
  • 主题文章

    功能组件与展示组件

    功能组件解决“能不能用”——表单、弹窗、菜单;展示组件解决“好不好看”——3D、动效、视觉风格。两类组件的选法完全不同。

  • 工具条目首选

    Motion

    React 里最常用的动画库:用声明式的属性写进入、退出、布局变化和手势动画。