KinectでMMDモデルを動かす話

この投稿は Unity Advent Calendar 2014 の9日めの記事です。
8日目: Unity x WebGL について詳しく調べてみた 10日目: Unity本の書評について書くかも (仮)

 

0. はじめに

この記事は、Unity 上のモデルをリアルタイムで動かしてみようという話です。

MMD4Mecanim でMMDモデルを利用されたことがあり、かつ Kinect または Kinect v2 をPCに接続できる方を対象としています。

下記の環境で動作を検証しました。

  • Unity 4.6.0p1 Free
  • Windows 8.1 Pro 64ビット

Kinect は下記の2種類を試しました。
初代(無印)の方を便宜上 Kinect v1 と呼びます。

 

1. Kinect用パッケージの選定

1.1. Unity で Kinect v1/v2 を扱う手段

(すべて試した訳ではありませんが)下記あたりがあります。

名称 作者 Kinect v2 Kinect v1 備考
Zigfu Motion Arcade Inc. × 過去にはよく使われた
Kinect Wrapper Package for Unity3D CMU ETC
Unity3d WiKi
× こちらも使われてた?
Kinect for Windows v2 essentials
Unity Pro packages
Microsoft × 公式のデモ一通り
Unity Pro 用
Free KinectV2 (株)システムフレンド ○? シンプルなサンプル
独自ライブラリ利用
UnityKinect2Miku ほえたん さん × モーションを保存できるツールもサイトにあり
UnityKinectMiku ×
Kinect v2 with MS-SDK R. Filkov さん オススメ!
Kinect with MS-SDK × 無料だが
関節指定が手間

このうち、2013年頃までは Zigfu が使われている例(Oculus Rift と KinetでVRネトゲを作ってみるべきではなかったかもしれない など)が多かったようです。
しかし有料ですし、現在は更新が途絶えているようでもあり、お薦めではありません。

1.2. おすすめパッケージ

お薦めなのが R.Filkov さん (RF Solutions) の Kinect v2 with MS-SDK パッケージです。
結構前から無料で公開されていたのですが、サムネイルが怪しげな印象だったり、アセットのページに出てくるモデルが萌えないキャラだったりして敬遠されていた気がします。
image
image
Free版 Unity でも動作しますし、ジェスチャ認識ができたり、高機能です。
名前が Kinect v2 ですが、このパッケージで Kinect v1 / v2 どちらでも動きます! 便利!

有料なのがネックですが、学生・教員なら作者の R.Filkov さんに英語でメールをすれば無料で送ってくれました。
ただし $10 とそう高くはなく、バージョンアップ時にもダウンロードできるため、アセットストアから購入した方が楽だったりします。
(R.Filkovさんは無料としたかったようですが、事情により有料となってしまったようです。)

今回この記事では Kinect v2 with MS-SDK と Kinect を使ってMMDモデルをリアルタイムに動かす手順を解説します。

といっても、このパッケージはすでに from2001vr さんが紹介されています (^^;
ここでは、そこで触れられていなかったMMDモデル用の調整を主に書きます。

2. MMDモデルの準備

MMDモデルをUnityに持ち込むのは Nora さんの MMD4Mecanim をありがたく利用させていただいてます。
MMDモデルを表示させるまではStereoarts Homepage の解説や、hiroyuki_hon さんの去年の記事などもありますし、Oculus Riftでオレの嫁と会える本 でも説明されることかと思いますので、省略させていただきます。
今回モーションは Kinect から得るため VMD は加えず、MMD4Mecanim チュートリアル(基本編).pdf の「シーンへのオブジェクトの配置」の手前までが済んだものとします。

2.1. Rig の Animation Type を Humanoid にする

MMD4MecanimでProcessした後でできるfbxモデルを選びます。その Inspector で

  1. 「Rig」を選ぶ
  2. 「Animation Type」を Generic から 「Humanoid」 に替える
  3. 「Apply」を押す

という手順で、Rig を替えておきます。
VMDモーションを適用する際は Generic の方が良い面がありますが、今回のKinect用アセットなど、人型であることを前提として Mecanim の機能を使っているものには Humanoid とします。
こうすることで個々の関節をこちらで意識せずとも、よろしく動かしてくれます。
image

2.2. T-ポーズをとらせる

Unityちゃんなど、元からUnity用に作られたモデルは腕を横に伸ばした “T-ポーズ” をしていることが多いです。
しかしMMDでは腕が斜めに下がった “A-ポーズ” が基本のため、同じ動きをさせても姿勢がおかしくなります。
あらかじめ肩だけ回転させておくなどでも対応できますが、より確実な方法があります。
image

再びモデルの Inspector で

  1. 「Rig」を選ぶ
  2. 「Configure…」を押す

保存を求められたら、指示にしたがって保存しつつ進みます。
image

マッピングの画面になりますが、大抵は自動的に割り当てられていますのでそれでOKです。
image

そのときにSceneをみると、T-ポーズでモデルが出ているはずです。
image
そうなっていなければ、Mapping が出ている状態で下の方にある「Pose」から「Enforce T-Pose」を選びます。
image

Hierarchy の一番上を見ると、「元のモデル名(Clone)」となっています。
これをProjectの適当なフォルダまでドラッグします。
image

すると 元のモデル名(Clone) という名前で prefab ができるはずです。
image

「Done」を押して戻ります。
image

元のモデルのfbxと、(Clone)となったprefabがあるはずですが、(Clone)の方をシーンに追加します。
image
元のモデルの A-ポーズ ではなく、はりつけ T-ポーズ となっています。
これで、Kinectで動かす準備が整いました。

3. Kinect for Windows Runtime のインストール

Kinect v2 を使うためには Kinect for Windows Runtime 2.0 が必要です。
まだ入っていない場合はいったん Unity は閉じて、インストールしておいてください。
Kinect for Windows SDK 2.0 をインストールするとその中に含まれますが、
Kinect for Windows Runtime 2.0 だけでも動かせます。
ただし、Kinect V2 の動作環境が厳しいため、SDKの方を入れてその中のサンプルが動くかをUnityで使うより先に確認できると、より確実です。
SDKを入れると SDK Browser v2.0 というものがスタートメニューに入るので、それを起動して適当なサンプルいくつか Run して試してみましょう。

なお Kinect v1 を利用する場合は 2.0 ではなく
Kinect for Windows SDK v1.8 をインストールしてください。

4. Kinect v2 with MS-SDK パッケージのインポート

パッケージをインポートします。
AvararsDemo/KinectAvatarsDemo シーンを開くと下記のような動作確認ができます。
ですが、以降では新しいシーンでモデルを動かす説明をします。
スクリーンショット 2014-12-07 14.50.00

5. MMDモデルのみのシーンへスクリプトを追加する手順

シーンにはMMDモデルが配置された状態になっているとします。

5.1. Kinect Manager スクリプトの追加

まず、空の GameObject を作成し、「KinectObject」といった名前にしておきます。
image

その KinectObject に、KinectScripts/KinectManager をドラッグします。
Inspector での設定はデフォルトでもいいですが、

  • Compute User Map
  • Display User Map

にチェックをつけると Kinect の捉えたシルエットが表示されるようになります。
ただし、User Map、Color Map、Infrared Map は負荷が高いので、モデルを動かす目的ならば動作確認後は Compute ○○ Map も Display ○○ Map もチェックを外しておいた方がいいでしょう。
image

5.2. AvatarController の追加

今度は KinectScripts/AvatarController を Hierarchy の対象モデルまでドラッグします。
おこのみで下記などを変えてもいいでしょう。

  • Mirrored Movement … チェックすると、鏡のように左右が逆になります。
  • Vertical Movement … チェックすると、上下にも動くようになります。
  • Smooth Factor … 最初 5 ですが、大きくすると反応が早くなります。(その分動きが荒ぶることが多くなります)

image

補足 Kinect with MS-SDK の場合
Kinect v2 with MS-SDK は Humanoid を前提とした Mecanim 対応で不要となりましたが、旧版は全身の関節を割り当てる必要がありました。
image

5.3. 動作確認

以上で動かしてみて、無事モデルがKinectに合わせて動けば成功です。
Release
上の例ではあえて右のモデルはT-ポーズにしていません。
両方とも同時に動かしていますが右下の姿勢とは異なっています。

6. まとめ

私が知る範囲では Kinect v2 with MS-SDK といったパッケージがお薦めとして、Kinect でモデルを動かすまでの説明をしました。
今回はモデルをリアルタイムで動かす説明だけでしたが、パッケージにはスワイプなどのジェスチャ認識や、マウス代わりに使う機能、フェイストラッキング等が含まれていますので、使ってみると面白いと思います。

しかし、薦めておいてなんですが、実は私自身はこのパッケージはほぼ使っていません…。
都合により MVN というモーションキャプチャスーツ用のパッケージ MVN Live Animation (一部改造版)をだいたい利用しています。
正道ではないため制限もありますが、ネットワーク経由でデータを送る形式のため、メリットもいくつかあります。
そちらの解説を含めようと思ったのですが、ここまでと別の話になるため Advent Calendar 外でまた書きます…。

7. 登場モデルについて

この記事では みならいディーバ(※生アニメ)配布ページより
蒼井ルリ、春音ウイ モデルを利用させていただきました。
12月21日にクリスマス生ライブ開催!

次のエントリ

10日目は tanaka_733 さんの「Unity本の書評について書くかも (仮)」です。

 

この投稿は Unity Advent Calendar 2014 の9日めの記事です。
8日目:Unity x WebGL について詳しく調べてみた 10日目: Unity本の書評について書くかも (仮)