Unroll¶
Unroll 是 Compose 的逆过程。 Compose 把你创作的姿势烘焙进一个 Master Controller;Unroll 则把存储在某个 MC 里的姿势重新在 Harmony 时间线上生成为 keyframe。
可以用它来:
- 找回丢失在时间线上的姿势——见下文,
- 把一个继承来的 rig 的姿势重新放回 frame 上,方便你编辑它们,
- 把一个已经打好 key 的 rig 版本交给动画师,
- 合并一个正面和一个背面的 MC 到同一条时间线上——这是 Harmony 自带的 unroll 做不到的。
合成后的 MC 是你姿势的一份备份
第一种用途正是能在某天挽救整个项目的那种。一个合成后的 MC 所携带的姿势,是完整地拷贝在它自己的状态文件里的——它们不依赖于当初来源的那些时间线 frame。所以即便那些 frame 被删除、被覆盖,或者因为一次糟糕的保存而丢失,这个 MC 依然保留着每一个姿势,Unroll 会把它们重新作为 keyframe 放回时间线。Compose 把它们烘焙进去,Unroll 把它们取出来。
它能 unroll 什么¶
| MC | 显示为 | 姿势来自 |
|---|---|---|
| 一个 ORC 合成的 MC | ORC composed MC |
ORC 自己的姿势数据和 manifest |
| 一个 Toon Boom slider MC | Harmony slider MC |
它的 .tbState 文件里的状态 |
| 一个 Toon Boom grid MC | Harmony grid MC |
它的 .tbState 文件里的状态 |
| 一个 Toon Boom stack / cube MC | Harmony stack MC |
它的 .tbState 文件里的状态 |
原生的 Toon Boom MC 也能用。 ORC 通过它们自己的 UI 脚本识别它们,并通过 Toon Boom 的状态管理器读取它们的姿势。
从哪里启动它¶
| 入口 | 范围 |
|---|---|
某个 control 的 ⤓ Unroll 按钮 |
那个 control——两个 face 都算 |
右键点击某个 control → ⤓ Unroll Poses… |
那个 control——两个 face 都算 |
某个 pose layer 的 ⤓ Unroll 按钮 |
打开对话框,且只勾选那个 layer |
layer 上的这个按钮只出现在一个 MC 是导入而来的自由 layer 上——一个你从零创作的 layer 没有 MC 可供 unroll。
当没有加载任何 MC 时,这个按钮会是灰色的,tooltip 会说明原因:
在为这个 rig 加载一个 Master Controller 之前保持锁定——请在上方的来源栏中设置 MC。
一次操作同时处理 Front + Back
当两个槽位都设置好时,ORC 会把它们合并成一条时间线来 unroll。这个计划的标题是 robin-front-MC + robin-back-MC,每一条警告都会注明它来自哪一个 MC。
对话框¶
Unroll 范围¶
一棵可勾选的树,列出要烘焙的内容,用的是和 Outliner 一样的图形。
| 行 | 默认状态 |
|---|---|
| 一个 control | 已勾选。取消勾选会把它的子级灰掉。 |
Front / Back |
已勾选。每一面各自独立地限定范围,所以你可以只烘焙正面。 |
| 一个自由的 pose layer | 已勾选。 |
| 一个 knob | 只有它自己有 target 时才勾选。 |
Globals |
存在全局 layer 时,默认勾选。 |
一个没有 target 的 knob 会被禁用,并说明原因:
Knob —— 一个 dimension,不是一个 pose layer。 它自己没有 target,所以这里没有什么可 unroll 的。 勾选一个骑在这个 knob 上的 layer,已经会 unroll 沿着这个 knob 的 dimension 的每一个姿势。
在这棵树下方,有一个实时计数:Baking 2055 of 2055 pose(s)。计数为零时,Unroll 按钮会被禁用。
同一套机制覆盖所有情况——烘焙整个 MC、单个 control、单个 layer、单个全局 layer,或单独一面。
Frame offset(帧偏移)¶
Frame offset 会被加到每一个源 frame 上。0 会把姿势还原到它们原本的 frame;正值让一切延后,负值让一切提前。
姿势表格¶
勾选 Show poses table 可以按每个姿势显示一行:
| 列 | 是否可编辑 |
|---|---|
Src Frame |
否——姿势最初创作的位置 |
Dst Frame |
是——它将被写入的位置 |
Snap Key |
否——这个姿势的地址 |
Tabs |
否——哪些 stack 参与其中 |
一个原生 MC 显示的则是 Src Frame、Dst Frame 和 Pose Name。
行的文字会被染色以提醒你:
| 颜色 | 含义 |
|---|---|
| 琥珀色 | 不止一个姿势落到了这个目标 frame 上 |
| 红色 | 目标 frame 小于 1 |
Reset Dst 会把每一行都还原为 Src + offset。
这张表格默认是开启的,除非计划中的姿势达到 500 个或更多,此时为了速度会默认关闭。两种视图始终是就绪状态,所以切换是即时的。
警告¶
| 消息 | 含义 |
|---|---|
| 466 frame(s) with multiple poses: 51, 52, 53… (+458) | 更晚的 snap 会堆叠在这些 frame 上更早的 snap 之上。 |
| N frame(s) ≤ 0 — fix before applying | 会阻止 Unroll,直到修复为止。 |
运行它¶
一个进度弹窗会报告每一个数据块:
Frame 1200 / 2055 — controls=600 · layer writes=205488 · failed=0
| 计数器 | 含义 |
|---|---|
controls= |
已应用的 facade 状态数——每个 control 姿势一个 |
layer writes= |
来自 pose layer 数据的单项属性写入数。这就是为什么这个数字会很大。 |
failed= |
找不到对应节点或列的写入次数 |
Cancel 需要预先武装(armed)——点一次进入四秒的待命状态,再点一次才会真正中止。这种阻力是刻意设计的:在 unroll 进行到一半时中止,会让你的时间线处于部分写入的状态。它只会在一个数据块边界(五十帧)处停下,绝不会在写入过程中停下。
整个过程都发生在一个 Harmony 撤销步骤内,所以按一次 Ctrl+Z 就能全部撤销。
| 结果 | 消息 |
|---|---|
| 干净完成 | Unroll done — 2055 pose(s), controls=600 · layer writes=205488 · failed=0 |
| 出现失败 | Unroll: 2000 OK, 55 failed write(s), 2 failed frame(s) — see log |
| 被取消 | Unroll cancelled — 812 pose(s) applied |
它会写入什么¶
Unroll 不写入任何文件。 它的全部输出都是你场景里的 keyframe、属性值和 drawing 的曝光信息。
对每一个 frame,它会先从状态文件中还原 control 自身的姿势——头部的 peg、下颌的形变器、对口型的 drawing,和创作时完全一致——然后把 pose layer 的形变偏移、handle 长度、peg 变换以及 drawing 的曝光,直接写入它们对应的节点。
一个原生 MC 没有这样的数据,所以它只是把命名好的状态原样应用到每一个目标 frame 上。
Unroll 与 Compose 的配合¶
它们是同一个循环的两个方向:
创作的姿势 ──Compose──▶ 一个 Master Controller ──Unroll──▶ 时间线上的 keyframe
正是这个往返,让你可以拿一个别人做好的 MC——哪怕是一个纯粹的 Toon Boom MC——unroll 成 frame,导入 ORC,重新创作你需要的部分,再把它合成回去。
参见 重新编辑一个已合成的 MC。
相关内容¶
- Compose
- 重新编辑一个已合成的 MC
- Controls
- Widget Editor —— 在不转换一个原生 MC 的前提下重新设计它的样式

