AVW-11:JS 图形与交互生态全景——Three.js 及 40+ 核心项目的定位、星数与解决什么问题

AI 动态视觉 Web 专题 全景地图 | AVW-11 JS 生态全景 ← 本文


# JS 图形与交互生态 ## 3D 渲染引擎 - Three.js (102k★) - Babylon.js (23k★) - PlayCanvas (10k★) - OGL (3.5k★) / regl (5k★) ## React 3D 生态 - R3F (28k★) / Drei (9k★) - gltfjsx / leva / react-xr ## 2D 渲染 & 游戏 - PixiJS (44k★) / Phaser (38k★) - Konva (11k★) / Fabric.js (29k★) - Paper.js (14k★) ## 数据可视化 - D3.js (110k★) / Chart.js (65k★) - deck.gl (12k★) / luma.gl (6k★) ## 动画 & 物理 - GSAP (19k★) / anime.js (50k★) - Motion (25k★) / react-spring (28k★) - Matter.js (17k★) / Cannon.js (5k★) ## WebVR/AR & 地图 - A-Frame (17k★) / react-xr - Leaflet (42k★) / Mapbox GL (11k★) ## 创意编程 & ML - p5.js (22k★) / Zdog (10k★) - TensorFlow.js (18k★) / ml5.js (6k★) ## 工具 & 导出 - html2canvas (30k★) / chroma.js (10k★)

前言:JS 生态的"图形栈"

JavaScript 生态已经从"操作 DOM"发展为完整的图形/交互/3D 技术栈。这套栈可以分为 9 条技术线,每条线有 1-3 个主导项目。

本文的目标是给每个项目一句话讲清楚它是什么、解决什么问题、目前热度如何。不做教程,做地图。


第一条线:3D 渲染引擎 — Web 的 3D 能力从哪来

Three.js — JS 3D 的北极星

  • GitHub: mrdoob/three.js · 102k+ stars
  • 官网: threejs.org
  • 定位: JavaScript 3D 库。WebGL/WebGPU 的抽象层
  • 解决问题的本质: 你不用直接写 WebGL 的着色器代码。Three.js 提供了场景(Scene)、相机(Camera)、几何体(Geometry)、材质(Material)、灯光(Light)等高层抽象
  • 代表用户: Google、Apple、Nike、NASA、Figma
  • AI 场景: 3D 数据可视化、数字孪生、产品 3D 预览、VR/AR 体验

Three.js 是 JS 3D 生态的绝对核心——下面要讲的 react-three-fiber、Drei、gltfjsx、react-xr 全部依赖它。


Babylon.js — 更偏向游戏引擎的 3D 方案

维度 Three.js Babylon.js
定位 通用 3D 库 偏向游戏引擎
物理引擎 需第三方 内置
GUI 编辑器 无官方工具 有 Playground + 编辑器
学习曲线 中等 较高(更"引擎化")
社区生态 更大(R3F 生态加持) 偏游戏/工业
代表用户 Google, Apple, Nike 微软、育碧、工业仿真

什么时候选 Babylon.js: 你需要物理引擎、碰撞检测、粒子系统等"游戏引擎"级功能,且不希望自己拼装第三方库。


PlayCanvas — 浏览器优先的游戏引擎

  • GitHub: playcanvas/engine · 10k+ stars
  • 官网: playcanvas.com
  • 定位: Web 优先的游戏引擎,WebGL/WebGPU/WebXR 全支持
  • 特色: 在线编辑器 + glTF 标准 + 强大的 PBR 材质

OGL — 极简 WebGL

  • GitHub: oframe/ogl · 3.5k+ stars
  • 定位: 最小化的 WebGL 库。如果你觉得 Three.js 太重但又不想裸写 WebGL
  • 适合: 追求极致体积的场景(如落地页 3D 背景)

regl — 函数式 WebGL

  • GitHub: regl-project/regl · 5k+ stars
  • 定位: 函数式的 WebGL。用 React 风格的函数式 API 写着色器
  • 适合: 需要精细控制着色器但不想写样板代码的场景

第二条线:React 3D 生态 — pmndrs 宇宙

pmndrs(Poimandres)是一个开源组织,围绕 Three.js 构建了一整套 React 生态。如果你用 React 做 3D,这一整套都是标准配置。

react-three-fiber (R3F) — Three.js 的 React 渲染器

  • GitHub: pmndrs/react-three-fiber · 28k+ stars
  • 定位: Three.js 的 React 渲染器。用 JSX 写 3D 场景
  • 解决问题的本质: 让 Three.js 融入 React 的声明式 + 组件化 + 状态管理范式
<Canvas>
  <ambientLight />
  <mesh>
    <boxGeometry />
    <meshStandardMaterial color="hotpink" />
  </mesh>
</Canvas>

Drei — R3F 的"瑞士军刀"

  • GitHub: pmndrs/drei · 9k+ stars
  • 定位: react-three-fiber 的实用工具集
  • 包含: OrbitControls、Text、Html、Sky、Environment、useGLTF 等 100+ helpers

其他 pmndrs 生态

项目 GitHub Stars 用途
gltfjsx pmndrs/gltfjsx 3k+ GLTF 3D 模型 → JSX 组件
leva pmndrs/leva 5k+ React 调试面板/参数控制 GUI
react-xr pmndrs/xr 2k+ VR/AR for R3F
react-spring pmndrs/react-spring 28k+ 弹簧物理驱动的 React 动画库
zustand pmndrs/zustand 48k+ 轻量 React 状态管理
valtio pmndrs/valtio 9k+ 代理式 React 状态管理

第三条线:2D 渲染 & 游戏引擎

PixiJS — 最快的 2D WebGL 渲染器

  • GitHub: pixijs/pixijs · 44k+ stars
  • 官网: pixijs.com
  • 定位: 高性能 2D WebGL 渲染引擎
  • 解决问题的本质: 你需要同时渲染数千个精灵(sprite)并保持 60fps——Canvas 2D 做不到,PixiJS 的 WebGL 渲染器可以
  • 代表用户: Adobe、Disney、HBO
  • AI 场景: 粒子效果、交互式数据可视化、2D 游戏

Phaser — 最流行的 2D Web 游戏框架

  • GitHub: phaserjs/phaser · 38k+ stars
  • 官网: phaser.io
  • 定位: 完整的 2D 游戏框架。物理引擎、音效、输入、动画全内置
  • 与 PixiJS 的区别: PixiJS 是渲染引擎,Phaser 是游戏引擎(内置物理/音效/场景管理)

Konva.js — 可交互的 Canvas 框架

  • GitHub: konvajs/konva · 11k+ stars
  • 定位: HTML5 Canvas 交互框架。提供图层、形状、事件系统
  • 适合: 图形编辑器、白板、标注工具

Fabric.js — Canvas 上的"DOM 操作"

  • GitHub: fabricjs/fabric.js · 29k+ stars
  • 定位: Canvas 对象模型 + SVG 解析。让 Canvas 操作像操作 DOM 一样
  • 适合: 设计工具、图片编辑器

Paper.js — 矢量图形的瑞士军刀

  • GitHub: paperjs/paper.js · 14k+ stars
  • 定位: 矢量图形脚本框架。贝塞尔曲线、路径运算、布尔操作
  • 适合: 矢量图形编辑器、生成艺术

第四条线:数据可视化

详见 AVW-3 数据可视化全景AVW-8 中国生态,此处仅列核心 JS 项目

项目 GitHub Stars 一句话
D3.js d3/d3 110k★ 数据绑定到 DOM,可视化的"汇编语言"
Chart.js chartjs/Chart.js 65k★ 最简单的 Canvas 图表库,8 种图表
deck.gl visgl/deck.gl 12k★ WebGL2 大数据可视化(Uber 出品)
luma.gl visgl/luma.gl 6k★ deck.gl 底层的 WebGL2 工具包
ECharts apache/echarts 60k★ Apache 顶级,60+ 图表类型
G2 antvis/G2 12k★ 图形语法引擎

第五条线:动画引擎

详见 AVW-2 动画引擎对比GSAP 系列

项目 GitHub Stars 一句话
GSAP greensock/GSAP 19k★ Web 动画工业标准,Timeline + ScrollTrigger
anime.js juliangarnier/anime 50k★ 轻量优雅,SVG 原生支持
Motion motiondivision/motion 25k★ React/Vue 原生,前身 Framer Motion
react-spring pmndrs/react-spring 28k★ 弹簧物理驱动的 React 动画
Lottie airbnb/lottie-web 30k★ AE 导出 JSON 在 Web 端播放

第六条线:物理引擎

Matter.js — 2D 物理引擎

  • GitHub: liabru/matter-js · 17k+ stars
  • 定位: Web 端 2D 刚体物理引擎
  • 解决问题的本质: 你需要重力、碰撞、摩擦力这些物理效果,但不想自己写物理公式
  • 代表场景: 2D 小游戏、物理模拟、交互式教育
const engine = Matter.Engine.create()
const box = Matter.Bodies.rectangle(400, 200, 80, 80)
Matter.Composite.add(engine.world, [box, Matter.Bodies.rectangle(400, 600, 800, 20, { isStatic: true })])
Matter.Runner.run(engine)

Cannon.js — 3D 物理引擎

  • GitHub: schteppe/cannon.js · 5k+ stars
  • 定位: 轻量 3D 物理引擎(刚体、碰撞检测、约束)
  • 与 Three.js 的配合: Three.js 负责渲染,Cannon.js 负责物理计算。两者通过同步 position/rotation 协作

第七条线:WebVR/AR

A-Frame — HTML 写 VR

  • GitHub: aframevr/aframe · 17k+ stars
  • 定位: 用 HTML 标签写 WebVR 体验
  • 核心理念: 把 Three.js 的 VR 能力包装成声明式 HTML 标签
<a-scene>
  <a-box position="-1 0.5 -3" rotation="0 45 0" color="#4CC3D9"></a-box>
  <a-sphere position="0 1.25 -5" radius="1.25" color="#EF2D5E"></a-sphere>
</a-scene>
  • react-xr: pmndrs/xr — R3F 的 VR/AR 绑定,React 技术栈用这个而非 A-Frame

第八条线:地图可视化

项目 GitHub Stars 一句话
Leaflet Leaflet/Leaflet 42k★ 最流行的移动端友好交互地图库
Mapbox GL JS mapbox/mapbox-gl-js 11k★ WebGL 矢量瓦片地图渲染
MapLibre GL maplibre/maplibre-gl-js 7k★ Mapbox GL 的开源分支
OpenLayers openlayers/openlayers 11k★ 功能最全的开源地图库
react-map-gl visgl/react-map-gl 8k★ Mapbox/MapLibre 的 React 封装

第九条线:创意编程 & ML

p5.js — 代码作画

  • GitHub: processing/p5.js · 22k+ stars
  • 定位: 面向艺术家、设计师、学生的创意编程平台
  • 特色: Processing 的 JS 版本,"让不会编程的人也能用代码创作视觉作品"

Zdog — 伪 3D 引擎

  • GitHub: metafizzy/zdog · 10k+ stars
  • 定位: 扁平化、设计师友好的伪 3D 引擎(Canvas/SVG)
  • 适合: 2.5D 的卡通风格图标、Logo、插画

TensorFlow.js — 浏览器里的机器学习

  • GitHub: tensorflow/tfjs · 18k+ stars
  • 定位: WebGL 加速的浏览器端 ML 库
  • AI 场景: 在浏览器里跑模型推理、迁移学习、实时姿态检测

ml5.js — 友好的浏览器 ML

  • GitHub: ml5js/ml5-library · 6k+ stars
  • 定位: TensorFlow.js 的友好封装,面向艺术家和创意编程者

第十条线:工具 & 导出

项目 GitHub Stars 一句话
html2canvas niklasvh/html2canvas 30k★ DOM 截图 → Canvas
chroma.js gka/chroma.js 10k★ 颜色操作瑞士军刀
d3-scale-chromatic d3/d3-scale-chromatic D3 的颜色标尺
canvas-sketch mattdesl/canvas-sketch 5k★ 生成艺术/创意编程脚手架

JS 图形生态版图总结

按 GitHub Stars 降序排列的核心项目热度榜

排名 项目 Stars 领域 一句话
1 D3.js 110k 数据可视化 数据绑定到 DOM 的鼻祖
2 Three.js 102k 3D 渲染 JS 3D 的北极星
3 Chart.js 65k 图表 最简单的 Canvas 图表
4 ECharts 60k 图表 中国可视化标准
5 anime.js 50k 动画 轻量优雅的通用动画
6 zustand 48k 状态管理 React 状态管理新标准
7 PixiJS 44k 2D 渲染 最快的 2D WebGL
8 Leaflet 42k 地图 移动端交互地图
9 Phaser 38k 2D 游戏 最流行的 Web 游戏框架
10 Lottie 30k 动画 AE → Web 动效
11 html2canvas 30k 工具 DOM 截图
12 Fabric.js 29k Canvas Canvas 对象模型
13 R3F 28k React 3D Three.js 的 React 渲染器
14 react-spring 28k 动画 弹簧物理动画
15 Motion 25k 动画 React 声明式动画
16 Babylon.js 23k 3D 游戏 偏引擎的 3D 方案
17 p5.js 22k 创意编程 艺术家友好
18 GSAP 19k 动画 Web 动画工业标准
19 TensorFlow.js 18k ML 浏览器里的 ML
20 Matter.js 17k 2D 物理 Web 物理引擎
21 A-Frame 17k VR HTML 写 VR
22 Paper.js 14k 矢量图形 矢量脚本框架
23 deck.gl 12k 数据可视化 WebGL2 大数据
24 G2 12k 图表 图形语法引擎
25 Konva.js 11k Canvas 可交互 Canvas
26 Mapbox GL 11k 地图 矢量瓦片地图
27 PlayCanvas 10k 3D 游戏 Web 游戏引擎
28 Zdog 10k 伪 3D 扁平风格 3D
29 chroma.js 10k 颜色 颜色操作工具
30 Drei 9k React 3D R3F 工具集

技术选型速查

你想做什么 首选 备选
网页 3D 场景 Three.js + R3F (React) Babylon.js
3D 产品展示 R3F + Drei + gltfjsx Three.js 原生
2D 游戏 Phaser PixiJS
2D 高性能渲染 PixiJS Konva.js
图形编辑器/白板 Fabric.js / Konva.js Paper.js
交互式数据可视化 D3.js ECharts / Chart.js
大数据量可视化 deck.gl ECharts GL
Web 动画(专业级) GSAP anime.js
React 动画 Motion react-spring
Web 物理模拟 Matter.js (2D) / Cannon.js (3D) Ammo.js
WebVR A-Frame / R3F + react-xr Babylon.js
创意编程/生成艺术 p5.js canvas-sketch
浏览器 ML TensorFlow.js ml5.js
地图 Leaflet (简单) / Mapbox GL (WebGL) OpenLayers
颜色操作 chroma.js d3-scale-chromatic

本文是 AVW 专题的第 11 篇,与前面的动画引擎(AVW-2)、数据可视化(AVW-3/8)、视频与动效(AVW-6)形成 JS 生态的完整覆盖。


实操清单

  • 打开 threejs.org 浏览官方 Examples,找到一个感兴趣的 3D 场景并查看其源码
  • 对照"技术选型速查"表,根据自己当前项目需求圈出首选框架
  • 用 npm 初始化一个 Vite 项目,安装 three@react-three/fiber,用 R3F 的 <Canvas> 渲染一个旋转的彩色立方体
  • 安装 @react-three/drei,替换原生 Three.js 的 OrbitControls 为 Drei 的 <OrbitControls />,验证鼠标拖拽效果
  • gltfjsx CLI(npx gltfjsx model.glb)将一个 glTF 模型转换为 JSX 组件,导入 R3F 场景中
  • 在 Matter.js 官方演示页 打开 Wrecking Ball 示例,阅读其源码,理解 Engine、Bodies、Runner 三者的关系
  • 安装 matter-js,创建一个带重力的落体场景:一个方块落到静态地面并产生碰撞
  • 将 Three.js 场景与 Cannon.js 联动:让一个 Three.js Mesh 的 position/quaternion 每帧同步 Cannon.js 刚体的物理状态
  • 用 A-Frame 写 5 行 HTML 在浏览器中渲染一个可点击的 3D 场景,用手机扫 QR 码进入 VR 模式体验
  • 进入 p5.js 编辑器,修改官方 Noise 示例,生成一张随机地形高度图
  • 根据本文"热度榜",在 GitHub 上 Star 你打算深入学习的 3 个项目,并订阅其 Release 通知