跳转至

Rig 与多 Rig

一个场景里很少只有一样东西。两个角色、一件道具和一台摄像机全都住在同一个 Harmony node graph 或 Maya outliner 里 — 而如果你把它们当作一堆不加区分的东西导出,它们到了对面也还是一堆不加区分的东西。

Rig 列就是你把它们分开的手段。它是写进文件里的一个标签,在导入时决定什么会被构建成一个独立的单元:

应用 一个 rig 会变成
Blender 一个 armature
Maya 一个 group,该 rig 的各个 root 挂在下面
Harmony 一个 node group

Rig 列

Maya 导出列表上的 Rig 列

Root 行 得到一个可编辑的下拉框。子行 得到灰显文本和一条提示,说明它们继承的是谁的 rig — 子项永远不是一个独立的选择。

这一列出现在全部四个页面上,而且分组在 两种格式之间是共享的。一个场景,一套分组,无论它以哪种文件格式离开:在 .anm 导出页上改一个 rig 名,.pvt 导出页会立刻反映出来。

在这个单元格里你能做三件事

双击 Rig 单元格就能在里面输入。 这个单元格是一个可编辑的组合框:双击会在文本里放一个光标,或者用那个尖角符号从场景中已有的 rig 列表里挑一个。

操作 结果
从下拉框中 选一个已有的 rig 把这条 chain 合并 进那个 rig
双击并输入一个名字 重命名 这个 rig — 每一条带着该标签的 chain 都会跟着变
选择 + New rig… 提示输入一个名字,并且 只把这条 chain 移动 到一个新的 rig 中
清空单元格 恢复这条 chain 的自动分组

输入一个名字和选择 + New rig… 之间的区别值得记牢:输入是一次 影响所有共享该标签者的重命名+ New rig… 则是 把这一条 chain 拆出来,其他的不动。

所以如果你有 spaceshipturbine 都被标记为 spaceship,而你双击其中任意一个单元格并输入 freighter,那么 两者 都会跟着变 — 你重命名了这个 rig,而不是把某一条 chain 移出去。要只移动一条,请用 + New rig…


连通性锁

有一条规则是 OTS 不会让你打破的:

一条已连接的 chain 永远不能被拆开

子项永远与其 parent 共享 rig。你可以把两个互不相连的 root 合并进一个 rig;但你永远不能把一个 bone 放进与它所悬挂的那个 bone 不同的 armature 里。

这不是 UI 上的限制 — 正是它让导入有意义。一个与其 parent 处在不同 armature 中的 bone 等于没有 parent,那样 pose 就会是错的。

你想 允许吗?
把两个独立的角色 root 合并进一个 rig ✅ 可以
把一件道具的 root 放进它自己的 rig ✅ 可以
把一条摄像机 chain 移进某个角色的 rig ✅ 可以 — 它是一条独立的 chain
在腰部把一条脊柱拆成两个 rig ❌ 不行 — 它们是连着的

所以最小单元是 chain,而你在决定的事情是:哪些 chain 共享一个 rig。


OTS 是怎么提出分组方案的

你很少需要动手:OTS 会替你把这一列填好,而且通常是对的。它按下面这个顺序往下走,直到有一条能给出答案,以此为每个 root 挑选 rig:

  1. 你自己的覆盖 — 你输入过或挑选过的东西原样保留。
  2. 一条专用的摄像机 chainCamera(如果有多条,则是 Camera_1Camera_2、……)。
  3. 应用自身给出的提示 — 在 Maya 中,是这个 joint 所在的 group。
  4. 外层的 group — 在 Harmony 中,是节点路径里的那个 group。
  5. root 自己的名字,剥掉 peg 后缀。
  6. Rig,作为最后的兜底。

摄像机编号是稳定的

当存在不止一条专用摄像机 chain 时,这些 root 会先 按名称 排序再编号。所以每次导出时 Camera_1Camera_2 都指同一个东西 — 它们不会因为你碰巧以不同顺序选中了东西而互相调换。

一台住在角色 chain 内部 的摄像机 — 一个挂在 rig 之下、驱动着摄像机的 peg — 不算专用摄像机 chain。它继承角色的 rig,这是对的:它本来就跟着角色一起动。


实战

一个文件里两个角色

把两个都扫描进来。OTS 通常会用各自的 root 来给每个 rig 命名,你在列里就已经能看到两个 rig 名了。如果它猜的某个名字你不喜欢,直接覆盖输入。

导入时,Blender 会创建两个 armature,Maya 创建两个 group,Harmony 创建两个 node group。

一个角色和它的摄像机

默认情况。你的角色 chain 得到它的名字,摄像机 chain 得到 Camera。导入时,Create Rig 构建角色,Create Cameras 构建摄像机 — 两个分开的按钮,因为它们本来就是两件分开的事。

有意合并

两件你希望在对面被当作一个 rig 对待的道具:在第二件道具的下拉框里选第一件道具的 rig 名。它们就合并了。它们是互不相连的 root,所以这是允许的。


为什么 Blender 没有 Rig 列

三个应用中有两个给你这一列,Blender 没有。这不是不一致 — 它源自"rig"在每个应用中 究竟是什么

rig 是什么 一个 bone 能移到另一个 rig 吗?
Blender 一个 armature — 一个有自己 datablock 的真实对象。一个 bone 不可能存在于恰好一个 armature 之外 不能。 Blender 自己的数据模型就禁止
Maya 一种约定。一个 joint 只是 DAG 里的一个变换节点;根本没有 armature 对象。所谓"rig"通常就是你把 root 挂进去的那个 group — 或者干脆什么都不是 能 — 那不过是一次重新指定 parent
Harmony 一种约定。一个 peg 是图里的一个节点;所谓"rig"就是外层的那个 group

所以在 Blender 中,这个问题在 OTS 介入之前就已经有答案了,于是这一列是锁死的:每个被选中的 armature 都作为它自己的 rig 导出,并以自身命名。允许你把一个 bone 重新标记到另一个 rig 中,等于承诺一件导出无法兑现的事 — 一个 parent 住在另一个 armature 里的 bone,等于没有 parent。

Maya 和 Harmony 中,分组确实是一种约定,所以它确实是一个决策,而这一列就是你做决策的地方。OTS 会提出一个合理的默认值 — 在 Maya 中是这个 joint 最近的非 joint 祖先,在 Harmony 中是外层的 group — 并让你去修正它。

连通性锁对三个应用都成立

Maya 和 Harmony 可编辑,并不意味着它们是松散的。这条锁在任何地方都依然生效:你可以合并互不相连的 root;你永远不能拆开一条已连接的 chain。 所以 Maya 和 Harmony 里的自由度永远只是"哪些 chain 归到一组" — 而绝不是"把这条 chain 从中间掰断"。Blender 则从它的数据模型那里免费得到了同样的保证。

导入 时,三个应用都完整地尊重 rig 标签:一个含有三个 rig 的文件会在 Blender 中产生三个 armature,在 Maya 中产生三个 group,在 Harmony 中产生三个 node group。

参见 在 Blender 中在 Maya 中


跨应用的名称

Rig 名以纯文本形式传递,并被用来命名构建出的 armature 或 group。保持它们简单 — 不要斜杠,不要前导或尾随空格 — 它们就能完好地挺过全部三个应用。

如果 不同 rig 中的两条 chain 含有同名的项,那也没问题:OTS 是按完整路径匹配的,不是按裸名,所以两个 rig 中同名的 bone 依然彼此区分。