MMDのデータの再生を相変わらず今更ですががんばって実装していました。
今回は、IKと物理演算について実装を進めてました。前の実装を一度捨ててます…。
そのため、表情モーフも無効となってしまっている状態ですが、今回の物は以下の点を盛り込んでみました。
- DirectXの算術(D3DX)を用いたり、Bullet が持っている算術を使用したり切り替えられること
- Bulletのバージョンに縛られないこと。
これらのメリットを説明しますと、扱っている行列並びや演算順序の部分での余計なトラブルを避けたいため、まずはBulletの算術に統一して扱おう!という考えによるものです。
また、Bulletのバージョンが変わっても(ある程度は)大丈夫というのも、MMDが当初 2.75らしく、それが今のBullet最新では2.81だそうで。なるべく追従していきたいと考えているからです。特に 2.81 ではSIMD最適化も入っているらしくここに実装を変えられるという点はかなり大事だと思っています。
今回は初めて、YouTubeに録画した動画をあげてみました。でもってこれをこのブログに貼ってみるという試みにチャレンジもしてみます。
画質の問題とキャプチャ速度の問題からツールを変えて再キャプチャしたものに差し替えました。 (5/20)
まずは、Bulletの算術を使って 2.81 を用いて再生したものです。
上記をベースにして、DirectXの算術で実装してみた物です。
※ 実時間による補正をいれてないため、使用している演算の速度でこんなに変わってます。DXのほうが速い。
今度はモーションを変えて、Bulletのバージョン違いを試してみました。どちらもBulletの算術使ってます.
こちらが 2.81 を使ってみたものです。
そしてこれが 2.79 を使ってみたものです。
感想など
今までは 2.79で試行錯誤した時間が長かったので一番最後のが安定して動く気はしてます。
ただ問題なさそうな範囲で 2.81 も動いているように見えるので、今回の目標は達成できたかなと思っています。
ちなみにこれらはDirectXの算術をつかっているにもかかわらず全てOpenGLの簡単な描画でやっています。
最後の状態だけ見るとかなりちゃんぽんしてる状態なので、覚えているうちにコードをリファクタリング&コメント付けしておこうと思います。なお、扱っている座標系は全て右手系にしています。これをさらに左手系に対応させるとなるとさらに倍のコード分岐が必要になると思うのでこれにはもう絶望ですね。
というか、Bulletを左手系でうまく駆動させる自信がないです・・・。