如何评估动画通道样条的多项式系数?

时间:2014-11-21 22:27:18

标签: python animation reverse-engineering spline polynomials

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

对于每个动画集:

  • 动画集名称:攻击
  • 骨头数量:22
  • 时长:1.03333

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

  • 骨名:骨盆
  • 骨骼ID:0
  • 密钥间隔:0.0333333
  • Keys:31

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

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

但旋转四元数[x,y,z,w]通道被解释为具有N个分段和N个系数的样条曲线,我无法确定如何将样条曲线评估为数据,我可以将其打入3D程序

我知道每个通道的样条曲线都标绘为Y,而X则等于标准化时间(0到1)。

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

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

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段

  • Coeff1:0.0198117
  • Coeff2:0.00826611
  • Coeff3:0.0521381
  • Coeff4:-0.00210184

第2段

  • Coeff1:-0.181324
  • Coeff2:1.09073
  • Coeff3:-1.77627
  • Coeff4:0.920407

第3段

  • Coeff1:-0.0335189
  • Coeff2:0.265863
  • Coeff3:-0.359457
  • Coeff4: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

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

非常感谢任何帮助!

0 个答案:

没有答案