0

我正在对视频游戏动画文件进行逆向工程,但遇到了一堵砖墙。动画集的结构如下:

对于每个动画集:

  • 动画集名称:攻击
  • 骨头数:22
  • 持续时间:1.03333

随后对于集合中的每个骨骼:

  • 骨骼名称:骨盆
  • 骨骼 ID:0
  • 键间隔:0.0333333
  • 键数:31

然后将以下数据分解为 7 个通道(Position[x,y,z]Rotation quaternion[x,y,z,w]):

Position[x,y,z] 是常量或原始值,我在这里没有问题。

但是 Rotation quaternion[x,y,z,w] 通道被解释为具有 N 段和 N 系数的样条线,我无法准确地弄清楚如何将样条线评估为可以打入 3D 程序的数据。

我知道每个通道的样条曲线被绘制为 Y 和 X 将等于标准化时间(0 到 1)。

这个 Q+A ( Evaluating Polynomial coefficients ) 似乎是我需要的:

系数为 a0, a1, a2, a3........an 的 n 次多项式是函数

p(x)= a0+a1*x+a2*x^2+a3*x^3+.....+an*x^n

并编写为 Python 代码:

def poly(lst, x): 
  n, tmp = 0, 0
  for a in lst:
    tmp = tmp + (a * (x**n))
    n += 1

  return tmp

但是我不确定当我将lst每个段的系数和x = Duration / Keys.

这是第一个动画集的“Rot.x”通道及其分段和系数:

段 = 3

第 1 段

  • 系数1:0.0198117
  • 系数2:0.00826611
  • 系数3:0.0521381
  • 系数4:-0.00210184

第 2 段

  • 系数1:-0.181324
  • 系数2:1.09073
  • 系数 3:-1.77627
  • 系数4:0.920407

第 3 段

  • 系数1:-0.0335189
  • 系数2:0.265863
  • 系数3:-0.359457
  • 系数4:0.147228

我正在查看的方式是每个段是持续时间的 1/3 (1.03333),此外,每个段的系数将在键数 (31) 的 1/3 上进行评估,但使用上述poly(lst, x)函数的输出为了

  • 第 1 段 = 从 0.019 到 4.90 到 -7.15
  • 第 2 段 = 从 -0.18 到 20985.41
  • 第 3 段 = 从 -0.03 到 3296.11

显然我做错了什么,因为输出太高了。

任何帮助将不胜感激!

4

0 回答 0