跳转至

Widget Editor

视频教程 —— 即将上线

Widget Editor 是你把 Master Controller 的 widget 摆到角色身上的地方:位置、缩放、handle 形状、颜色、标签。

它渲染每个 widget 时与 Harmony 绘制的完全一致 —— 透明主体、黑色边框、白色 handle、深色标签底板上的文字。你在这里摆的样子,就是动画师拿到的样子。

Widget Editor

它只负责外观和布局。posing 仍在 ORC 里完成。

两种打开方式

打开来源 说明
在 ORC 内部 顶部工具栏的 Widgets 按钮 —— 两种方式用的是同一个图标。它与 ORC 共用 undo 历史 —— 一份文档,一条历史。
独立运行 Harmony 的 Octo Tools 工具栏里同一个 图标,就在 ORC 旁边 —— 或者从脚本调用 Octo_WidgetEditor()。它不依赖 ORC 打开,加载 Node View 中选中的 MC,并且能重新设计一个已经 composed 好的 MC的样式 —— 或者一个纯 Toon Boom 的 MC。

在 ORC 内部打开时,编辑器会把 ORC 的窗口锁在它后面 —— 原因见这里 —— 但从不阻塞 Harmony,所以它开着的时候你仍能在 Node View 里选节点。独立运行时没有 ORC 窗口可锁:编辑器和 Harmony 就是全部。


工具栏

Toolbar

MC 槽位(仅独立模式)

MC: 显示当前加载的内容。Set 加载 Node View 中选中的 Master Controller; 清空它。

预览

▶ PreviewLayout 模式(摆放)和 Preview 模式(测试)之间切换 —— 点按钮,或直接按 Tab。在 Preview 里,拖动 widget 会真的驱动这个 rig,visibility group 的复选框也会真的隐藏东西 —— 这是 rig 在真实运作,只是还没 compose。

退出 Preview 会恢复一切,所以 Harmony 场景永远不会被留在被改动的状态。

背景

四个色块,加一个自定义取色器:

Dark(深色)
Grey(灰色) —— 默认值
White(白色)
Transparent(透明) —— 显示棋盘格

画布会自动翻转自己的线条颜色:在浅色背景上,grid 和摄像机边框会画成深色而不是白色。

吸附(Snap)

Snap menu

项目 默认 作用
Show grid 画出动画的场记表(field chart)—— 经典的 N/S/E/W 编号表格,也就是 "Snap to grid" 所对齐的对象
Snap to widgets Photoshop 式的 widget 间对齐
Snap to grid 按 widget 中心吸附
Snap to guides 吸附到你自己的参考线
Add horizontal guide / Add vertical guide 在原点添加一条青色参考线
Clear guides 全部移除

把参考线拖出画布即可删除。 参考线会随 rig 一起保存,因此会跟着 preset 一起传递。

吸附生效时会显示一条粉色提示线。

快照(Snapshot)

把你的角色放到 widget 后面,这样你就能对照真实的画面来摆放它们。

按钮 作用
📷 在指定帧渲染角色作为背景
📂 改为加载一张图片文件
清除它

Opacity 用于淡化它,默认 55 %。

如果渲染回来是空的,状态栏会说明原因,而不是默默失败:一个没有 Display 节点的场景(或直接打开的 .tpl)没有任何渲染器能触及的东西 —— 加一个,或把这个 template 导入进一个场景 —— 而没有 Harmony 会话,就没有可渲染的来源。Load… 在任一情况下都可用。

背景无法移动或缩放 —— 这是故意的

它被锁定在摄像机边框上,以保持一个 1:1 的参照。如果它能漂移,就不再是参照了。只有透明度可调。

⚙ 与 ?(仅独立模式)

Preferences 和 Help。嵌入版编辑器不重复提供这两项 —— 它们属于 ORC,就在上一层窗口,两扇窗户各有一套齿轮会让人误以为有两套设置。


画布

移动视角

手势 效果
滚轮 朝光标方向缩放
2 / 1 放大 / 缩小(Toon Boom 自带的绑定)
Ctrl+= / Ctrl+- 放大 / 缩小(可重新绑定)
按住 Space 拖动 平移
Shift+M 重置视角

摄像机边框以围绕原点的一个矩形绘制,0,0 处有一个小十字准星。

选择

手势 效果
单击一个 widget 选中它 —— 以及它的孪生体,如果是有链接的 L/R pair,因为该 pair 作为一个整体行动
Ctrl+单击 切换单个项目,不带上它的孪生体
Shift+单击 加入选择
从空白处框选 选中方框实际接触到的一切
Ctrl+A / Ctrl+Shift+A 全选 / 清空

选中多个后,拖动其中任意一个即可移动整组 —— 此时 inspector 会变成一个批量编辑器:它显示所选内容共有的外观字段,编辑其中一个会写入每个选中的 widget,即使它们当前的值各不相同。仅限镜像的条目会被跳过(去编辑它们的 L 孪生体),并且在 Preview 模式下只提供 Visibility Layer。

移动与缩放

手势 效果
拖动主体 移动
方向键 微调
Shift+方向键 精细微调
拖动时按住 Shift 轴锁定
中键拖动 从任意位置移动整个选区

选中一个 grid 会给你一个带八个黄色 handle 的方框操纵器(box gizmo),加上一个可移动的橙色枢轴(pivot)环 —— Alt 以它为中心对称缩放,Shift 锁定纵横比。slider 只提供它长轴方向的 handle,因为缩放它的厚度没有意义。

slider 的朝向,以及如何读它

slider 的authoring 轴与它的显示是两件独立的事。 该 layer 编写的是一份位置列表;在这里你决定这份列表是横向还是纵向绘制,以及朝哪个方向排列。

这份自由带来一个问题 —— 哪一端是 state 1?—— 而两个端点锚点(end anchors)回答了它:

图标 标记
行程的起点 —— state 1
终点 —— 最后一个 state

旋转 slider、翻转它,锚点都会跟着走:方形图标永远标在计数开始的地方。这就是为什么一个反向的竖直 slider 在这里以及在 ORC 的 navigator 中一眼就能读懂。

handle 图标有它自己的小型青色操纵器,因此你可以独立于它所在的方框来调整动画师抓取的那个东西的大小。

塑造网格(lattice)

选中一个 grid,它会变成黄色 —— 编辑器"这就是你正在塑造的东西"的颜色 —— 并且方框外侧会出现小小的蓝色三角形,每条内部线一个,都指向 grid 内部:▼ 在某一列上方,▶ 在某一行旁边。拖动其中一个即可移动那条线 —— 这就是让 lattice 贴合角色而非均匀网格的方法,也是某一行或某一列获得自己独特宽度或高度的方式。

修饰键 效果
Shift 精细 —— 四分之一速度
Ctrl 吸附到跨越整个范围的 20 个逻辑停靠点
Alt 对称 —— 镜像线跟着一起动

四条边是 grid 的边界,永不移动,内部的一条线会卡在它相邻两条线之间。拖动时,画布上会显示一个小小的药丸形状,标出到每个相邻线的间隙 —— 配合 Ctrl 的吸附,你可以在落点时读到精确的增量,配合 Alt,镜像线会显示它自己的一对数值,这正是发现左右间距不一致的方法。同样的数值会以数字输入框的形式出现在 inspector 的 Grid Spacing 卡片中,画布上的拖动也会反过来推动这些数值。

L/R 间隙

一个被选中的已链接 pair,会在它的两个 grid 之间显示一个红色括弧——刻意做得与蓝色的线条把手不同。拖动它会对称地改变间隙,同时保持这对 pair 居中。Shift 用于精细调整;最小间隙是 0.05。


Widgets 面板

Widgets and inspector

右侧的树列出每一个 widget,放在你自己创建的文件夹里。它们用来整理编辑器,任何文件夹都可以拖动 —— 但它们不是临时性的:文件夹树会随 rig 一起保存,会 compose 进 MC,并且当独立版编辑器打开那个已 compose 的 MC 时会再次出现。独立版可以移动它找到的内容;只有创建新文件夹才是仅限 authoring 时的操作。

每一行都带一个:锁定的 widget 依然会绘制,但无法被选中或拖动,点击会穿透它。用它来固定已完成的部分,同时在周围继续工作。

一个 visibility group 为 Hidden 的 widget 会被列出但不会被绘制:"Drag it out of Hidden to bring it back."

树的下方,inspector 显示选中 widget 的属性,按卡片分组:

卡片 包含内容
Settings 按种类不同的选项
Transform Offset X/Y 和 Scale X/Y
Handle handle 类型 —— Circle、Square、Diamond、Triangle —— 及其大小
Colours handle、handle 边框、内线、外线、标签、标签背景
Label 文字、字体、大小、对齐、偏移
Behavior visibility group 及按种类不同的行为
Grid Spacing 内部行/列的位置,默认折叠

T 循环切换选中 grid 的 handle 形状。

内线需要外线

除非 Show outlines 打开,否则 Show inlines 是禁用的:"Inner grid lines need the outer border. Turn Show outlines on to enable this." Toon Boom 在没有边框的情况下不画内部线。

选中一个 pair 的镜像孪生体会显示 "Mirror of the L widget — edit its twin." —— 你编写一侧,另一侧会跟着走。


Applying

按钮 作用
Apply 提交布局。嵌入版会重新给会话设 baseline;独立版会直接把样式属性写到实时的 MC 节点上原地生效 —— 不重新 compose,节点身份保持不变。
Cancel 丢弃自你打开或上次 apply 以来的一切改动。点两次以确认。

关闭窗口时若有未 apply 的改动会先询问:"You have unapplied changes. Discard them and close?"

丢弃会把 rig 倒回到你打开它的那一刻

Cancel —— 以及关闭提示中的 Discard —— 不是一个把你的布局改动逐条从历史中挑出来的橡皮擦。在 ORC 中以嵌入方式运行时,编辑器在打开时会给整个 rig拍一张快照,丢弃会恢复那张快照:rig 会回到它在那一刻的确切状态,而在共享历史中,那正是你打开编辑器之前所做的最后一件事。

目标是打开的那一刻,而不是"我记得做过的改动"。Apply 会移动这个目标 —— apply 之后,之后再丢弃会回到那次 apply,而不是最初打开的那一刻。

这就是嵌入版编辑器要把 ORC 窗口锁在它后面的原因。 持有整个 rig 的快照,只有在 rig 无法在底下发生变化时才成立:如果你在编辑器持有一份改动前的 baseline 时编辑 ORC,Cancel 就会恢复你原本不打算丢失的状态。Harmony 本身仍然完全可用 —— 你需要它,好为一个 group 的 Hide Nodes 列表选取节点 —— 因为这把锁只作用于 ORC 自己的窗口,不作用于宿主程序。

Undo 是 Ctrl+Z。一连串改动会合并成ORC 自己历史中的一个 undo 点 —— 嵌入运行时编辑器没有独立的栈。Undo 会在你打开编辑器的那一刻触底,而不会继续往回走进无关的 ORC 操作:"Nothing to undo (widget editor)."


compose 之后还能改什么

独立版编辑器是原地重新设计一个已交付的 MC 的样式,这在 inspector 中划出了一条清晰的界线:有些东西是已 compose 好的 MC 会实时重新读取的,有些则已经被烘焙进去了:

Apply 后立即生效,无需重新 compose 锁定,直到你在 ORC 里重新 compose
所有视觉相关的东西 —— 位置、缩放、颜色、标签、handle 形状 widget 的 Visibility Layer —— 它属于哪个 group
group 的 Hide Nodes 列表 —— 自由添加和移除;这份列表在那里就是扁平的(每条路径一行,没有子节点或 Skip) layer 的父子关系(parenting)
group 的 cascade / override Mode

这条界线不是策略规定 —— 而是 MC 本身工作方式决定的。Hide nodes 和 cascade mode 是已 compose 的 MC 脚本每一帧都会重新读取属性(attribute),所以写这个属性就够了。Group 成员关系和 parenting 是烘焙进生成的脚本本身的,所以任何属性写入都无法移动它们。被锁定的下拉框仍然可见但会变灰,并说明原因:"Set at compose time — change it in ORC and recompose. The Widget Editor only edits what the live MC re-reads (style, hide nodes, cascade mode)."

同一条界线的两个侧面:

  • 一个从 compose 中排除的 widget 在独立版里根本不会列出 —— 它从未被 compose 过,节点上也就没有东西可供重新设计样式。嵌入版编辑器会把它留在树里,因为在那里排除仍然是一个正在被做出的决定。
  • 一个处于hidden visibility group 的 widget 确实 compose 了 —— 它随 MC 一起打包,只是不可见、不可点选 —— 所以独立版会像列出其他任何 widget 一样列出它。

重新设计一个纯 Toon Boom MC 的样式

独立版编辑器也能打开一个原生(native) Master Controller —— 一个 Toon Boom 自己做出来的、ORC 从未 compose 过的 MC。

它的工作方式不同,而这种不同是坦诚的:

一个 ORC MC 一个原生 MC
画布 完整的布局编辑 只读预览 —— 无法拖动,没有操纵器
能改什么 一切 只有该 MC 实际声明的样式属性
Apply 时 样式与布局 仅样式属性

一个原生 MC 完全没有布局或标签位置属性 —— 两者都烘焙进了它自己的脚本 —— 所以画布上没有东西可拖。它确实拥有的是一组颜色和大小属性,而 ORC 是实时从 MC 本身发现它们的,而不是假设一份固定列表,因为 Toon Boom 在不同 widget 类型之间、不同版本之间会改变这个集合。

Apply 会在一个 undo 步骤内写入这些属性,并且不会把 ORC 的数据写到节点上。一个原生 MC 始终保持原生。

ORC 对一个原生 MC 能做的三件事

  1. 在这里重新设计样式(Restyle),不做转换。
  2. 导入(Import) 进一个 rig,它会作为一个普通的 pose layer 落地,它的 state 变成 frame。
  3. Unroll 它,直接从 Toon Boom 自己的 state manager 中读取它的 pose —— 包括把一个 front MC 和一个 back MC 合并进同一条时间线。

相关内容