Rig 与多 Rig¶
一个场景里很少只有一样东西。两个角色、一件道具和一台摄像机全都住在同一个 Harmony node graph 或 Maya outliner 里 — 而如果你把它们当作一堆不加区分的东西导出,它们到了对面也还是一堆不加区分的东西。
Rig 列就是你把它们分开的手段。它是写进文件里的一个标签,在导入时决定什么会被构建成一个独立的单元:
| 应用 | 一个 rig 会变成 |
|---|---|
| Blender | 一个 armature |
| Maya | 一个 group,该 rig 的各个 root 挂在下面 |
| Harmony | 一个 node group |
Rig 列¶
Root 行 得到一个可编辑的下拉框。子行 得到灰显文本和一条提示,说明它们继承的是谁的 rig — 子项永远不是一个独立的选择。
这一列出现在全部四个页面上,而且分组在 两种格式之间是共享的。一个场景,一套分组,无论它以哪种文件格式离开:在 .anm 导出页上改一个 rig 名,.pvt 导出页会立刻反映出来。
在这个单元格里你能做三件事¶
双击 Rig 单元格就能在里面输入。 这个单元格是一个可编辑的组合框:双击会在文本里放一个光标,或者用那个尖角符号从场景中已有的 rig 列表里挑一个。
| 操作 | 结果 |
|---|---|
| 从下拉框中 选一个已有的 rig | 把这条 chain 合并 进那个 rig |
| 双击并输入一个名字 | 重命名 这个 rig — 每一条带着该标签的 chain 都会跟着变 |
选择 + New rig… |
提示输入一个名字,并且 只把这条 chain 移动 到一个新的 rig 中 |
| 清空单元格 | 恢复这条 chain 的自动分组 |
输入一个名字和选择 + New rig… 之间的区别值得记牢:输入是一次 影响所有共享该标签者的重命名;+ New rig… 则是 把这一条 chain 拆出来,其他的不动。
所以如果你有 spaceship 和 turbine 都被标记为 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:
- 你自己的覆盖 — 你输入过或挑选过的东西原样保留。
- 一条专用的摄像机 chain →
Camera(如果有多条,则是Camera_1、Camera_2、……)。 - 应用自身给出的提示 — 在 Maya 中,是这个 joint 所在的 group。
- 外层的 group — 在 Harmony 中,是节点路径里的那个 group。
- root 自己的名字,剥掉 peg 后缀。
Rig,作为最后的兜底。
摄像机编号是稳定的
当存在不止一条专用摄像机 chain 时,这些 root 会先 按名称 排序再编号。所以每次导出时 Camera_1 和 Camera_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 依然彼此区分。