跳转至

在 Maya 中

Maya 使用与 Harmony 相同的窗口 — 同样的布局、同样的四个页面、同样的控件 — 只是换成 Maya 的词汇。列表里说 JointJoints,导入按钮说 Apply to Joints

启动

点击 shelf 上的 OTS 按钮。如果它还不在那里,参见 安装 — 把 install_maya.py 拖进 viewport 就能永久设置好。

从 Script Editor:

import launch_transform_sync_maya as ots
ots.main()

四个页面

和 Harmony 一样的二乘二网格,换成 Maya 的词汇:

Maya — .pvt 导入

文件所描述的骨架,按其层级缩进。Build Skeleton 会以干净的 orient 创建这些 joint。

Maya — .pvt 导出

从选择中扫描出来的 joint。Rig 列的初始值取自每个 joint 最近的非 joint 祖先。

Maya — .anm 导入,其中一行未匹配、显示为琥珀色

匹配树。那一行琥珀色的没有找到同名的 joint — 对于一次全新导入中的摄像机 peg 来说这很正常。参见 匹配树

Maya — .anm 导出

正在 Rig 单元格里直接输入一个 rig 名 — 双击即可编辑。Scene range 会从场景填充 Start 和 End。


单位

Maya 是那个 厘米 的情形。OTS 文件里的一切都以米为单位,所以位置在导出时乘以 0.01,导入时再除回去,全部自动完成。

你永远不用去设置它。窗口里没有单位选项,因为从文件的头里读出来严格优于来问你。

在轴向上,一个标准的 Y-up Maya 场景 不需要任何调换 — 它本来就与规范朝向一致。Z-up 的 Maya 场景会被检测出来,并像 Blender 那样调换。

Z-up 的 Maya 场景:handle 会被简化

在 Z-up 场景中,keyframe 的 数值 转换是正确的,但逐关键帧的 bezier handle 只输出插值类型,而不带显式 tangent。如果你在意精确的 tangent 形状,就在 Y-up 下工作。


导出

选中那些 joint — 以及任何摄像机 transform — 然后在导出页上按 +

Rig 列的初始值取自每个 joint 最近的非 joint 祖先,这通常就是你早已用来组织场景的那个 group。双击单元格重命名,或者从下拉框里挑另一个 rig 来合并进去。

Maya 之所以得到一个可编辑的列,理由和 Harmony 一样:Maya 的 joint 只是一个变换节点,根本没有 armature 对象,所谓"rig"是你自己选的一种约定。而 Blender 的这一列是锁死的,因为在那里 armature 是一个真实的容器。参见 Rig 与多 Rig

连通性锁依然生效:你可以合并互不相连的 root,绝不能拆开一条已连接的 chain。

对每个 joint,OTS 会记录每个打了关键帧的帧上的 world matrix,并换算成相对于最近的那个 被导出的 祖先。Keyframe 从全部九个变换通道收集,再加上范围的边界。插值类型从旋转曲线的 out-tangent 类型读取:

Maya tangent 变成
Step CONSTANT
Linear LINEAR
其他任何 BEZIER,带显式 handle

导入

Browse…,检查匹配情况,然后选择:

  • Apply to Joints — 写到已匹配且被勾选的 joint 上。
  • Create Rig — 从文件中折叠进来的 rest pose 构建 joint 并应用动画。
  • Create Cameras — 构建摄像机。

每一次写入都被包在单独一个具名的 undo chunk 里,所以一次 Ctrl+Z 就能撤销整个操作。

Create Rig 构建出什么

Joint,以 干净的 orient 创建:XYZ rotate order,joint orient 归零,rotate axis 归零。所有旋转都存放在 .rotate 里。

这一点很重要。一个 joint orient 非零的 joint 会在两个地方各携带一部分旋转,于是应用上去的动画最终会和它打架。把 orient 归零、把一切都放进 .rotate,就能让文件里的动画精确落到文件所说的位置。

当文件包含 不止一个 rig 时,每个 rig 都会得到自己的空 transform group,它的各个 root 挂在下面。单 rig 的文件会跳过这个 wrapper — 不要没意义的 group。

Tangent

应用时:

文件里写的 Maya 得到
LINEAR 进出都是 Linear tangent
CONSTANT Step out tangent
带 handle 的 BEZIER Weighted tangent 开启,固定的 in/out,角度和权重取自文件
不带 handle 的 BEZIER 默认的平滑插值

位置 handle 的值会和关键帧一起从米缩放到厘米,所以曲线形状会挺过这次单位变化,而不是被它压平。


摄像机

选中摄像机 transform,它就会和其他东西一起导出。

Maya 没有单一的"默认摄像机"标记,所以 OTS 用摄像机的 可渲染 状态以及你当前正透过哪台在看来近似它。导入时,文件中的默认摄像机会被设为可渲染并被切换到。

Create Cameras 会用文件中的垂直 FOV 对着垂直 film aperture 推导出一个焦距,并把 film fit 设为 Vertical。这是刻意的:在自动或水平适配下,视锥会太窄,场景看起来像被放大了。

如果一台摄像机的 peg 纯粹只是为了挂这台摄像机而存在 — 上面没有东西,下面也没有 — 那就不会创建任何 joint,运动会直接烘焙到摄像机 transform 上。参见 摄像机


说明与限制

名称匹配时会剥离后缀,所以一个 Harmony 的 hip-P peg 和一个 Maya 的 hip joint 是同一项。

匹配使用完整的 DAG 路径,所以不同 group 中短名相同的两个 joint 依然彼此区分。

Maya 的读取器对文件版本很严格。 来自旧版 OTS 的文件会写出一条明确的错误,而不是半途导入;请从源应用重新导出。


参见