跳到主要内容

用后端经验理解 Blender 数据模型

Blender 场景中的“一个东西”往往由多类数据组成。理解这些引用关系,比记住快捷键更能帮助你审查 AI 生成的工程。

Object 是实例,Mesh 是形状数据​

可以把 Object 想成带有变换和场景身份的实例:它有名称、位置、旋转、缩放、父对象等。Mesh 则保存顶点、边、面、UV 等几何数据。多个 Object 可以引用同一个 Mesh。

Scene
└─ Collection: Towers
├─ Object: Tower_A ─┐
└─ Object: Tower_B ─┴─ Mesh: TowerMesh
└─ Material slot → Material → Image

此图表达引用关系,不是文件目录。Collection 是组织对象的集合,一个对象可以属于多个集合;集合成员关系与对象父子关系分别解决组织和变换继承问题。

用代码确认引用​

在 Blender 的 Scripting 工作区运行:

import bpy

for obj in bpy.context.scene.objects:
if obj.type == 'MESH':
print(obj.name, obj.data.name, obj.data.users)

如果两个对象的 obj.data 是同一数据块,修改其中一个对象的网格,会影响另一个的形状;移动其中一个对象,不会直接改写另一个的变换。

copy = source.copy() # 新 Object,仍引用原来的网格
copy.data = source.data.copy() # 需要独立几何时才复制 Mesh
bpy.context.collection.objects.link(copy)

不要因此断言“共享网格必定只产生一个 draw call”。渲染合批还受到材质、实例化支持、变换和引擎策略影响。

材质与图片也有独立身份​

材质槽引用 Material;材质节点又可能引用 Image。复制对象后修改共享材质,会让多个物体同时变色。这不是随机错误,而是引用复用的结果。需要独立换色时,明确要求“复制材质数据块并重新绑定”。

Scene 管理对象、相机与渲染环境;World 管理环境相关设置;Action 等动画数据也有自己的生命周期。.blend 保存的数据比最终导出的模型更丰富。

引用计数与保存​

数据块有用户计数。没有实际使用者的数据可能在保存时被清理;需要保留的未使用动作、材质等可以通过界面的盾牌保护功能,即 Fake User,或相应 API 保留。

不要把这个机制完全等同于后端垃圾回收:Blender 的保存、删除、链接库与手动清理有专门规则。重要动作应通过保存后重开工程检查,不能只看到当前会话存在就认定交付成功。

给 AI 的结构检查任务​

列出此工程的 Scene、Collection、Object、Mesh、Material 和 Action。
标出共享数据块、无用户的数据块以及外部图片引用。
请判断哪些是有意复用,哪些可能导致修改互相影响。
先报告,不要自动删除任何数据。

官方阅读:Data-Blocks、数据块菜单与保护。