我正在对视频游戏动画文件进行逆向工程,但遇到了一堵砖墙。动画集的结构如下:
对于每个动画集:
- 动画集名称:攻击
- 骨头数: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
显然我做错了什么,因为输出太高了。
任何帮助将不胜感激!