库重写

库重写是一个系统,旨在允许编辑链接数据,同时使其与原始库数据保持同步。大多数类型的链接数据块都可以被重写,然后可以编辑这些覆写的属性。当库数据更改时,将相应更新被覆写的库的未修改属性。

Note

旧的代理系统已在Blender 3.0中弃用,并在Blender 3.2中完全删除。加载blend文件时,会自动从代理转换为库重写,但复杂字符的结果无法保证,可能需要手动修复。

库重写支持:

  • 同一链接数据的多个独立覆盖(例如,在同一场景中具有相同的字符多次)。

  • 在堆栈中的任何位置添加新的修改器和约束。

  • 递归链接覆盖(即链接和覆盖从另一个库文件等)。

Note

There are known issues that have to be addressed. See the main task of the project, for more details.

Warning

虽然在大多数情况下,库重写数据会保留参考链接数据的丢失(例如,如果库文件变得不可用或被重新定位),但有一些例外。

The main one is probably posed (but not animated) armature objects, when their Armature obdata itself is not overridden. The Pose bones of an armature object are fully linked to the bones of its Armature obdata, if the later goes missing, the pose bones are definitively lost.

Note

正确的收藏布局很重要

为了使库重写正常工作,最好 所有 字符所需的集合是根(链接和实例化)的子集,以便有一个清晰的层次结构。否则,一些数据可能无法被适当地自动覆写,并且其他操作可能不太可靠。

重写层级

层次结构是处理库重写时需要理解的一个非常重要的概念。在Blender中,现实生活资产(角色、道具、集合等)几乎从未由单个数据块构成,而是一组彼此具有依赖关系的数据块。例如,角色通常将具有骨架对象、几个几何对象、绑定控制器对象、所有这些对象的物体数据、材质、纹理等。

这些关系可以表示为树,具有根数据块 “链接” 其所有依赖关系,递归。在库重写的情况下,层次结构的根通常也是导入资产(通常是集合)时直接链接的数据块。

这种层次结构的概念也可以被看作是某种超级元数据块。当同一链接数据有多个覆盖时,它是非常关键的,因为它可以清楚地将一个给定的数据块识别为一个覆盖,不会给影响整个层次结构的过程留下任何歧义(例如,将覆盖与它们的链接数据重新同步)。它还允许在不同层次的数据块之间共享关系,就像同一个字符的两个不同覆盖之间的亲子关系。

动画 & 重写

Due to current design of animation data in Blender, what is editable in overrides’ animations can change greatly depending on whether animation data was already defined in the linked reference data-block. Animation data is created for a datablock if it gets animated by keyframes, or through drivers.

In general, an overrides can do much more with its animation data if no animation data exists in its linked reference data-block.

Keyframes (a.k.a. F-Curves)

Keyframed animation belongs to another data-block (an Action one). So it is possible to assign a purely local Action data-block replacing the one linked from the library. This will completely replace the keyframed animation from the linked data though, and not override it in any way.

Overridden Action data-blocks only support a very limited amount of editing. For example, an existing F-Curve can be muted, but its keyframes cannot be edited, and no new F-Curve can be added.

驱动器

If the linked reference data has animation data, then its overrides only have limited possibilities to edit the existing drivers. For example, it will be possible to change the exisitng target of a driver, but it won’t be possible to add new drivers, or new targets to an existing driver.

If the linked reference data has no animation data, then its overrides will create a new one when they get some drivers defined. Drivers can then be fully edited, added or removed, just as with purely local data-blocks.

NLA

The NLA editor data also belongs to the animation data of a data-block. However, this data does support some greater level of edition in overrides, including moving or resizing existing strips from the linked data, and adding new local strips.

同步重写

链接的数据块之间的关系可能会发生变化,从而导致过时的覆盖。发生这种情况时,需要重新同步覆盖,以匹配其层次结构的新结构。如果在打开blend文件时需要,覆盖将自动重新同步。但是,有时可能需要手动重新同步它们,请参阅 覆盖层次结构的故障排除

Tip

Blender还可以从外部库重新同步库重写,然后将其链接到工作文件中。然而,这是一个昂贵的过程,每次加载工作文件时都需要完全重做,因为Blender无法直接编辑/修改外部库。

因此,链接覆盖(或创建递归覆盖)的用户应确保定期更新其库文件,以避免在文件加载时出现这种开销(通常,打开和保存这些库文件应足以更新它们)。

Tip

可以在文档中禁用自动重新同步 试验特性设置

重写

出于技术原因(数据块之间的关系的存储方式),Blender需要创建大量数据块的覆盖,即使其中只有一两个数据块实际上需要由用户编辑。为了减少信息量和潜在的不必要编辑风险,大多数数据块现在默认标记为不可编辑。一旦创建了覆盖,就可以更改此设置。

库重写

参考

编辑器:

3D 视图,属性

模式:

物体模式

菜单:

3D视图 ‣ 标题栏 ‣ 物体 ‣ 库重写 ‣ 生成 大纲 ‣ 上下文菜单 ‣ 库重写 ‣ 生成 ID Widget ‣ 上下文菜单 ‣ 库重写 ‣ 生成

快捷键:

Shift-鼠标左键 在 ID 小工具的 ‘linked’ /‘overridened’ 按钮上。

从选定的数据块创建覆盖。

Blender会自动为所有必需的数据块创建覆盖,以确保创建有效的覆盖层次结构。

只有从所选项目创建的覆盖将可由用户编辑。

Warning

从ID小部件(主要来自 属性 编辑器)创建库重写的支持是有限的。虽然应支持最常见的用法,特别是物体、网格等,但仍有许多待实施。

选择项目

根据从何处创建重写,有几种方法可以 “选择” 要覆写的项目和允许用户编辑的项目。

Note

这也适用于其他共同操作(重置清除)。

仅在大纲中提供的 疑难解答 高级操作始终适用于整个重写层次结构。

3D预览

选定的物体将被视为选定物体。

当所选物体是实例化关联集合的本地 空物体 时,将发生以下情况:空物体 将被删除。其关联的集合将被覆写,并且该覆写将在当前 视图层 中的相同集合中实例化。如果集合包含 骨架 物体,则它们将可由用户编辑。否则,创建的覆写将不会被定义为用户可编辑。

大纲视图

此操作仅适用于选定的项目,仅适用于其内容,或两者兼而有之。

Tip

使用 被选 & 目录 是一种简单的方法,可以立即获得所有新创建的覆盖,用户可编辑。

ID部件

只有ID小工具中的链接数据块才被视为已选中,一旦被覆盖,则设置为可编辑。

使其可编辑

That same operation can also be used to make existing overrides user-editable, after they have been created, or cleared

重置库重写

参考

编辑器:

3D 视图,属性

模式:

物体模式

菜单:

3D视图 ‣ 标题栏 ‣ 物体 ‣ 库重写 ‣ 重置 大纲 ‣ 上下文菜单 ‣ 库重写 ‣ 重置 ID Widget ‣ 上下文菜单 ‣ 库重写 ‣ 重置

将所选覆盖重置为原始值(来自链接的参考数据)。与 清除 操作不同,覆盖将保持完全可编辑,并且永远不会被删除。

清空

参考

编辑器:

3D 视图,属性

模式:

物体模式

菜单:

3D视图 ‣ 标题栏 ‣ 物体 ‣ 库重写 ‣ 清空 大纲 ‣ 上下文菜单 ‣ 库重写 ‣ 清空 ID Widget ‣ 上下文菜单 ‣ 库重写 ‣ 清空

快捷键:

Shift-鼠标左键 在 ID 小工具的 覆盖 按钮上。

将选定的覆盖重置为原始值,如果可能,在不破坏现有层次结构的情况下,删除它们并用其链接的引用数据替换它们。否则,保留覆盖,但将其标记为不可编辑。

覆盖

基本上,覆盖编辑的方式与常规本地数据块相同。您可以在它们上使用运算符,从各种编辑器编辑它们的属性等。但是,有一些限制,最值得注意的是,编辑模式不允许覆盖。在大多数情况下,编辑房源后,您可以看到房源被其蓝色轮廓/背景覆盖。

您还可以动画覆盖,动画属性只需替换/取代覆盖。请注意,您不能覆盖/编辑现有动画,您必须创建一个新的操作。您可以手动定义或从相关属性的上下文菜单中删除覆盖。如果覆盖不可编辑,则必须先使其可编辑。

定义重写

参考

编辑器:

任意

模式:

物体模式

属性:

上下文菜单 ‣ 定义重写 上下文菜单 ‣ 定义单个重写

在本地blend文件中标记要覆盖的属性。对于数组属性,所有元素都将被覆盖。

定义单个覆盖

参考

编辑器:

任意

模式:

物体模式

属性:

上下文菜单(右键菜单) ‣ 删除单个驱动器

在本地blend文件中标记要覆盖的属性。对于数组属性,仅将覆盖所选元素。

移除覆盖

参考

编辑器:

任意

模式:

物体模式

属性:

上下文菜单 ‣ 移除重写 上下文菜单 ‣ 移除单个重写

从覆盖中删除属性。将使用数据块中链接的值。对于数组属性,所有元素将从覆盖中删除。

覆盖单个覆盖

参考

编辑器:

任意

模式:

物体模式

属性:

上下文菜单(右键菜单) ‣ 删除单个驱动器

从覆盖中删除属性。将使用数据块中链接的值。对于数组属性,仅将从覆盖中删除所选元素。

重新同步库重写层级

参考

编辑器:

大纲视图

模式:

物体模式

大纲视图:

上下文菜单 ‣ 库重写 ‣ 排除故障

这些操作仅在Outliner上下文菜单中可用。它们可以帮助修复损坏的覆盖层次结构。

重新同步

参考

编辑器:

大纲视图

模式:

物体模式

大纲视图:

上下文菜单 ‣ 库重写 ‣ 排除故障 ‣ 重新同步

链接数据的层次结构(链接数据块之间的关系)可能会发生变化。需要重新同步覆盖以匹配新层次结构。此运算符将重新同步覆盖以匹配库中的新层次结构。

Warning

重新同步库重写时,如果在原始库中更改编辑的覆写,则可能会删除它们。如果是这种情况,将显示一条警告消息,说明删除了多少覆写,如果删除是不合需要的,则可以在保存blend文件之前撤消重新同步。

Note

此过程是自动的

通常,当Blender检测到需要它时,在文档加载时会自动执行此操作,除非在 实验首选项 中禁用它。

强制重新同步

参考

编辑器:

大纲视图

模式:

物体模式

大纲视图:

上下文菜单 ‣ 库重写 ‣ 排除故障 ‣ 强制重新同步

在某些情况下,特别是对于那些保存有 “破损”(非层次匹配)覆盖的旧blend文件,常规的重新同步本身不能像预期的那样正确重建覆盖(例如,一些对象可能会丢失)。为了解决这个问题,这个操作者从其链接的引用以及其依赖的层次结构重建本地覆盖,强制该层次结构与链接的数据相匹配(即忽略数据块属性上现有的覆盖)。这类似于常规的重新同步,但更有力,更积极,代价是可能失去ID指针属性上的一些重写。

删除

参考

编辑器:

大纲视图

模式:

物体模式

大纲视图:

上下文菜单 ‣ 库重写 ‣ 排除故障 ‣ 删除

删除整个库重写层次结构,并将所有这些重写数据块替换为其原始链接数据块。这将完全恢复 Make 操作。