跳转至

概念与词汇

视频教程 — 即将上线

ORC 由大约十个词构建而成。在这里学会它们,文档里其他每一页都会变短。

支撑整个工具的一句话:

一个 rig,就是一组按位置寻址的 pose。

下面的一切,要么是你可以在其中移动的 position,要么是存在某个 position 上的 pose,要么是读取某个 position 并做出posing之外的事情的东西。


组成部分

Snap

一个 snap 是一个位置 —— grid 的一个格点,slider 的一个停靠点。它有一个永不改变的名字:R0C0 是左上角的 snap,R2C4 是第 2 行第 4 列。行和列都从零开始,且 R0 是最上面一行

这个名字不是装饰。它出现在 grid 自己的标尺上、log 里、preset 文件内部,以及合成出的 rig 中。出问题时,R1C3 就是你说出 哪里 的方式。

Pose Layer

一个 pose layer 是一个由 snap 组成的 grid,加上一份它被允许移动的对象清单。这就是全部定义。

眉毛、眼皮、嘴角、一根手指的弯曲程度 —— 每一个都是一个 pose layer,拥有自己的 grid 和自己的 target。

一个 layer 按 snap 存储 一个 frame 号。不是一个 pose —— 是一个 frame。见下方的 Frames 优先

Control

一个 control 是一个转身支架。它带有一个 Front face,并可以选配一个 Back face —— 每个 face 本身都是一个 pose layer —— 外加在成品 rig 里的一个 Front ↔ Back 开关。

control 的意义在于 其他 layer 会跨越它打 key。你的眉毛 layer 并不是只有十五个 pose;而是在头部的十五个 pose 各自之上 都有十五个 pose。头部这个 control,就是让这句话成立的承载父级。

每个 rig 都从一个叫 Head 的 control 开始。你可以重命名它、删除它,或者再加更多。

Target

一个 target 是一个 pose layer 被允许移动的 Harmony 节点 —— 一个 peg、一个变形组、一个 drawing。target 就是 layer 用来知道自己拥有角色哪一部分的方式。

两个 layer 可以指向同一个节点;ORC 会在它们的写入发生重叠时提醒你,并告诉你这重叠是相加还是替换。

Knob

一个 knob 是被当作 使用的 pose layer,而不是当作一组 pose 使用。

把某个 layer 的 Knob 选择器指向另一个 layer,你的 layer 就会同时跨越那个 layer 的各个 position 打 key。一个有 13 个 position 的音素(phoneme)knob,意味着你的嘴部 layer 每个音素只需授权一次 它的 grid。

knob 是一种 角色,而不是一种类型 —— 任何 pose layer 都可以充当它,并且它会保留自己原有的一切:自己的 grid、自己的 target,以及自己已授权的 frame。变成别人的轴,不会拿走这些东西中的任何一样。

两种变体:

它驱动什么
control 的 knob control 自己的 pose grid —— 整个转身跟着它一起动。
extra knob(附加 knob) 只有指向它的那个 layer 会动。

Page、Pair 与 Side

一个 page 是某个 layer 的 grid 的一个编号变体。一个 page 要么装着:

  • 一个 pair —— 两个 grid,Left-1Right-1,要么
  • 一个 solo —— 一个 grid,Solo-1

每个 target 都带有一个 Side,标明是哪个 grid 在驱动它:Left-1Right-2Both-3Solo-1。这就是一个 layer 如何用两个互为镜像的 grid,分别驱动左右两条眉毛。

page 编号是 稳定的 id。删掉 page 2,剩下的 page 仍然是 1 和 3 —— 这个空缺是正确的,因为你的 snap 名字仍然指向它们。

Driver

一个 driver 是把一个值写到某处的 widget —— 一个 slider、一个 checkbox、一个 combo slider,或者一个 2-D pad。

pose layer 说的是 "在这个 position 上,显示 frame 861",而 driver 说的是 "把这个节点的 OPACITY 设为 43.7",或者 "替换这个 drawing",或者 "禁用这个节点"

driver 可以是 global(处处一个值),也可以像 pose 一样 按 snap 打 key。它还可以驱动 另一个 driver,或者给一个 constraint 做 gate。

Constraint

一个 constraint 在节点之间连接变换通道:Copy 让 target 跟随一个 source peg,Lock 把它们冻结在原地。它是一个纯粹的开/关,始终是 global 的,一个 checkbox driver 可以把它打开或关闭。

Look-At

一个 look-at 是一套注视系统:一个负责瞄准的 joystick,以及最多两个独立响应它的东西。

模式 移动的对象 典型用途
Tracked Pegs peg 变换 虹膜、瞳孔 —— 任何在眼睛里滑动的东西
Deform Follow 变形点 眼皮、皮肤 —— 任何应当随注视一起被拖动的东西

两者 完全独立。可以只用其中一个,也可以两个都用。

Visibility Group

一个 visibility group 决定动画师在画布上能看到、能操作什么。组可以嵌套,每一组都可以选择:关掉父级时,是只隐藏子级的 checkbox(Cascade),还是连它们的 widget 也一起隐藏(Override)。

Hidden 是唯一一个永久的组:放进去的东西都是关闭且不可触及的。这是在不删除的情况下把某个东西"封存"的方式。


Frames 优先

关于 ORC,要理解的最重要的一件事。

一个 pose layer 存的是一个 frame 号,而不是一个 pose。

你用 Harmony 真正的工具,在 frame 861 上给角色摆好 pose。你按下 F6。ORC 记下"861"。到 Compose 的那一刻,而且只有到那时,它才会去读 rig 在 861 上实际的样子,并把它烘焙进 Master Controller。

由此得出:

  • 编辑是非破坏性的。 回到 861,修好眉毛,重新 compose。改动会被拾取。任何东西都从未被烘焙进 ORC 内部。
  • 你用的是自己的工具。 ORC 没有 posing 画布,因为 Harmony 本身就是一个。
  • 一份配置是可移植的。 因为 ORC 存的是 position 和 frame 引用,而不是差值(delta),同一套配置可以指向另一个角色。这正是 角色 preset 得以实现的原因。

Position 如何叠加:dimension

这里才是威力所在,而且它比听起来的要简单。

一个 pose layer 打 key 所跨越的:

它自己的 grid   +   承载它的 control   +   它的 knob

它们各自贡献自己的轴,并相乘为一个地址:

这个 layer 轴数 读作
一个 3 × 3 grid 的 global layer,没有 control,没有 knob 2 2D
同一个 layer,放进 Head 这个 control 里 2 + 2 4D
……并跨越一个 13-position 的音素 knob 打 key 2 + 2 + 1 5D
……如果那个 knob 换成一个 2-D grid 2 + 2 + 2 6D

六是一个 pose layer 的实用上限 —— 它自己的 grid、它的 control,以及一个 knob,每个最多两维。driver 和 look-at 字段能到 ,因为它们自己的 widget 会在同一套叠加之上再加上自己的维度。

Outliner 会在每一行显示这个数字,悬停时会用文字把这个和数拼出来。

每一个 dimension 都会让工作量翻倍

一个 5 × 3 的 control 配一个 3 × 3 的 layer,就是 135 个 pose。再加一个 13-position 的 knob,就是 1,755 个。ORC 会随着数字上升发出警告,但永远不会阻止你 —— 那些 pose 终究是你要去授权的。

Key domain

一个 key domain 是某个东西被打 key 所跨越的 position 集合。pose layer 的 key domain 来自它在树中所处的位置。driver 和 look-at 则要显式选择自己的:

Domain 含义
Global 处处一个值。完全不打 key。
Control control 的每个 snap 一个值。
Pose Layer layer 的每个 snap 一个值 —— 在 control 的每一个 pose 上都 相同
Control + Pose Layer 两者的乘积。

这就是为什么在 Outliner 里移动一个节点会改变它的行为:它坐在哪里,就决定了它跨越什么打 key


Interpolation

在 snap 之间,ORC 会做插值。拖动下面的 handle,看看周围四个 snap 各自分得的份额 —— 权重之和始终为 1。

关掉 Interpolation 会让最近的那个 snap 直接胜出,不做混合。这是成品 rig 里的一个运行时开关,动画师可以在平滑的 control 和硬切步进的 control 之间切换。


Widget 形状

四种形状,分布在两条轴上:有多少维,以及 handle 会不会 停靠

离散(会停) 连续(不会停)
1-D Combo Slider Continuous Slider
2-D Combo Grid Continuous Grid

再加上 Checkbox,只有两种状态,中间什么都没有。

图标本身 就是 定义

内部的线条就是 snap 的停靠点。 连续类型的画法与它的离散孪生体完全一样,只是去掉了那些线。

pose 永远是离散的 —— 一个 pose layer 就是一 pose。driver 的 pad 永远是连续的 —— 一个离散的 2-D 东西就只会是一个 pose layer 了。


全部如何拼在一起

Rig
├── Head                        ← 一个 Control:Front + Back face
│   ├── Look-At                 ← 锚定在这个 control 上
│   ├── Head Knob               ← 一个 Knob:control 自己的轴
│   │   └── Mouth Corners       ← 一个跨越该 knob 打 key 的 Pose Layer
│   ├── Eyebrows                ← 一个跨越该 control 打 key 的 Pose Layer
│   └── Eyelids
├── Exagerate Exp               ← 一个 Driver
└── Constraint 1                ← 始终是 global

Visibility Groups
├── All
│   ├── Head
│   ├── Eyebrows
│   └── Controls
└── Hidden                      ← 永久的收纳处

把这棵树读成一句句话:

  • Mouth Corners 跨越 Head Knob 打 key,而 Head Knob 又跨越 Head —— 所以它是 5D 或 6D。
  • Eyebrows 直接跨越 Head 打 key —— 4D。
  • Constraint 1 是 global 的;它完全没有 position。
  • 每一个可见的东西都属于某个 visibility group。

接下来去哪

从头到尾搭一个 Quick Start
了解这个窗口 界面总览
深入这棵树 The Outliner
深入 dimension Dimensions & Key Domains