跳至正文
Tooling — Three.js 与 Blender 入门:适用场景、3D 基础概念与协作流程

Three.js 与 Blender 入门:适用场景、3D 基础概念与协作流程

AI 参与说明(Agent:Codex):本文由 Codex 根据 Three.js、Blender、Khronos 与 React Three Fiber 官方资料辅助撰写与校验,资料整理于 2026-09-08。场景选择与学习顺序是本文的实践建议。运行记录:模型 gpt-6-astra,reasoning effort ultra,执行入口 Codex Desktop,提供方 openai,CLI 版本 0.153.4(不代表桌面 App 版本)。

本次修订(2026-09-08,Agent:Codex):将本地 HTML 运行示例改为站内可直接操作的 Astro demo,补充概念观察步骤与开篇术语参考,并同步调整学习顺序。运行记录:模型 gpt-6-astra,reasoning effort ultra,执行入口 Codex Desktop,提供方 openai,CLI 版本 0.153.4。

本次修订(2026-09-08,Agent:Grok):关联阅读补充 Web 3D 基础概念文档。模型 grok-4.6,提供方 xAI,执行入口 Grok Build TUI。

理解 Three.js 与 Blender,可以先看最终要交付什么:制作模型、产品效果图或动画,重点看 Blender;制作可以旋转、点击、换颜色的 3D 网页,重点看 Three.js。网页需要原创模型时,两者可以组成一条制作流程。

先认识本文会反复使用的几个词;中文名称用于导读,后文统一保留英文名称。

英文术语中文名称简要解释
Three.jsThree.js帮助开发者在网页中显示和操作 3D 内容的 JavaScript 库
BlenderBlender用可视化界面制作模型、图片与动画的软件
Geometry几何体决定一个物体的形状,例如立方体或球体
Material材质决定表面颜色以及如何响应光照等表现
Camera相机决定从哪里看物体,以及画面能看到的范围
Light光源提供照明,让表面产生明暗差异
Rendering渲染根据场景和观察条件计算最终画面的过程

Blender is a 3D creation suite. Three.js is a JavaScript library for rendering and interacting with 3D scenes, commonly in a web browser. 前者提供可视化创作环境,后者让开发者用代码组织和呈现 3D 内容。Blender Features · Three.js Fundamentals

从目标选择工具

下面的选择以交付内容为依据,不是对工具能力的穷举。

想完成的事情优先使用具体分工
制作一把椅子、一个角色或一间房间的 3D 模型Blender通过可视化操作调整形状、外观与结构
制作商品海报、建筑效果图或动画短片Blender安排场景、光照与拍摄角度,输出图片或视频
网页上的商品可以拖动查看、缩放、切换颜色Three.js;原创素材可用 Blender 制作Blender 提供素材,Three.js 呈现素材,网页代码处理用户操作
粒子动画、程序生成的几何造型、互动艺术页面Three.js形状与运动可以直接由代码生成,不一定需要 Blender
解释机械结构、展示分子或空间数据Three.js;按需配合 BlenderThree.js 显示空间关系,业务代码提供数据、规则与说明
只给网页放一张 3D 风格的插图或一段固定动画Blender 加普通图片或视频元素预先生成最终媒体后,浏览器只负责展示或播放
制作有角色控制、碰撞、关卡与存档的 3D 游戏另行评估完整游戏引擎;Blender 可制作素材Three.js 可用于开发游戏,但整套游戏系统需要额外实现或集成

Three.js 的优势是把 3D 融入网页。它不会仅凭加载一个模型,就自动得到购物流程、教学逻辑或游戏规则。模型很大、Texture 很多、光照效果复杂时,还需要处理下载体积和运行性能。

Blender 的优势是创作。Modeling、Animation、Simulation 和 Rendering 都在其功能范围内;其中 Simulation 根据设定规则计算布料、流体等变化。制作 3D 内容的入门操作通常不要求编程,但仍要学习空间操作和创作方法。Blender Features

用一把椅子理解基本概念

电脑里的椅子最初是一组描述形状、外观和位置的数据。屏幕最终显示的仍是二维像素;立体感来自透视、遮挡、明暗等线索。

可以把一个 3D 场景想成摄影棚:先有椅子,再给它安排表面外观、位置、灯光与拍摄角度,最后计算画面。

固定名称负责什么椅子的例子
Geometry描述形状的数据;在 Three.js 中通常由 BufferGeometry 及其派生类承载椅背、椅面和椅腿由哪些顶点与三角形构成
Material规定表面如何呈现,包括颜色、粗糙程度等参数同样的椅子形状可以呈现木质、塑料或金属外观
Texture给 Material 等提供图像或其他采样数据木纹图片,以及随表面位置变化的粗糙度数据;不只是“贴上去的照片”
Mesh在 Three.js 中把 Geometry 与 Material 组合为可放进场景的对象一条椅腿可以是一个 Mesh;整把椅子也可能由多个 Mesh 组成
Scene组织要呈现的对象及其关系椅子、地板、其他物件与 Light 组成场景
Camera确定从哪里看、朝哪里看,以及可见范围从正面看椅子,或靠近查看扶手;这里是虚拟 Camera,不是设备摄像头
Light为会响应光照的 Material 提供照明侧面照来的光让椅背与椅腿更容易分辨
Rendering根据场景与观察条件计算画面;执行它的组件是 Renderer把这一刻看到的椅子绘制到网页的 Canvas 上;Canvas 是网页中用于绘图的区域

这些是 Three.js 官方入门教程中的核心对象关系;Three.js 还可以绘制点与线,所以并非所有可见对象都是 Mesh。Three.js Fundamentals · Three.js API Reference

Model 是日常交流中对完整 3D 素材的称呼,不一定等于一个 Mesh。一份椅子素材可以包含多个 Mesh、Material、Texture,甚至 Animation。

物体还会有位置、旋转与缩放。初学时先理解“沿某个轴移动、围绕某个轴旋转、改变大小”即可,不必先学习矩阵推导。Camera 的位置变化和物体本身的旋转也要区分:拖动查看椅子时,可以是 Camera 绕着椅子移动,椅子并没有发生形变。

Rendering 与 Animation 为什么不是一回事

Rendering produces an image from a scene and a camera. Animation changes properties over time; a rendering loop draws the updated scene repeatedly. 例如先改变椅子的朝向,再绘制一帧;持续执行,才会看到转动。Three.js Creating a scene

对使用者而言,最重要的是下面两种交付方式。

方式画面何时计算使用者能做什么
预先生成图片或视频,通常称为 Offline Rendering 工作流在制作阶段计算好查看图片或播放既定视频;视角与动作已经确定
随用户操作即时更新的 Realtime Rendering在运行时不断计算自由改变视角、配置或场景,并立即看到结果

例如,一段椅子旋转视频只能展示预先拍好的角度;实时 3D 页面可以让用户临时低头看椅子底部。后者需要在目标设备上承担实时计算成本,前者则把大部分画面计算放在制作阶段。

Blender 自身也能实时显示和渲染场景。它的 EEVEE 使用 Rasterization,强调速度,既可用于预览,也可用于最终图像与动画;Cycles 使用 Path Tracing,常用于需要更精细光照计算的最终画面。初学时只需知道它们是 Blender 内部可选的 Render Engines,不必马上研究算法细节。Blender Render Engines

因此,“Blender 或 Three.js”与“Offline Rendering 或 Realtime Rendering”是两个不同维度。工具选择主要取决于创作方式和交付环境。

Blender 和 Three.js 怎样一起工作

假设要做一个可以换颜色的椅子商品页,流程可以分成制作、导出、加载与交互几个阶段:

flowchart TD
    A["Blender<br/>制作 Model 与 Material"] --> B["glTF 或 GLB<br/>导出适合网页的素材"]
    B --> C["Three.js<br/>加载素材并配置 Scene"]
    C --> D["网页交互<br/>拖动查看、点击换色"]
    D --> E["Renderer<br/>更新 Canvas 画面"]

常见文件的用途如下:

文件用途
.blendBlender 工作文件,用于保存和继续编辑创作内容
.gltfglTF 的 JSON 表示;可引用外部几何数据与 Texture 等资源
.glbglTF 的二进制容器形式,常把模型数据与 Texture 打包为一个文件,便于分发
.png、.jpg 或视频文件已经生成的画面,不包含供用户自由查看的完整 3D 场景

glTF is designed for transmitting and loading 3D assets in engines and applications. GLB is its binary container format. glTF 可以表达场景结构、几何、材质与部分动画数据;它不是把 Blender 完整运行环境搬进网页的格式。Khronos glTF · Three.js Loading a glTF file

Three.js 的 GLTFLoader 可以加载导出的素材,然后由程序安排 Camera、Light 与交互。网页上的旋转查看可以使用 OrbitControls;换颜色的按钮则修改目标 Material 的属性。GLTFLoader · OrbitControls

实际制作时需要记住三个边界:

  • Blender 中的效果不保证全部导出。任意节点组合、Simulation 或 Compositing 结果未必能直接用 glTF 表达;Compositing 是把渲染结果、效果或其他影像组合成画面的过程。可用能力取决于导出器、文件使用的扩展和加载端支持范围。
  • 能加载不代表画面完全相同。Material 转换、环境照明与颜色处理都会影响结果,必须在最终网页中比较外观。
  • 素材需要适应交付环境。在制作电脑上能顺畅查看的内容,放到移动网页中仍可能下载慢、占内存或掉帧;应根据目标设备调整几何复杂度与 Texture 尺寸。

前两项来自格式与材质系统差异,第三项是面向实时应用的工程取舍。Blender glTF 导入导出文档

经常一起出现的词,先知道用途即可

不用把这些词全部学完才开始。遇到对应需求再深入会更容易理解。下文的 GPU 指擅长并行处理图形等计算的处理器。

名称可以先怎样理解何时需要
Modeling制作与修改物体形状的过程制作自己的椅子、角色或场景
UV Mapping建立 3D 表面与二维 Texture 坐标的对应关系希望木纹、标签等准确落在指定位置
PBR,Physically Based Rendering用较一致的物理规则描述表面与光的相互作用;仍包含近似理解金属度、粗糙度以及跨工具的 Material
Keyframe记录某个时刻的属性值,由动画系统计算中间变化让物体在一段时间内从一个状态变到另一个状态
Rigging建立控制结构,例如给角色设置骨骼与控制器让角色抬手、行走;简单旋转的椅子通常不需要
Shader在 GPU 上参与几何处理或画面计算的程序自定义水面、特殊表面或视觉效果;入门可先使用现成 Material
WebGL / WebGPU浏览器访问 GPU 图形能力的底层 API理解浏览器支持与渲染后端;使用 Three.js 不要求先从底层 API 写起

相关定义可对照 Blender UV Mapping、Blender Animation & Rigging 和 Three.js MeshStandardMaterial。MeshStandardMaterial 使用 PBR 的 metallic-roughness 工作流;PBR 不等于自动获得照片级效果,模型、光照与参数仍然重要。

当前 Three.js 的 WebGLRenderer 使用 WebGL 2;WebGPURenderer 默认尝试 WebGPU,并提供 WebGL 2 后备路径。它们是不同 Renderer 选择,不应把 Three.js 概括为“只能使用 WebGL”。WebGLRenderer · WebGPURenderer

如果项目使用 React,还会遇到 React Three Fiber。React Three Fiber is a React renderer for Three.js. 它让你用 React 组件表达 Three.js 场景,并与 React 状态和交互衔接;Geometry、Material、Camera 等知识仍然需要理解。它不负责代替 Blender 制作复杂素材。React Three Fiber 官方仓库

直接体验:在网页里认识一个 3D 场景

下面的 demo 已经可以直接操作,无需安装软件或准备模型文件。它用 Three.js 内置的 Geometry 显示立方体、球体或圆环,让你把前面的概念与画面变化对应起来。

打开 Three.js 基础交互 demo;手机上也可以打开独立页面,获得更宽裕的操作空间。

可以依次做四组小实验:

  1. 切换形状,再打开线框。观察立方体、球体和圆环的轮廓,以及表面三角形的分布。Geometry 描述形状,线框帮助你看见构成表面的结构。
  2. 更换颜色,再调整光照强度。形状保持一致,颜色与明暗发生变化:前者由 Material 的颜色参数控制,后者来自 Light 对表面的照明。
  3. 拖动查看并缩放。先关闭自动旋转,再用鼠标或触摸操作改变观察角度和距离。这里是 Camera 围绕物体移动,Geometry 本身没有发生形变。
  4. 打开自动旋转,再重置场景。观察物体朝向随时间变化,并用重置回到初始状态。Animation 改变场景属性,Rendering 把每一刻的状态画出来。

Interaction changes scene state; rendering makes the updated state visible. 同一个形状可以换 Material,Camera 也可以独立改变观察位置,不必重新制作模型。Three.js Fundamentals

下面是供阅读的 JavaScript 机制摘录;其中的对象由场景初始化创建,完整实现已经由站点运行:

javascript
material.color.set('#cf6737'); // 修改 Material 的颜色
light.intensity = 2;          // 修改 Light 的强度
renderer.render(scene, camera); // 根据当前状态绘制画面

示例固定使用 Three.js 0.180.0(r180),不表示它是最新版本;依赖由站点的 Astro 构建打包,读者直接打开页面即可。运行需要浏览器启用 JavaScript 并支持 WebGL 2。Astro Client-side scripts · Three.js WebGLRenderer

怎样开始学习

如果目标是网页中的 3D 交互,建议先操作上面的 demo,分清 Geometry、Material、Light 与 Camera 分别改变什么。开始编程后,再练习创建一个简单场景、连接交互控件,并加载一个已有的 GLB。能分清“素材有问题”与“网页如何显示素材”之后,再学习 Blender 的基础 Modeling 和 glTF 导出。

如果目标是创作模型、图片或动画,建议先在 Blender 中完成一个简单物体:修改形状,设置 Material,安排 Light 和 Camera,输出一张图片。只有确实需要用户在网页里操作它时,再进入 Three.js。

第一步不需要把 Rigging、自定义 Shader 或复杂 Simulation 一起学完。先完成一个小的交付目标,再让需求决定下一组概念。

关联阅读

本文共 3901 字,创建于 Sep 8, 2026

相关标签:Frontend, 可视化, ByAI

博客助手

正在打开博客助手…