ビデオ ゲームのアニメーション ファイルをリバース エンジニアリングしていて、レンガの壁にぶつかりました。アニメーション セットは次のように構成されています。
各アニメーション セット:
- アニメーション セット名: アタック
- 骨の数: 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(多項式係数の評価)は、私が必要としているもののようです:
係数 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
- Coeff4: -0.00210184
セグメント 2
- Coeff1: -0.181324
- 係数2: 1.09073
- Coeff3: -1.77627
- 係数4: 0.920407
セグメント 3
- Coeff1: -0.0335189
- 係数2: 0.265863
- Coeff3: -0.359457
- 係数4: 0.147228
私がこれを見ている方法は、各セグメントが持続時間の 1/3 (1.03333) であり、さらに各セグメントの係数がキーの数の 1/3 (31) で評価されることですが、上記のpoly(lst, x)
関数を使用した出力為に
- セグメント 1 = 0.019 ~ 4.90 ~ -7.15
- セグメント 2 = -0.18 ~ 20985.41
- セグメント 3 = -0.03 から 3296.11 まで
出力が高すぎるため、明らかに私は何か間違ったことをしています。
どんな助けでも大歓迎です!