スキニングその3

MIKOTO式のMQOをBVHモーションで動かす実験は中断することにした。


モデルとモーションで参照するボーンが一致していない場合のスキニングは、スキニング以外のところで難易度が高いことが判明。
命名規則による右左の自動展開だとか、大きさが違うとか、肩の分岐が腰からか首からかで構造が違うとか手に負えず。

BVHからは、
1. HIERARCHYからスケルトンを構成する。
2. OpenGLの行列スタックを利用したルートボーンからの描画
3. BVHの回転をglRotateで適用して再生する
4. OpenGLの行列スタックを利用せずに自前で行列を計算してglMultMatrix
5. ルートボーンからではなくフラットなリストを順にglMultMatrixで描画する
までやった。
ボーン自体の描画はやったが、ボーンに所属するメッシュを一緒に動かすところはまだ。変換せずに使えるちょうどいいデータを調達するのも時間がかかりそうだ。
ということでMIKOTOはまた放り出して、PMDとVMDでのモーション再生に進む。

メモ

なんとなくスキニングの理屈はわかってきた。
Weight付きの頂点をボーンで移動させようとすると、

行列セットアップ
頂点配列

だとだめで

for 頂点 in 頂点リスト
  重み付き行列セットアップ(weight1 * 行列1 + weight2 * 行列2...)
  頂点

とする必要がある。
明らかにこれは遅いのでどうやって頂点配列を使って重み付きの行列変換を実現するかということになる。で、それが頂点シェーダーによるスキニングか。頂点シェーダーにはテクスチャ経由で行列リストを渡すとなると、1頂点の影響ボーンの数は制限することになるって寸法か。
そこまで辿り着くのはまだだなー。