Blender 技术梳理
1. 概述
1.1 什么是 Blender
Blender 是一款跨平台(Windows / macOS / Linux)的免费开源 3D 计算机图形(CG)软件。它的独特之处在于把通常需要多款软件协作完成的环节(建模用 Maya、雕刻用 ZBrush、渲染用 Arnold、合成用 Nuke、剪辑用 Premiere)集成进同一个程序,形成一条端到端的一体化管线。
按功能可划分为四大板块:
- 内容创作:多边形建模、NURBS 曲线/曲面、体素雕刻(Sculpting)、几何节点(Geometry Nodes)程序化建模、UV 展开、纹理绘制。
- 动画与仿真:骨骼绑定(Rigging)、关键帧动画、驱动(Drivers)、约束(Constraints)、非线性动画(NLA)、刚体/柔体/流体/布料/烟雾物理仿真、粒子系统。
- 渲染与合成:Cycles(物理光线追踪)、EEVEE(实时 GPU 光栅化)、着色器节点(Shader Nodes)、合成节点(Compositor)、视频序列编辑器(VSE)。
- 辅助生产:运动跟踪与摄像机反求、遮罩与抠像、Python 脚本与插件、命令行无头批处理。
1.2 发展史与治理
| 时间 | 事件 |
|---|---|
| 1994 | 荷兰程序员 Ton Roosendaal 在 NeoGeo 动画工作室发起,作为内部 3D 工具(最初名为 Traces)。 |
| 1998 | NaN(Not a Number)公司成立,Blender 以共享软件形式公开发布。 |
| 2002 | NaN 破产;Ton 发起「Free Blender」众筹,以 €100,000 赎回版权,Blender 转为 GNU GPL 自由软件。 |
| 2002 | Blender Foundation 成立,负责协调开发与版权。 |
| 2007 起 | 开源电影项目(Big Buck Bunny、Sintel、Spring、Coffee Run 等)驱动软件迭代与验证。 |
| 2011 | Cycles 渲染引擎引入,基于物理的路径追踪。 |
| 2018 | 2.8 版本重构 UI,引入 EEVEE 实时渲染引擎。 |
| 2019 | 2.80/2.81 起发布 LTS(长期支持)版本,面向生产环境。 |
| 2023 起 | 4.x 系列持续演进,Geometry Nodes、Vulkan 后端、USD 支持成为重点。 |
1.3 版本与许可
Blender 采用统一版本号 + LTS 策略:主版本快速迭代(新增功能),LTS 版本(如 4.2 LTS)维护周期约两年,适合生产管线锁定。许可为 GNU GPL v3——整体免费,可商用、可修改、可再发布,但衍生作品需同样以 GPL 发布。
2. 核心技术栈与依赖
2.1 技术栈全景
Blender 在纵向上分为四层:应用层(用户可见的各创作模块)、引擎层(依赖图、几何内核、渲染引擎、数据模型)、平台层(窗口/图形 API/计算后端/Python)、文件与生态层(.blend 与交换格式、扩展平台)。
@startuml component
!theme cerulean
skinparam backgroundColor #fafbfc
skinparam shadowing false
skinparam defaultFontName "PingFang SC"
skinparam rectangle {
BackgroundColor #ddf4ff
BorderColor #0969da
}
skinparam package {
BackgroundColor #f6f8fa
BorderColor #d0d7de
}
package "应用层 Application" {
rectangle "建模 Modeling" as M
rectangle "绑定 Rigging" as R
rectangle "动画 Animation" as A
rectangle "仿真 Simulation" as S
rectangle "渲染 Rendering" as RE
rectangle "合成 Compositing" as CO
rectangle "剪辑 Video Editing" as VE
rectangle "运动跟踪 Tracking" as MT
}
package "引擎层 Engine" {
rectangle "依赖图 Depsgraph" as DG
rectangle "几何内核 BKE" as BKE
rectangle "GPU 抽象层" as GPU
rectangle "渲染引擎 Cycles / EEVEE" as ENG
rectangle "数据模型 DNA / RNA" as RNA
}
package "平台层 Platform" {
rectangle "窗口/输入 GHOST" as GHOST
rectangle "图形 API OpenGL/Vulkan/Metal" as GFX
rectangle "计算后端 CUDA/OptiX/HIP/oneAPI" as COMPUTE
rectangle "Python API / 扩展" as PY
}
package "文件与生态 Files & Ecosystem" {
rectangle ".blend 文件" as BLEND
rectangle "Alembic/USD/glTF/FBX" as IO
rectangle "扩展平台 Extensions" as EXT
}
M --> DG
R --> DG
A --> DG
S --> DG
RE --> ENG
CO --> ENG
VE --> ENG
MT --> DG
DG --> BKE
DG --> RNA
BKE --> GPU
ENG --> GPU
GPU --> GFX
ENG --> COMPUTE
PY --> RNA
RNA --> BLEND
BKE --> IO
PY --> EXT
@enduml
2.2 编程语言与运行时
- C 语言:内核主体。核心数据结构(DNA)、业务逻辑(BKE)、几何运算(BLI)大多以 C 编写,追求性能与可移植性。
- C++:现代模块(如 Cycles 渲染器、几何节点、Depsgraph 的部分实现、GPU 后端)以 C++ 编写,使用 C++17/20 标准。
- Python:脚本层与扩展层。几乎所有内核 API 都通过
bpy暴露给 Python,用户可用 Python 完成建模、动画、批处理、插件开发。 - CMake:构建系统;平台相关代码通过抽象层(GHOST)隔离。
- GLSL / GPU 着色器:EEVEE、视口显示、材质预览的着色器以 GLSL 编写,由 GPU 后端编译。
2.3 图形与计算后端
| 类别 | 后端 | 用途 |
|---|---|---|
| 图形 API | OpenGL 3.3+ / Vulkan / Metal | 视口显示、EEVEE 实时渲染、UI 绘制。Blender 通过 GPU 抽象层屏蔽差异。 |
| GPU 计算 | NVIDIA CUDA / OptiX | Cycles GPU 渲染、光线追踪硬件加速(OptiX 利用 RT Core)。 |
| GPU 计算 | AMD HIP / oneAPI | AMD 与 Intel GPU 上的 Cycles 渲染。 |
| GPU 计算 | Apple Metal | Apple Silicon 平台的图形与计算统一后端。 |
| CPU 计算 | SIMD / 多线程(TBB/OpenMP) | Cycles CPU 路径追踪、几何求值、物理仿真。 |
| 加速结构 | Embree / BVH | 光线与场景求交的加速结构。 |
2.4 Python API 与扩展系统
Python 是 Blender 的「第二语言」:启动脚本、界面插件、几何节点自定义、批量渲染都依赖它。其绑定机制建立在 RNA 之上——内核把每个数据结构用声明式方式注册为 RNA 属性,Python 端即可自动获得类型、默认值与读写接口,无需手写绑定。
bpy:主 API,访问场景、对象、材质、动画等所有数据。bmesh:网格编辑 API,用于程序化改拓扑。bpy.ops:调用内核「操作符(Operators)」,即界面上的每个功能。- 扩展(Extensions):Blender 4.2 起引入统一扩展平台,插件/主题/资产可从官方仓库一键安装。
3. 行为图:Blender "做什么"
3.1 用例图(整体行为)
Blender 的行为可概括为「三类参与者 × 十二类核心用例」。艺术家负责内容创作,技术美术/TA 负责管线与工具,脚本/自动化负责批量与无头任务。
@startuml usecase
!theme cerulean
skinparam backgroundColor #fafbfc
skinparam shadowing false
skinparam actorStyle awesome
skinparam defaultFontName "PingFang SC"
skinparam usecase {
BackgroundColor #ddf4ff
BorderColor #0969da
}
actor "3D 艺术家\n(Artist)" as artist
actor "技术美术 / TD\n(Technical Artist)" as td
actor "脚本 / 自动化\n(Script & Automation)" as auto
rectangle "Blender 3D 创作套件" {
usecase "建模 (Modeling)" as UC1
usecase "雕刻 (Sculpting)" as UC2
usecase "UV 展开与纹理绘制" as UC3
usecase "材质与着色 (Shading)" as UC4
usecase "绑定 (Rigging)" as UC5
usecase "动画 (Animation)" as UC6
usecase "物理仿真 (Simulation)" as UC7
usecase "渲染 (Rendering)" as UC8
usecase "合成 (Compositing)" as UC9
usecase "视频剪辑 (VSE)" as UC10
usecase "运动跟踪 (Tracking)" as UC11
usecase "Python 脚本 / 插件" as UC12
usecase "批处理 / 无头渲染" as UC13
}
artist --> UC1
artist --> UC2
artist --> UC3
artist --> UC4
artist --> UC6
artist --> UC8
artist --> UC9
artist --> UC10
td --> UC5
td --> UC7
td --> UC11
td --> UC12
auto --> UC12
auto --> UC13
auto --> UC8
@enduml
3.2 活动图(创作主流程)
从概念到成片,一个典型的 3D 创作流程如下。注意其中的判断分支:是否需要高模细节、是否需要物理效果,决定了是否进入雕刻/重拓扑与仿真环节。
@startuml activity
!theme cerulean
skinparam backgroundColor #fafbfc
skinparam shadowing false
skinparam defaultFontName "PingFang SC"
skinparam activity {
BackgroundColor #ddf4ff
BorderColor #0969da
DiamondBackgroundColor #fff8c5
}
start
:概念设计 / 参考收集 (Concept);
:建模 (Modeling) - 多边形 / 曲线 / 几何节点;
if (需要高精度细节?) then (是)
:雕刻高模 (Sculpting);
:重拓扑 (Retopology);
else (否)
endif
:UV 展开 (UV Unwrap);
:纹理绘制 (Texture Paint);
:材质与着色 (Shading Nodes);
:灯光与摄像机 (Lighting & Camera);
:骨骼绑定 (Rigging);
:动画 (Animation) - 关键帧 / 驱动 / 约束;
if (需要物理效果?) then (是)
:物理仿真 (Simulation);
endif
:渲染设置 (Render Settings);
:渲染 (Render) - Cycles / EEVEE;
:合成与调色 (Compositing);
:输出 / 剪辑交付 (Output / VSE);
stop
@enduml
3.3 时序图(渲染管线)
渲染是最能体现 Blender 内部协作的流程:一次渲染请求会先经过依赖图(Depsgraph)求值,把修改器、几何节点、约束全部「烘焙」成最终场景快照,再交给渲染引擎逐采样计算。
@startuml sequence
!theme cerulean
skinparam backgroundColor #fafbfc
skinparam shadowing false
skinparam defaultFontName "PingFang SC"
skinparam participant {
BackgroundColor #ddf4ff
BorderColor #0969da
}
participant "用户\n(User)" as U
participant "操作符\n(Operators)" as OP
participant "依赖图\n(Depsgraph)" as DG
participant "几何求值\n(Geometry Eval)" as GEO
participant "渲染引擎\n(Cycles/EEVEE)" as ENG
participant "GPU / CPU\n(Compute)" as GPU
participant "图像输出\n(Image Output)" as OUT
U -> OP: 触发渲染 (F12)
OP -> DG: 标记需要更新 (tag update)
DG -> GEO: 拓扑求值(修改器 / 几何节点)
GEO -> GEO: 逐对象生成求值后几何
GEO --> DG: 求值结果缓存
DG -> ENG: 提交场景快照 (Scene Snapshot)
loop 每个像素 / 采样 (per sample)
ENG -> GPU: 发射光线 / 着色计算
GPU --> ENG: 采样结果
end
ENG -> OUT: 合成像素 (Compositing)
OUT --> U: 显示渲染结果 / 保存图像
@enduml
3.4 状态机图(对象模式)
Blender 采用「模式(Mode)」驱动交互:同一个对象在不同模式下,可执行的工具与快捷键完全不同。模式切换是理解 Blender 交互模型的关键。
@startuml state !theme cerulean skinparam backgroundColor #fafbfc skinparam shadowing false skinparam defaultFontName "PingFang SC" [*] --> ObjectMode state ObjectMode : 对象模式\n选择 / 变换 / 父子关系 state EditMode : 编辑模式\n编辑网格 / 曲线顶点 state SculptMode : 雕刻模式\n笔刷塑造高模 state PoseMode : 姿态模式\n操纵骨骼 state WeightPaint : 权重绘制\n编辑蒙皮权重 state TexturePaint : 纹理绘制\n直接在模型上绘画 ObjectMode --> EditMode : Tab EditMode --> ObjectMode : Tab ObjectMode --> SculptMode SculptMode --> ObjectMode ObjectMode --> PoseMode : 选中骨架 PoseMode --> ObjectMode ObjectMode --> WeightPaint WeightPaint --> ObjectMode ObjectMode --> TexturePaint TexturePaint --> ObjectMode @enduml
4. 结构图:Blender "由什么组成"
4.1 部署图(宏观架构)
Blender 既可作为桌面 GUI 运行,也可作为无头(headless)命令行程序部署到渲染农场或云端。典型生产部署中,艺术家工作站负责创作,渲染节点负责出图,共享存储与版本控制负责资产流转。
@startuml deployment
!theme cerulean
skinparam backgroundColor #fafbfc
skinparam shadowing false
skinparam defaultFontName "PingFang SC"
skinparam node {
BackgroundColor #f6f8fa
BorderColor #d0d7de
}
skinparam component {
BackgroundColor #ddf4ff
BorderColor #0969da
}
skinparam database {
BackgroundColor #fff8c5
BorderColor #bf8700
}
node "艺术家工作站\n(Artist Workstation)" as WS {
component "Blender GUI\n(OpenGL/Vulkan)" as GUI
artifact ".blend 工程文件" as BLEND
}
node "GPU 渲染节点\n(GPU Render Node)" as GNODE {
component "Blender Headless\nblender -b" as B1
component "Cycles GPU\n(CUDA/OptiX/HIP/Metal)" as CY
}
node "CPU 渲染农场\n(Render Farm)" as FARM {
component "Blender Headless\nblender -b" as B2
component "Cycles CPU" as CYC
component "作业调度\n(Flamenco/Deadline)" as SCHED
}
node "云 / 服务器" as CLOUD {
component "无头批处理\nPython API" as BATCH
}
database "共享存储\n(Assets / .blend)" as NAS
database "版本控制\n(Git-LFS / Perforce)" as VCS
WS --> NAS
WS --> VCS
GUI --> B1 : 导出渲染作业
SCHED --> B1
SCHED --> B2
B1 --> CY
B2 --> CYC
BATCH --> NAS
CY --> NAS
CYC --> NAS
@enduml
blender -b),常用于渲染农场与 CI 批处理,可节省资源并支持大规模并行。
4.2 组件图(内核模块)
Blender 内核可抽象为四组组件:数据与逻辑(DNA/RNA/BKE/Depsgraph)、几何与渲染(Geometry/GPU/Cycles/EEVEE)、平台与接口(GHOST/Python/Editors)、文件与 I/O(.blend 读写与交换格式)。
@startuml component
!theme cerulean
skinparam backgroundColor #fafbfc
skinparam shadowing false
skinparam defaultFontName "PingFang SC"
skinparam component {
BackgroundColor #ddf4ff
BorderColor #0969da
}
skinparam package {
BackgroundColor #f6f8fa
BorderColor #d0d7de
}
package "数据与逻辑 (blenkernel)" {
component "DNA\n数据结构定义" as DNA
component "RNA\n属性 / 反射系统" as RNA
component "BKE\n核心业务逻辑" as BKE
component "Depsgraph\n依赖图求值" as DG
}
package "几何与渲染" {
component "Geometry\n网格 / 曲线 / 属性" as GEO
component "GPU\n图形抽象层" as GPU
component "Cycles\n路径追踪" as CY
component "EEVEE\n实时光栅化" as EV
}
package "平台与接口" {
component "GHOST\n窗口 / 输入 / 事件" as GHOST
component "Python API\nbpy / bmesh" as PY
component "Editors\n各编辑器 UI" as ED
}
package "文件与 I/O" {
component "blend file\n版本化读写" as BLEND
component "Import / Export\nUSD / FBX / glTF / ABC" as IO
}
ED --> RNA
RNA --> DNA
ED --> BKE
BKE --> DG
DG --> GEO
DG --> CY
DG --> EV
GEO --> GPU
CY --> GPU
EV --> GPU
GHOST --> ED
PY --> RNA
PY --> BKE
BKE --> BLEND
BKE --> IO
@enduml
4.3 包图(源码目录)
Blender 源码采用「模块即目录」的组织方式,命名约定清晰:BKE(Blender Kernel)为核心逻辑,BLI(Blender Library)为通用工具库,intern/extern 存放内置与外部依赖。
@startuml
!theme cerulean
skinparam backgroundColor #fafbfc
skinparam shadowing false
skinparam defaultFontName "PingFang SC"
skinparam package {
BackgroundColor #f6f8fa
BorderColor #d0d7de
}
skinparam folder {
BackgroundColor #ddf4ff
BorderColor #0969da
}
package "blender/ (源码根)" {
package "source/blender/" {
folder "blenkernel (BKE)" as BKE
folder "blenlib (BLI)" as BLI
folder "blenloader (.blend I/O)" as LOAD
folder "depsgraph" as DG
folder "editors" as ED
folder "gpu" as GPU
folder "render (Cycles/EEVEE 集成)" as RENDER
folder "nodes" as NODES
folder "python (bpy 绑定)" as PY
folder "windowmanager (GHOST)" as WM
folder "makesdna / makesrna" as MAKERNA
}
folder "intern/ (内置独立库)" as INTERN
folder "extern/ (外部依赖)" as EXTERN
folder "release/ (数据 / 脚本 / 图标)" as RELEASE
folder "scripts/ (Python 启动脚本)" as SCRIPTS
folder "tests/" as TESTS
}
BKE --> BLI
ED --> WM
PY --> MAKERNA
RENDER --> GPU
NODES --> BKE
LOAD --> BKE
@enduml
4.4 类图(ID 数据模型)
Blender 所有可保存的数据都派生自统一的基类 ID(DataBlock)。这种「万物皆 ID」的设计,使 .blend 文件、撤销系统、引用计数、Python 访问都能用同一套机制处理。
@startuml class
!theme cerulean
skinparam backgroundColor #fafbfc
skinparam shadowing false
skinparam defaultFontName "PingFang SC"
skinparam class {
BackgroundColor #ddf4ff
BorderColor #0969da
}
class ID <> {
+ String name
+ short flag
+ int us // 引用计数
+ ListBase properties
+ ID *next / *prev
}
class Object {
+ short type
+ float obmat[4][4]
+ Object *parent
}
class Mesh {
+ int totvert
+ int totpoly
+ CustomData vdata
}
class Material
class Scene {
+ ListBase objects
}
class Collection {
+ ListBase objects
}
class Armature
class Action
ID <|-- Object
ID <|-- Mesh
ID <|-- Material
ID <|-- Scene
ID <|-- Collection
ID <|-- Armature
ID <|-- Action
Object "1" o-- "0..1" Object : parent
Object --> Mesh : data
Object --> Armature : data (骨架)
Object --> Material : material_slots
Scene "1" o-- "*" Object
Collection "1" o-- "*" Object
Action "*" --> "1" ID : animates
@enduml
5. 关键子系统
5.1 数据模型与 DataBlock
Blender 采用「万物皆 ID」的统一数据模型。数据块之间通过指针相互引用,并维护引用计数与「伪用户」机制,避免未使用数据在保存时被自动清理。.blend 文件本质上是这些 DNA 结构体的内存镜像,通过版本化的读写代码保证跨版本兼容。
- Library(库):可将外部 .blend 作为链接库,实现资产复用与团队协作(Link / Append)。
- Override(覆盖):允许在不修改原始库的前提下覆盖部分属性,是大型协作管线的基础。
- Asset Browser(资产浏览器):把可复用数据块标记为 Asset,集中管理与拖拽使用。
5.2 依赖图 Depsgraph
Depsgraph(Dependency Graph,依赖图)是 Blender 的求值引擎。它把所有数据对象及其依赖关系组织成有向无环图(DAG),当某个数据被修改时,只重新求值受影响的下游节点,从而实现增量更新与多线程求值。
- 求值顺序:几何 → 修改器 → 约束 → 动画 → 物理 → 渲染快照。
- 多视图层(View Layer):同一场景可针对不同用途(渲染/视口)生成不同求值结果。
- 性能意义:大场景下只有被改动的部分重新计算,是 Blender 交互流畅的关键。
5.3 几何节点 Geometry Nodes
几何节点是 Blender 近年的核心创新:以可视化节点图(Node Graph)描述程序化几何生成与处理逻辑。它引入字段(Fields)与属性(Attributes)概念——节点不直接操作具体几何,而是描述「对每个元素如何计算」,从而实现高度灵活的程序化建模、散布、实例化与地形生成。
- 属性系统:几何元素(点/边/面/角/实例)上可挂载命名属性,节点通过属性名读写。
- 字段(Fields):延迟求值的函数式表达式,把「值」抽象为「随元素变化的计算」,可自动传播到任意几何。
- 实例化(Instancing):用少量几何 + 大量实例点,高效生成森林、城市等大规模场景。
5.4 渲染引擎 Cycles vs EEVEE
| 维度 | Cycles | EEVEE |
|---|---|---|
| 原理 | 基于物理的路径追踪(Path Tracing) | 实时 GPU 光栅化 + 屏幕空间效果 |
| 画质 | 物理正确,支持全局光照、焦散、次表面散射 | 近似效果,适合快速预览与风格化 |
| 速度 | 较慢,依赖采样收敛(CPU/GPU 均可) | 极快,接近实时 |
| 硬件 | CPU + CUDA/OptiX/HIP/oneAPI/Metal | GPU(OpenGL/Vulkan/Metal) |
| 适用 | 影视级最终渲染、产品级静帧 | 动画预览、游戏风格、快速迭代 |
5.5 动画与绑定
- 关键帧(Keyframe):在时间轴上记录属性值,中间值由插值曲线(F-Curve)生成。
- F-Curve / Graph Editor:以曲线方式编辑插值,可调节缓入缓出、循环、外推。
- 绑定(Rigging):用骨架(Armature)与骨骼层级驱动网格,通过权重(Weight)实现蒙皮变形。
- 约束(Constraints):IK、Copy Rotation、Track To 等,声明式地建立对象间关系。
- 驱动(Drivers):用表达式或属性把某个属性值映射为另一个属性的输入。
- NLA(非线性动画):把动作(Action)作为片段在轨道上叠加、混合,用于复杂角色动画。
5.6 物理仿真
Blender 内置多种物理求解器,均通过修改器或物理面板挂载到对象上,由依赖图在求值时推进模拟:
- 刚体 / 柔体(Rigid / Soft Body):碰撞、破碎、布料式形变。
- 布料(Cloth):基于质点-弹簧模型模拟织物。
- 流体(Fluid):基于网格/粒子的液体与烟雾模拟(Mantaflow)。
- 粒子(Particles):用于头发、草地、群体动画。
- 力场(Force Fields):风、涡流、吸引等外力的统一抽象。
6. 与竞品对比
| 软件 | 定位 | 强项 | 许可 |
|---|---|---|---|
| Blender | 一体化全流程套件 | 覆盖全管线、开源免费、Python 生态活跃、几何节点 | GPL(免费) |
| Autodesk Maya | 影视/游戏高端制作 | 动画与绑定、行业标准、大型团队管线 | 商业订阅 |
| Autodesk 3ds Max | 建筑可视化、游戏 | 建模工具链、CAD 互操作、插件生态 | 商业订阅 |
| Cinema 4D | 动态图形(Motion Graphics) | MoGraph、上手快、与 AE 集成好 | 商业订阅 |
| Houdini | 程序化特效(VFX) | 节点式程序化、流体/破碎/粒子顶级 | 商业 + 免费学习版 |
| ZBrush | 数字雕刻 | 高模雕刻、细节塑造 | 商业订阅 |
| Unreal Engine / Unity | 实时引擎 | 实时渲染、交互、游戏运行时 | 免费/商业 |
Blender 的差异化在于「一体化 + 开源」:它以零授权成本提供覆盖全流程的能力,虽在个别专业环节(如高模雕刻、影视级特效)不如专精软件,但整体性价比与可定制性极高,尤其适合独立创作者、中小企业与教育场景。
7. 实战操作手册
7.1 界面与工作区
Blender 界面由「编辑器区域」自由拼装而成,官方预设了多种工作区(Workspace):
- Layout(布局):3D 视口 + 大纲 + 属性,日常建模主界面。
- Modeling(建模):视口 + 工具架,多边形建模。
- Sculpting(雕刻):雕刻笔刷界面。
- UV Editing:UV 编辑器 + 3D 视口,展开与排布 UV。
- Texture Paint:纹理绘制。
- Shading(着色):着色器节点编辑器 + 材质预览。
- Animation / Rigging:时间轴 + 摄影表 + 曲线编辑器。
- Rendering:渲染属性 + 图像编辑器。
- Compositing:合成节点编辑器。
- Geometry Nodes:几何节点编辑器 + 电子表格(Spreadsheet)调试。
G/R/S 移动/旋转/缩放,移动鼠标确定数值,左键确认、右键或 Esc 取消。输入数字可精确指定数值。
7.2 核心工作流
建模
1. Shift+A 添加基础几何体(立方体/球/圆柱) 2. Tab 进入编辑模式 3. 选择元素:1 顶点 / 2 边 / 3 面 4. E 挤出、I 内插、Ctrl+B 倒角、Ctrl+R 环切 5. 右键 → Shade Smooth 平滑着色 6. 修改器面板添加 Subdivision Surface 细分
材质与渲染
1. Shading 工作区,切换到 Cycles 或 EEVEE 2. 新建材质,用 Principled BSDF 作为基础着色器 3. 连接 Base Color / Roughness / Metallic / Normal 4. 添加灯光(Shift+A → Light)与摄像机 5. 渲染属性设置采样数、分辨率、输出路径 6. F12 渲染当前帧,Ctrl+F12 渲染动画
动画
1. 将时间轴指针移到起始帧 2. 选中对象,在属性面板对应字段上按 I 插入关键帧 3. 移动指针到结束帧,修改数值,再次按 I 4. 在 Graph Editor 调整 F-Curve 插值 5. 空格播放预览
无头批处理
# 命令行直接渲染 .blend 文件 blender -b scene.blend -f 1 # 渲染整个动画序列 blender -b scene.blend -a # 运行自定义 Python 脚本 blender -b scene.blend -P script.py
7.3 快捷键速查
| 快捷键 | 功能 | 快捷键 | 功能 |
|---|---|---|---|
Tab | 对象/编辑模式切换 | G / R / S | 移动 / 旋转 / 缩放 |
Shift+A | 添加对象 | X / Delete | 删除 |
Shift+D | 复制(独立) | Alt+D | 关联复制 |
E | 挤出 | I | 内插 / 插入关键帧 |
Ctrl+R | 环切 | Ctrl+B | 倒角 |
K | 切割(Knife) | P | 分离 |
M | 合并到中心 | Ctrl+J | 合并对象 |
1 / 2 / 3 | 点 / 边 / 面 选择模式 | Z | 切换着色方式 |
Numpad 1/3/7 | 前 / 右 / 顶视图 | Numpad 0 | 摄像机视图 |
F12 | 渲染当前帧 | Ctrl+F12 | 渲染动画 |
F9 | 调整上一步操作 | Space | 播放 / 暂停 |
Ctrl+Z / Ctrl+Shift+Z | 撤销 / 重做 | Ctrl+S | 保存 |
8. 参数指令速查
8.1 命令行参数
| 参数 | 说明 |
|---|---|
blender | 启动图形界面。 |
blender -b | 后台/无头模式(background),不显示界面。 |
blender -b file.blend | 打开指定工程文件并进入无头模式。 |
-f N | 渲染第 N 帧。 |
-a | 渲染动画全部帧。 |
-o /path/#### | 指定输出路径与文件名格式(# 为帧号占位)。 |
-F PNG | 指定输出图像格式(PNG/JPEG/OPEN_EXR…)。 |
-E CYCLES | 指定渲染引擎(CYCLES/BLENDER_EEVEE_NEXT…)。 |
-P script.py | 启动后运行指定 Python 脚本。 |
--python-expr "..." | 直接执行一段 Python 表达式。 |
--factory-startup | 忽略用户配置与插件,以出厂设置启动(保证可复现)。 |
-noaudio | 禁用音频系统(服务器环境常用)。 |
--version | 打印版本信息。 |
--debug | 输出调试信息。 |
-b,否则在无显示设备的服务器上会因无法创建窗口而报错。渲染农场通常配合 --factory-startup 以保证结果一致。
8.2 Python API 常用片段
import bpy
# 遍历场景中所有网格对象
for obj in bpy.data.objects:
if obj.type == 'MESH':
print(obj.name, obj.location)
# 创建一个立方体并设置位置
bpy.ops.mesh.primitive_cube_add(size=2, location=(0, 0, 0))
# 给选中对象添加细分修改器
obj = bpy.context.active_object
mod = obj.modifiers.new(name="Subsurf", type='SUBSURF')
mod.levels = 2
# 设置渲染引擎与输出参数
scene = bpy.context.scene
scene.render.engine = 'CYCLES'
scene.cycles.samples = 256
scene.render.resolution_x = 1920
scene.render.resolution_y = 1080
scene.render.filepath = '/tmp/render/frame_'
# 插入关键帧动画
obj.location = (0, 0, 0)
obj.keyframe_insert(data_path="location", frame=1)
obj.location = (0, 0, 5)
obj.keyframe_insert(data_path="location", frame=60)
# 保存工程
bpy.ops.wm.save_as_mainfile(filepath="/tmp/scene.blend")
8.3 渲染与输出参数
| 参数(Python 路径) | 说明 | 建议 |
|---|---|---|
scene.render.engine | 渲染引擎 | 最终出图 CYCLES,预览 BLENDER_EEVEE_NEXT |
scene.cycles.samples | 每像素采样数 | 预览 32~64,成品 256~1024 |
scene.cycles.use_denoising | 降噪 | 开启可大幅降低所需采样数 |
scene.cycles.device | 计算设备 | CPU / GPU |
scene.render.resolution_x/y | 输出分辨率 | 1920×1080 / 3840×2160 |
scene.render.resolution_percentage | 分辨率百分比 | 测试时可设 50 提速 |
scene.render.film_transparent | 透明背景 | 需要抠像合成时开启 |
scene.render.image_settings.file_format | 图像格式 | PNG / JPEG / OPEN_EXR(多通道) |
scene.render.fps | 帧率 | 24 / 25 / 30 / 60 |
scene.frame_start / frame_end | 动画帧范围 | 按镜头时长设定 |
9. 总结
Blender 的技术本质,可以归纳为三句话:
- 统一数据模型是根基——「万物皆 ID」的设计让建模、动画、渲染、合成、剪辑共享同一套数据,这是它能一体化覆盖全流程的结构性原因。
- 依赖图是引擎——Depsgraph 以 DAG 组织求值、增量更新、并行计算,支撑起复杂场景的实时交互与正确渲染。
- 开放扩展是生态——GPL 许可 + RNA/Python 绑定 + 扩展平台,使社区能持续贡献插件、几何节点资产与工作流,形成自我强化的开源生态。
从工程视角看,Blender 是「用 C/C++ 打磨性能内核、用 Python 开放创作接口、用 GPU 后端适配异构硬件」的经典范例,其架构对任何希望构建可扩展创作类软件的团队都具有参考价值。