MMDエコシステムで公開されているモデルファイルやモーションファイルを読み込み、自作のソフトウェアに組み込むためのライブラリがいくつか存在します。自作ソフトウェアの中で完成度の高いモデルをぐりぐり動かせるのはとっても魅力的ですよね。.NET環境ではMikuMikuFlexの完成度が高いですが、C++から利用できるクロスプラットフォームなライブラリはありませんでした。
そんな中、sn0w75さんのクロスプラットフォームPMX表示ライブラリ、MikuMikuPenguin(MMP)が少し前に公開されました。
とりあえず手持ちのUbuntu 12.04LTSでビルドして実行してましたので、手順をまとめておきたいと思います。
まずはMikuMikuPenguinプロジェクトをCloneします。
$ git clone https://github.com/sn0w75/MikuMikuPenguin.git $ cd MikuMikuPenguin
次に、自分の環境のOpenGLのバージョンをチェックします。
$ glxinfo | grep OpenGL OpenGL vendor string: Intel Open Source Technology Center OpenGL renderer string: Mesa DRI Intel(R) Ironlake Mobile OpenGL version string: 2.1 Mesa 9.1.7 OpenGL shading language version string: 1.20 OpenGL extensions:バージョン2.1みたいですね。
手持ちのThinkpad X201は無印世代のCore iシリーズなのでちょっと古いです。
$ git checkout -b legacy-210 origin/legacy-210
まずは、gcc4.8が必要なので(オプションでc++11が指定されているためです)、gcc4.8をインストールします。標準ではパッケージレポジトリに入っていないのですが、ppaがあるので、利用させていただきましょう。(参考)
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test $ sudo apt-get update $ sudo apt-get install gcc-4.8 g++-4.8 $ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50 $ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50 $ sudo update-alternatives --config gcc $ sudo update-alternatives --config g++
次に、依存関係のあるファイルをインストールします。GLFW、GLEW、GLM、SOIL、Bulletですね。
$ sudo apt-get install libglfw-dev libglew1.6-dev libglm-dev libsoil-dev $ sudo add-apt-repository ppa:blk/ppa $ sudo apt-get update $ sudo apt-get install libbullet-devBulletはUbuntu 12.04だと標準のパッケージレポジトリには含まれていません。
Bulletのppaはいろんな方が用意されているのですが、倍精度用のものは利用することができません。Bulletのビルド時に-DUSE_DOUBLE_PRECISIONフラグが付いていると、一部の関数の引数がdoubleに変更されるようです。MMPは単精度のBulletが必要なので、ビルド時に
../libmmp/.libs/libmmp.so: undefined reference to `btCapsuleShape::btCapsuleShape(float, float)' ../libmmp/.libs/libmmp.so: undefined reference to `btRigidBody::setDamping(float, float)' ../libmmp/.libs/libmmp.so: undefined reference to `btGeneric6DofSpringConstraint::setStiffness(int, float)'みたいなエラーが出てしまいます。
このエラーが表示された場合には、Bulletのパッケージを見なおしてみましょう。なお、ppa:blk/ppaさんのレポジトリは単精度なので、大丈夫です。
ビルドにはAutotoolsが必要になるので、インストールします。
$ sudo apt-get install automakeこのままautoreconfすると、
configure.ac:8: required file `./config.guess' not found configure.ac:8: `automake --add-missing' can install `config.guess' configure.ac:8: required file `./config.sub' not found configure.ac:8: `automake --add-missing' can install `config.sub' configure.ac:6: required file `./install-sh' not found configure.ac:6: `automake --add-missing' can install `install-sh' configure.ac:6: required file `./missing' not found configure.ac:6: `automake --add-missing' can install `missing' libmmp/Makefile.am: required file `./depcomp' not found libmmp/Makefile.am: `automake --add-missing' can install `depcomp'と怒られたので、
$automake --add-missingで足りないファイルを補いました。
ここまで揃ったら、いよいよビルドを行います。
と言っても、
$ autoreconf $ ./configure $ makeで、おしまいです。autotoolsがいい感じにビルドしてくれるはずです。
ビルドが終わったら、
$ ./pmx model_file.pmx motion_file.vmd
で実行されます。デフォルトだとウィンドウサイズが大きすぎる場合には、
src/Viewer.cppのViewr::initGLFW関数の中にあるウィンドウサイズの部分を
static const int SCREEN_WIDTH=960,SCREEN_HEIGHT=540;
みたいに書き換えるといいと思います。アスペクト比が16:9じゃないと表示が伸びちゃうみたいです。
まままさんのGUMI V3モデルと、
hino_mmd39さんの私の時間shortモーションでテストしてみました。
若干顔色が悪いのは顔モーフが間違ってるせいですかね…?
あと、プロジェクトのissuesにあるとおり、足の逆運動学計算がバグを含んでいて、たまに足が折れます。
IKは全然詳しくない上に、OpenGLや物理演算もど素人ですけど、
色々いじってみて、最終的にはPull Requestだせたらなぁ…とか思ってます。
とりあえずコード読まないといけませんね。
--
[追記]
既にレポジトリの方では足の逆運動学計算バグは修正されているようです。
0 件のコメント:
コメントを投稿