スキニング

BVHの情報を収集していたらよい講座を発見。
http://www.cg.ces.kyutech.ac.jp/lecture/cg2/
BVHビューワがソース付きであるのでこれを足がかりにスキニングの理解を進めることができそうだ。

とりあえず
1. ボーンのキーフレームアニメーション(BVH オイラー角)
2. ウェイトブレンディングのスキニング(PMDデータとBVHモーションで実験)
3. VMDからのモーション実験
という順番で進めよう。
3でIKが必須になるのでまた頓挫することになるのだが、個別の問題を各個撃破していく。
この各個撃破が問題で、DirectXのSkinnedMeshサンプルなんかはそれを拒むのよね。
DirectXの経験が足らんのですけども。


BVH解読完了。

BVHはすべてのフレームにぎっしりデータがつまっているのでフレーム間の補完は無い。これってキーフレームアニメーションって言わないような気がするな。HIERARCHYからツリー構造を組み立てたら基本姿勢の描画はこんな感じに。

def DrawBone(joint):
    glPushMatrix()

    glTranslate(*joint.offset)

    if joint.tail:
        # 子ジョイントの無い末端(End Siteに対応)
        glBegin(GL_LINES)
        glVertex3f(0, 0, 0)
        glVertex3f(*joint.tail)
        glEnd()
    else:
        for child in joint.children:
            # 子ノードとカレントノートの原点をつなぐ
            glBegin(GL_LINES)
            glVertex3f(0, 0, 0)
            glVertex3f(*child.offset)
            glEnd()
            DrawBone(child)
   glPopMatrix()

glRotateとか使っているのでまだ行列すら登場していない。

次は、これにメッシュを合体してWeightBlendingをのせてみる。
が、BVHのボーン構造と名前が一致するちょうどいいモデルが無いんよね。
探すか作るか改造するかしないといかんな。