========== VMD ========== mmd.pyにはvmdの読み込み機能を入れてあるのでキーフレームの補間コードをかけばIKの無いモーションであれば既に再生できる。 回転と移動の掛け算順を間違えてしばしはまったw VMDのモーションとキーフレーム補間 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ VMDのキーフレーム(移動(x, y, z)と回転クォータニオン(x, y, z, w))の間の値を線形補完で計算する。 線形補間(lerp: linear interpolation) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 値start, end間をfactor(0~1)で補間すると start * (1-factor) + end * factor となる。 式変形して start + (end-start)*factor 位置に関してはx, y, zの各値に関して上記補間をする。 球面線形補間(slerp: spherical linear interpolation) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ クォータニオンの補間は、各要素を単純に線形補間するのではなくて球面線形補間という決まったやり方がある。 <%= player('vmdturn.mp4', 320, 240) %> モーションはMikuMikuDanceでバレエモーションから拝借 (IK無しのモーション) <%= source_view('src/PMDMeshVMD.py') %> さらに速度が低下して4FPSになってしまった。 また、問題点の切り分けのためモデル、ボーン、モーションを左手系から右手系に変換する(Z軸の反転)のを一時的にやめている。ミクのヘッドセットと腰のベルト?などの左右非対称なところが逆になっている。バックカリングもそのため逆になっている。また、初期状態が向こう向き。 一番楽にこれを直すのは、すべての計算が終わってから(1, 1, -1)のスケーリングをかけることだがでければ右手系で解決したいところ。