この投稿は 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 と呼びます。
- Kinect for Windows + Kinect SDK v1.8.0.595
- Kinect for Windows v2 + Kinect SDK v2.0.1410.19000
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 パッケージです。
結構前から無料で公開されていたのですが、サムネイルが怪しげな印象だったり、アセットのページに出てくるモデルが萌えないキャラだったりして敬遠されていた気がします。
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 で
- 「Rig」を選ぶ
- 「Animation Type」を Generic から 「Humanoid」 に替える
- 「Apply」を押す
という手順で、Rig を替えておきます。
VMDモーションを適用する際は Generic の方が良い面がありますが、今回のKinect用アセットなど、人型であることを前提として Mecanim の機能を使っているものには Humanoid とします。
こうすることで個々の関節をこちらで意識せずとも、よろしく動かしてくれます。
2.2. T-ポーズをとらせる
Unityちゃんなど、元からUnity用に作られたモデルは腕を横に伸ばした “T-ポーズ” をしていることが多いです。
しかしMMDでは腕が斜めに下がった “A-ポーズ” が基本のため、同じ動きをさせても姿勢がおかしくなります。
あらかじめ肩だけ回転させておくなどでも対応できますが、より確実な方法があります。
再びモデルの Inspector で
- 「Rig」を選ぶ
- 「Configure…」を押す
マッピングの画面になりますが、大抵は自動的に割り当てられていますのでそれでOKです。
そのときにSceneをみると、T-ポーズでモデルが出ているはずです。
そうなっていなければ、Mapping が出ている状態で下の方にある「Pose」から「Enforce T-Pose」を選びます。
Hierarchy の一番上を見ると、「元のモデル名(Clone)」となっています。
これをProjectの適当なフォルダまでドラッグします。
すると 元のモデル名(Clone) という名前で prefab ができるはずです。
元のモデルのfbxと、(Clone)となったprefabがあるはずですが、(Clone)の方をシーンに追加します。
元のモデルの 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 シーンを開くと下記のような動作確認ができます。
ですが、以降では新しいシーンでモデルを動かす説明をします。
5. MMDモデルのみのシーンへスクリプトを追加する手順
シーンにはMMDモデルが配置された状態になっているとします。
5.1. Kinect Manager スクリプトの追加
まず、空の GameObject を作成し、「KinectObject」といった名前にしておきます。
その KinectObject に、KinectScripts/KinectManager をドラッグします。
Inspector での設定はデフォルトでもいいですが、
- Compute User Map
- Display User Map
にチェックをつけると Kinect の捉えたシルエットが表示されるようになります。
ただし、User Map、Color Map、Infrared Map は負荷が高いので、モデルを動かす目的ならば動作確認後は Compute ○○ Map も Display ○○ Map もチェックを外しておいた方がいいでしょう。
5.2. AvatarController の追加
今度は KinectScripts/AvatarController を Hierarchy の対象モデルまでドラッグします。
おこのみで下記などを変えてもいいでしょう。
- Mirrored Movement … チェックすると、鏡のように左右が逆になります。
- Vertical Movement … チェックすると、上下にも動くようになります。
- Smooth Factor … 最初 5 ですが、大きくすると反応が早くなります。(その分動きが荒ぶることが多くなります)
補足 Kinect with MS-SDK の場合
Kinect v2 with MS-SDK は Humanoid を前提とした Mecanim 対応で不要となりましたが、旧版は全身の関節を割り当てる必要がありました。
5.3. 動作確認
以上で動かしてみて、無事モデルがKinectに合わせて動けば成功です。
上の例ではあえて右のモデルは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本の書評について書くかも (仮) |