MMDのデータ(PMDとVMD)をロードするということをやっていて、
今現在苦労中です。ここまでくるにも色々と気をつけなくてはいけない点がありました。防備録というかメモというか記しておきたいと思います。すごく今更ですが・・・。
座標系
データは左手座標系で格納されている。
右手座標系で処理している場合には、Z値の反転とポリゴン面の表裏が反転するので
その補正を行うこと。
親子構造に関して。
ボーンの親子構造においてローカル座標ではなくグローバル座標で位置が記録されている。よくあるモデルデータにおいてのローカルマトリクスは存在しないので、この位置と親の情報を使ってローカルマトリクスを生成する必要がある。
(親のワールドマトリクスと今求めたローカルマトリクスでの計算結果が、元々記録されていたグローバルでの位置と一致しないことがあるので注意が必要)
(スキニングメッシュの描画がおかしくなってこのことが発覚した。)
スキニングメッシュでの定番のバインド行列は回転が空のため、またボーン位置をグローバル座標で保持しているため簡単に求まる。
PMDデータは上記の性質により、頂点データをロードして単一のワールドマトリクスで描画させるとAスタンスのモデル形状として描画することが出来る。すごく簡単。
アニメーションについて。
アニメーションのデータはボーンの位置データと回転データを保持している。
ここまでは多くのデータと変わらないが、位置データは実はローカル座標でもグローバル座標でもなく、ローカルでのオフセット値が格納されている。
ネットで調べると親からの相対オフセットが格納されているということなので、これはすなわちローカル座標系でのオフセット値となるので、その情報と一致している。
足はIK(Inverse Kinematics)によって制御されるのでアニメーションのデータとしては
記録されていない。うまく動かすためには相当大変なようだ。
コメント