【MMD】ミクさん達が武術の練習をしているようです【kinect】

ねんがんの キネクトをてにいれたぞ!

という事で、かねてより構想していた、kinectでのモーションキャプチャMMDで出力 をやってみました。

まず、kinectをPCで使えるようにして(割愛。ここで数日使った…。)から、複数のアプリケーションでキャプチャしてみました。用いたのは、MMD(と、関連のMikuMikuCapture)やLiveAnimationです。

色々試してみて解ったのは、他でも言われているように、撮影する部屋の環境などが認識に大きく左右するようだ、という事ですね。動きに関しては、やはり、身体を回転させたり、見かけ上手足が交差するような動きはキャプチャしにくく、動きが破綻しやすいです。

それでも、簡単な動きなら結構正確にキャプチャしてくれるし、自分の動きに合わせてモデルが動くというのは、なかなか感動するものです(Xboxのゲームの時とはまた違った感じ)。

で、もう少し正確に動きを再現出来る方法は無いものかなあ、と思って探していて見つけたのが、「iPi Motion Capture」(公式サイト)というアプリケーションです。

これは元々、複数のカメラで撮影したデータを用いて、マーカーレスでありながら正確に動きをキャプチャする、というものです。で、そのソフトがどうやらkinectにも対応しているらしいという話を見かけたので注目しました。そして、トライアル版があったのでダウンロードした次第。

このアプリケーションは、他のものと違って、まずkinectで動きを撮影し深度情報を取得しておいて、後からトラッキングを行う、というノンリアルタイムの方式です。ですので、リアルタイムでモデルを動かすというコンセプトのものより比較的正確に動きを再現出来ます。もちろん、トラッキングには時間がかかりますし、色々修正が必要なので、それなりに手間も時間もかかりますが(低スペックのPCだと相当かかる)。

また、やはりこちらも、撮影する環境が重要です。それなりに動きが取得出来るようになるまで、結構苦労しました。部屋の広さや障害物、着ている物などの条件で相当左右されるみたいです。

で、何とか色々工夫して出来たのが、こちらです。

MMD+ipiMocap+kinect
※リンクは vimeo です。vimeoの動画をはてなダイアリーに埋め込む方法を調べてやろうとしてみましたが、出来ませんでした。なんか、生成される old embed code 自体が違っている気がします。

Lat式ミクさんにモーションをつけました。動きの流れは、

  1. 突き×3
  2. 正面打ち(剣)×3
  3. 抜刀×2

です。剣の動作は、道具を持つとキャプチャ出来ないので、いずれも無手で、少し大きく手を離して行いました。もちろん、キャプチャしたのは私自身の動きです。

足を隠してあるのはわざとです。ipiMocapでBVH出力→LiveAnimationにBVHインポート→VMDエクスポート という流れで作ったのですが、どうしてもVMDに変換した時に、手首や足首の角度がおかしくなってしまうので、結局ごまかしました。

で、ipiMocapから出力した動画がこちらです⇒
ipiMocap+kinect

どうでしょう。上手くトラッキング出来る角度を検討してから撮影したとはいえ、なかなかよく取れているのではないでしょうか。最初にTポーズを作った以外には手を加えていませんし。kinect1台でこのくらいのモーションキャプチャが出来るというのは、なかなかに優れものだと思います。*1

元のモーションとMMDのものとを較べると、やはり変化していますね。カクついていたり、動きがこじんまりした印象があります。ここら辺の調整は難しそうです。

続けて、諸手取り呼吸法です(モデルは炉心リン非公式夏C)

諸手取り呼吸法MMD

諸手取り呼吸法ipi

MMDの方は大分カクカクと言うかガタガタと言うか、今ひとつですね。

動きを見ると、顔が手の方を向いていて、奥の方の腕が上に返っていません。これはトラッキングのミスですね(諸手取り呼吸法では相手の方を見てはならない)。首の回転は取得しにくいのかも知れません*2

とまあ、ひとまずはこんな感じです。kinect一台を用いてのキャプチャでも、結構いい感じに出来ます。ipiMocapは数万円しますが、カメラを数台使えば相当に正確なキャプチャが出来るようです。一式揃えても10万程度でしょうか。10万円くらいで、個人レベルで ある程度のモーションキャプチャが行えるとは、実にいい時代になったものですね。

*1:Dualkinectという機能もあって、これは二台kinectを使って、より正確にキャプチャ出来るそうです。

*2:ほとんど動かずその場で行なっていますが、これは部屋が狭いために大きく動けなかったからです。