Transform Sync(.anm / .pvt)¶
有两种文件携带的是运动,不是画稿:
| 文件 | 来自 | 携带 |
|---|---|---|
.anm |
Octo Transform Sync | 带动画的 peg —— 逐帧的位置、旋转和缩放 |
.pvt |
一次 Blender 骨骼烘焙 | 一套骨骼层级及其静置变换 |
两者都可浏览、可进 staging,而且都永远不会变成 drawing。它们搭出的是 peg。
树里落下什么¶
放进任一种,你会得到一个以该文件命名的包装槽位,带着一个 peg、一个 group 和一个 composite(Peg Order: Parent、Comp Order: Inside)。那个包装是 staging 的组织手段,不是骨架的一部分。
在它下面,每根骨骼一个 peg,以骨骼命名。如果导出器已经写上了 Harmony 的 -P / -G / -C 后缀,它们会被剥掉 —— 槽位会加上自己的,而 arm-P-P 帮不了任何人。
来自这些文件的每个 peg 生来就带着:
| 设置 | 值 | 为什么 |
|---|---|---|
| Enable 3D | 按文件里声明的 | 一次 3D 烘焙需要 3D peg |
| Position | 按声明是 3D Path 或 Separate |
导出器知道自己写的是哪种 |
| Exclude AutoPivot | 开 | 枢轴是那次烘焙的,AutoPivot 不能覆盖它们 |
文件里的摄像机 peg 会被跳过 —— 场景有自己的。
Assemble 写入什么¶
对一个 .anm,关键帧会逐帧应用到 peg 上:
POSITION.X / Y / ZROTATION.ANGLEX / ANGLEY / ANGLEZSCALE.X / Y / Z
位置在进来的路上会用场景的视场换算,从 OpenGL 单位转成场景自己的单位 —— 所以一份针对不同工程分辨率做的烘焙,依然落在正确的位置。
在写入关键帧之前会把 position.SEPARATE 设为 true,因为按轴的属性寻址的正是分离通道。
静置姿势也会过来
即使没有关键帧,一个 peg 也会带上文件里声明的欧拉旋转(rotation.anglex/y/z)。一个没有动画的 .pvt 依然是一副能用的骨架。
往返流程¶
预期的流程是:
- Blender / Maya —— 做动画或烘焙。
- Octo Transform Sync —— 导出
.anm。 - OSA —— 把这个
.anm和它所驱动的画稿并排放进 staging,然后一趟组装出整个场景。
这就是这些文件出现在 Browser 里的全部理由:peg 层级和挂在它上面的那些 drawing,不该是两次分开的导入、中间还夹着一步手工重新认父。
校验¶
.anm 在任何东西进 staging 之前就会被检查。它必须声明 format: octo_anm 并带有一个 pegs 键;如果没有,OSA 会在日志里说明,并且什么都不 staging,而不是搭出一个看起来像导入失败的空层级。
.pvt 是一次 Blender 烘焙,不是 Harmony 的枢轴文件
这个扩展名很容易读错。这里的 .pvt 是一份骨骼烘焙 JSON;它和 Harmony 自己的枢轴数据毫无关系。