在理解 FBX SDK 数据结构方面需要一些帮助

Need some assistance in understanding FBX SDK data structures

我正在尝试将一些旧文件的动画转换为 FBX 文件格式,以便将它们导入 Unreal engine。我目前正在研究数据结构,看看我所拥有的如何与 FBX 数据结构相关联。我有几个问题想请社区帮助我理解:

  1. 我可以单独制作动画吗?比如,我是否必须在 FBX 文件格式中附加骨架?我问是因为是的,我确实有动画的骨架,但我希望能够单独提取它们。 Unreal 能够在程序中处理它们的组合,但理论上可以先导出骨架然后再导出动画吗?或者我是否必须在动画导出中有骨架才能使 FBX 文件格式正常工作?

  2. 尽管如此,旧的动画文件确实引用了骨骼。对于骨骼,我只有所属骨骼的名称。没有id,只有一串名字。这很好。因此,当我为动画构建 FBX 时,我将创建一个包含所有数据的场景。现在对于堆栈和图层,我应该给每个骨骼命名它自己的堆栈吗?或者我应该只有 1 个堆栈并在下面为每个骨骼命名它自己的层?

注意:这仅适用于 1 个对象。每个场景将只有 1 个我正在制作动画的对象。永远不会超过 1 个对象。

Do I have to attach a skeleton within the FBX file format?

FBX 使用 FbxAnimCurveNodes 到 link FbxAnimCurves 到动画 FbxObject properties(例如平移和旋转) .因此,如果您从文件中省略骨架,那么理论上 FbxAnimCurveNodes 将变得无用,剩下的就是通用的 FbxAnimCurves.

一个FbxAnimCurve本身并没有多大意义。您可以将其视为传统的数学函数 f(n)f(n) 是沿着 X-axis 驱动平移还是驱动围绕 Y-axis 旋转?没有嵌入式信息告诉 什么 实际上是随时间变化的。 (也就是FbxAnimCurveNode的作用。)

综上所述,您或许可以为每条曲线命名。例如,“left_wrist_position_x”或“hip_rotation_z”。 (不过,这种方法可能不适用于 Maya 等程序。)

Now for the stack and the layer, should I give each bone name it's own stack? Or should I have only 1 stack and underneath that give each bone name it's own layer?

要回答这个问题:你也不会真的这样做。骨骼被定义为附加了 FbxSkeleton 属性的 FbxNode

您可以将 FbxAnimStack 视为单个角色的动画序列集合。然后,您可以将 FbxAnimLayer 视为角色的不同序列,例如站立、行走和 运行。每个 FbxAnimLayer 都包含一个 FbxAnimCurve 的集合,这些集合被 link 编辑为对象平移、旋转甚至更改 material 颜色等属性 - 使用 FbxAnimCurveNode s.

FBX SDK 还允许您在图层之间进行混合 - 例如,将步行周期混合为 运行 周期。

希望对您有所帮助!

Autodesk 对这些类型进行了更深入的介绍 here