跳转至

在 Blender 中

Blender 是唯一一个 OTS 不使用自己窗口的宿主。一切都住在一个遵循 Blender 惯例的侧边栏面板里 — 属性行、UI list、operator 按钮 — 因为在 Blender 里放一个浮动的 Qt 对话框会像个外来客。

功能是一样的。布局是 Blender 的。

找到这个面板

N 打开 3D 视图侧边栏,并选择 OTS 标签页。

和 Harmony、Maya 窗口一样的四项工作,在这里表现为一个面板中的若干可折叠区块:

Blender — .pvt 导入

一个已加载、准备重建的 .pvtCreate Bake Bones from .pvt 会为每个 rig 标签构建一个 armature。

Blender — .pvt 导出

顶部是 Scene selection,接着是可勾选的 bone 列表,然后是带 Scale FactorPivot SpaceExport Settings

Blender — .anm 导入

2/2 matched | Frames 1–60 | 1 cam | 2 rigs,然后是带对勾和摄像机图标的匹配列表,以及三个动作按钮。

Blender — .anm 导出

Select All / Deselect All 的扫描列表,然后是带 Scene RangeRange 区块。

三个面板

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 AllDeselect All 就是字面意思。

与 Harmony 和 Maya 的导出列表不同,Blender 的列表 有复选框 — 那是 Blender 自己的 UI list 惯用法,也意味着你可以扫描整个 armature,然后把不想要的 bone 取消勾选。

格式 额外设置
.pvt Scale Factor,以及 Pivot SpaceLocal (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 .pvtCreate 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 都选上。


参见