在 Blender 中¶
Blender 是唯一一个 OTS 不使用自己窗口的宿主。一切都住在一个遵循 Blender 惯例的侧边栏面板里 — 属性行、UI list、operator 按钮 — 因为在 Blender 里放一个浮动的 Qt 对话框会像个外来客。
功能是一样的。布局是 Blender 的。
找到这个面板¶
用 N 打开 3D 视图侧边栏,并选择 OTS 标签页。
和 Harmony、Maya 窗口一样的四项工作,在这里表现为一个面板中的若干可折叠区块:
一个已加载、准备重建的 .pvt。Create Bake Bones from .pvt 会为每个 rig 标签构建一个 armature。
顶部是 Scene selection,接着是可勾选的 bone 列表,然后是带 Scale Factor 和 Pivot Space 的 Export Settings。
2/2 matched | Frames 1–60 | 1 cam | 2 rigs,然后是带对勾和摄像机图标的匹配列表,以及三个动作按钮。
带 Select All / Deselect All 的扫描列表,然后是带 Scene Range 的 Range 区块。
三个面板¶
Scene selection¶
永远在最上方,永远显示 OTS 当前看到的选择内容:每一个被选中的 armature,以及每一台被选中的 摄像机,并用一个图标标明它是不是场景中活动的那台。
如果没有可用的选择,它会直说 — "Select an armature in the viewport"。如果选中了不止一个 armature,它会提醒你每一个都会作为它自己的 rig 导出。
这个面板就是"为什么我的导出列表是空的?"的答案 — 在你按下任何东西之前,它就告诉你 Blender 认为你选了什么。
Pivot Files (.pvt) · Animation Files (.anm)¶
每种格式一个可折叠面板,各自包含一个 Import 区块和一个 Export 区块。和 Harmony、Maya 窗口一样的"两种格式 × 两个方向"网格,只不过表现为嵌套的区块。
导出¶
Scan selection 用当前选中的内容填充列表,旁边的计数器显示在总数中有多少行被勾选。Select All 和 Deselect All 就是字面意思。
与 Harmony 和 Maya 的导出列表不同,Blender 的列表 有复选框 — 那是 Blender 自己的 UI list 惯用法,也意味着你可以扫描整个 armature,然后把不想要的 bone 取消勾选。
| 格式 | 额外设置 |
|---|---|
.pvt |
Scale Factor,以及 Pivot Space — Local (relative to parent) 或 Armature Space |
.anm |
Start / End,以及一个 Scene Range 按钮 |
然后点 Export Pivots (.pvt) 或 Export Animation (.anm)。
Pivot Space¶
| 选项 | 含义 |
|---|---|
| Local (relative to parent) | 每个 bone 相对于其父 bone 的位置。默认值 |
| Armature Space | armature 空间中的绝对位置 |
Harmony 和 Maya 永远写 local。除非你有理由,否则把 Blender 留在 Local,这样无论是谁写的,一个 .pvt 的含义都一致。
导入¶
用文件夹按钮挑一个文件,或者粘贴一个路径然后按刷新。信息行会报告找到了什么 — 多少项、匹配上多少、多少台摄像机、帧范围、多少个 rig。
匹配列表用 图标 而不是颜色,因为 Blender 就是这样表达状态的:
| 图标 | 含义 |
|---|---|
| ✔ 对勾 | 已匹配到场景中的一个 bone |
| ⚠ 警告三角 | 未匹配 — 相当于 Harmony/Maya 窗口里的琥珀色行 |
| 摄像机 | 这一项是摄像机;如果它是场景中活动的那台则为实心 |
| Q | 目标 bone 处于 quaternion 旋转模式 |
然后:
- Apply Animation to Bones — 写到所选 armature 中已匹配的 bone 上。上方的标签会告诉你它将应用到多少个 armature。
- Create Bake Bones — 从文件构建骨架并应用动画。
- Create Cameras — 构建摄像机。
对于 .pvt,对应的是 Create Bake Bones from .pvt 和 Create Cameras。
Create Bake Bones 构建出什么¶
文件中 每个 rig 标签一个 armature。单 rig 的文件会沿用文件的基础名。
每个 bone 都以位于原点、朝向 +Y、长度固定且很短的 单位 rest 创建。这是刻意的:有了单位 rest,一个 pose bone 的局部变换恰好就是文件所描述的那个相对于 parent 的变换,于是动画应用时不会有一层修正夹在文件和 pose 之间。
这也意味着静置骨架 看起来不像你的角色。这些 bone 是一致的小短棍;你认得出的那个形状要等动画应用上去才会出现。这是预期之内的 — 它们是 bake bone,不是你会交给动画师手动摆 pose 的那种 rig。
Bone 被设为 XYZ Euler 旋转模式,并在 location、rotation 和 scale 上打关键帧,写进一个新的 action。
没有 Rig 列¶
Blender 的导出没有 Rig 列,而这是有意为之:在 Blender 中 armature 就是 rig。每个被选中的 armature 都作为它自己的 rig 导出,并以自身命名。
这里已经没有什么留给一个列去决定了,因为 Blender 在你给 bone 指定 parent 的那一刻就已经逼你决定过了 — armature 是一个有自己 datablock 的真实对象,而一个 bone 不可能存在于恰好一个 armature 之外。提供"把 bone 重新标记到另一个 rig"的选项,等于承诺一件导出无法兑现的事:一个 parent 住在另一个 armature 里的 bone,等于没有 parent。
Maya 和 Harmony 确实 有这一列,因为在那里"rig"是一种约定(一个 group)而不是一个容器。同一个模型,用各应用自己的语言表达 — 参见 Rig 与多 Rig。
在 导入 时,Blender 完整地尊重 rig 标签 — 一个携带三个 rig 的文件会产生三个 armature。
坐标¶
Blender 是那个 Z-up 的情形,也正是 OTS 要用谨慎方式转换旋转的原因。
位置会从 Blender 的 Z-up 调换到规范的 Y-up。旋转 不会 — 你不能为了改变基底就直接排列 Euler 角;那样会绕着错误的轴旋转,产生一个转过来了但转错了的旋转。OTS 改为通过一次 quaternion 共轭来转换。参见 坐标系。
摄像机在导入时会得到一个 +90° 的 X 倾斜,因为 Blender 的摄像机在 Z-up 世界里沿 −Z 看。这个倾斜在导出时又会被去掉,所以一台朝前的摄像机能干净地往返。
说明与限制¶
Blender 的 .anm 读取器假定文件是规范的。 目前每个写入方都输出规范的 .anm,所以这在实践中永远成立 — 但与 .pvt 读取器不同,它不查看文件的头。如果你哪天要手工编辑一个文件,这一点值得知道。
这个 add-on 需要 Blender 4.2 或更高版本,并以 extension 形式安装。
一个 armature,一个 rig,文件中的一个区段。 如果你想在一个文件里放两个角色,扫描之前把两个 armature 都选上。
参见¶
- Rig 与多 Rig — 为什么 Blender 的模型是同一个模型
- 坐标系 — Z-up 转换的完整说明
- 摄像机 — sensor fit、朝向和 clip plane