Cross Road

Unity、VR、MR、ARを中心とした技術ブログ

Unityでモーションキャプチャを取れるCinema Mocapについて

(部分的にMac上で撮ったスクショでも解説していますが、このアセットはWindowsでしか使えません。あらかじめご了承ください)

これまでに、Cinema Suiteの中で、

Cinema Director

Unityで動画編集のようなことができるCinema Director を試してみました。 - Cross Road


Cinema Pro Cam

Unityで多彩なカメラワークができる、Cinema Pro Camを試してみました - Cross Road


Cinema Themes

色々なカメラエフェクトを付けられる、Cinema Themeを試してみました - Cross Road


を紹介しました。

今回は、Cinema Suiteシリーズ最後の一つである、Cinema Mocapを紹介したいと思います。

Cinema Mocapとは、Kinectで取得した人の動きからAnimation Clipを生成できるアセットです。


目次

0. はじめに - Cinema SuiteとCinema Mocapの関係性 -

1. 準備

2. 代表的な機能の紹介

3. 補足 アニメーションの設定Tips

4. 感想

0. はじめに - Cinema SuiteとCinema Mocapの関係性 -

Cinema MocapをAssetStoreで探すと、Cinema Suiteというアセットも見つかります。

Cinema Suiteとは、制作者が作ったCinema関係のアセットを4種類パッケージにした、まとめ売りの場合の名称です。

もう少し詳しく説明すると、

Cinema Suite ($129)
- Cinema Director ($60)
- Cinema Pro Cam ($50)
- Cinema Mocap ($70 : ただし単体の場合Cinema Mocap2になっているので、一部機能が古い可能性あり(未確認))
- Cinema Themes (無料)

という構成になっています。個別で購入すると$129を超えるのでお得です。
(価格は2016/3/28時点です)

この記事では、Cinema Mocapに注目しました。なお、アセットストアには、同じ製作元が作ったCinema Mocap]というアセットがあります。

説明文を全部は読んでないですが、Cinema Mocap2と、Cinema Suite内のCinema Mocapは同じに見えました。

Mocap2だけに独自機能を入れている可能性もあるかもしれませんが、基本的な仕組みは同一とみてよさそうです。

1. 準備

1-1. Kinect

まずはKinectを準備します。Kinectは、2016/4現在2種類ありますが、どちらでも使えます。初めてKinectを入手する人はXbox One Kinect センサーを購入、元々持っている方は初代のKinect for Windows センサーを使うことも可能です。

ちなみに、Xbox One Kinectセンサー(約14000円)と合わせてPC用のアダプタ(約5000円)も必要ですので、だいたい2万円ほどかかります。

私はXbox One Kinectセンサーを使って試しました。以後の説明では、Xbox One Kinectセンサーを「Kinect」と呼びます。

1-2. PC

次に、Kinectが使えるPCを準備します。Kinectの場合、下記のように、そこそこ性能が高いPCが必要です。

  • 64-bit かつ3.1GHz以上のマルチコアプロセッッサ
  • 4 GB以上のメモリ(8GB推奨)
  • USB 3.0 ポート
  • DX11 と互換性のあるグラフィックアダプタ
  • OSはWindows7,8.1,10(Xbox One Kinectセンサの場合Windows7は対象外)


また、注意事項もあります。

  • Parallele Desktopなど、仮想環境上のWindowsではうまく動かない可能性がある
  • 第一世代のUSB3.0ポートでは、電力不足により動かない可能性がある


もちろん、OculusRiftを始めとした、VRが快適に動かせるPCであれば十分です。

1-3. Kinect SDKのインストール

MicrosoftのHPから入手し、画面の指示に従ってインストールします。

Download Kinect for Windows SDK 2.0 from Official Microsoft Download Center


インストールすると、スタートメニューにこのようなツールが追加されます。

Windows10のスタートメニューに追加されたツール

インストール後、KinectをPCと接続し、Kinect Studioを動かしてみました。

Kinect Studioの下記の赤枠で囲ったアイコンをクリックすると、

Kinect StudioでKinectを接続を開始するボタン

Kinect StudioでKinectを認識したときの画面

このように、Kinectのカメラで撮った映像が見えます。一般的なカメラプレビューにもなりますし、このようにヒートマップのような画面もできます。

Kinect Studio自体も色々とできそうですが、今回は割愛します。

1-4. Cinema Mocapのインポート

Kinectをつないだ状態でUnityを起動し、Asset Storeから購入してimportします。importすると、「Window」からCinema Mocap の機能が使えるようになります。

UnityでCinema Mocapを使うための手順

(注:私はCinema Mocapを含んだ統合版の"Cinema Suite"を購入しているので、Cinema Mocap単体で購入された場合、他のアセットは表示されません)


Mocapのwindowが出るので、Input SettingでKinect2を選んでOnにすると、右側の枠にKinectのカメラで撮影したプレビューが見えます。

アセットインポート後の画面


ここまでやって、ようやく準備完了です。

2. 代表的な機能の紹介

Cinema Mocapの機能は主に3つです。

人の動きからアニメーションクリップを自動生成
ライブアニメーションプレビュー
2-3. フレーム単位でアニメーションを再生

ただし、私の環境では、ライブアニメーションプレビューは動きませんでした。

2-1. 人の動きからアニメーションクリップを自動生成

これは、Kinectの前で動いたモーションを元に、Humanoidモデルのアニメーションクリップを生成してくれる機能です。

1-1から1-4まで完了した状態であることを前提に進めます。まずは設定です。

Output Settingの Save Locationに保存先を指定します。Frame Rateは30のままとし、Animation Nameは好きな名前に変更します。

Recording は、保存内容です。Output SettingsのSessionで、フレーム単位の要素をInspector上でElementとして保存しています。

animationの保存先

Start Delayはセルフタイマーです。5秒を指定すると、"Record"をクリックしてから5秒後に録画が始まります。これで、"Record"の後にKinectの前で動くと、Output Settingsのsaved locationにアニメーションクリップが保存されます。

レコーディングを止めるには、"Stop"ボタンを押します。次に、生成したアニメーションクリップを使えるようにするために、いくつか設定します。


まず、Project Viewから先ほど生成したアニメーションクリップを選択します。設定を変更しなかった場合、Project ViewのAssets/Cinema Suite/Cinema Mocap/Animationsに保存されています。

Cinema Mocapで保存したKinectのアニメーション

今回は、椅子に座って両手を振るモーション(wavehandsという名前にしました)を作ってみました。

まず"MoCapHumanoid@wavehands"オブジェクトの子の一つである、wavehandsというアニメーションクリップを選択します。

Inspector Viewで、Editをクリックします。 

Inspector ViewでEditをクリックする場所

Animationsが選択されているので、Rigをクリックします。

Animationを選択してRigをクリックする画面

animation typeをGenericからHumanoidに変更し、configureをクリックします。

Humanoidのcongifureをクリックする画面


シーンを保存していない場合など、警告が出ることがあります。そのときはyesを選択します。


人体モデルのようなマッピングが出ます。全部緑色になっていることを確認したら、一番下にあるDoneをクリックします。
もし赤い色になっているパーツがある場合、具体的に指定する必要があります。

ボーン設定状況

Doneをクリックすると、Rigの設定画面に戻ります。Configureの左側にチェックマークがつきます。

configure完了画面


これでアニメーションクリップが使えるようになりました。
Project Viewにあるwavehandsを選択すると、アニメーションが出ます。

もし出ていない場合、ここをドラッグして引っ張るとアニメーションが出ます。

アニメーションを表示させる場所

アニメーションが表示した例

アニメーションプレビューの右下のAvatorマークをクリックし、OtherからUnity-chanを選ぶと、プレビューをユニティちゃんに変更できます。

プレビューをユニティちゃんに変更した例

ちなみに、Unity Modelを選ぶと、ユニティおじさん?になります。

ユニティおじさんに変更した例

あとはAnimator Controllerをユニティちゃんに割り当ててシーン実行すれば、このようになります。

Cinema Mocapで撮影した動きをユニティちゃんに当てはめた例



2-2.ライブアニメーションプレビュー

2-1では、カメラプレビューが映っている状態で動くだけなので、自身の動きがどのようにCGモデルに反映されるかは、後で試すまでわかりません。

一方、2-2の機能を使うと、PCにモデルを出現させ、自分の動きに合わせてモデルをその場で動かすことができます。私の環境では動きませんでしたが、参考までに手順を記載します。


1-1から1-4まで完了したことを前提に進めます。Output SettingsのSkeletonを25 joint daeに設定したまま、「GEN」ボタンをクリックします。

すると、このように、黒い人形が出てきます。
(ここでは、人形のRotation.y=180に変更し、Main Cameraを人形に近づけてます)

25 joint daeに skelton設定した状態

次に、Hierarchy View上の人形のオブジェクトをマウスで選択してから、"Record"をクリックします。この状態でKinectのキャプチャーエリアに入ると、自分の動きに合わせて人形も動く、のようです。

2-3. フレーム単位でアニメーションを再生

この機能を使うには、Mocap Windowの表示を、"Record"から"Review"に変更します。

アニメーション再生


続いて、Input SettingsのSessionに、2-1.のOutput Settingsで作ったSessionを指定します。すると、Render Raw Skeletonのボタンが押せるようになるので押します。

Render Raw Skeletonのボタン箇所

押すと、ピンク色の棒人間がScene Viewに出現します。

Scene Viewに出現した棒人間

Frame の "<"や">"を押すと、フレーム単位でアニメーションが再生されます。

あるいは、Unityの標準機能により、Frameという赤枠で囲った辺りを左右にドラッグすると、高速にフレームの数値を変更できます。

フレームレートの変更方法

(マウスカーソルが消えてしまってますが、実際は「Frame」付近をドラッグしています)


ちなみに、現時点では作成したアニメーションクリップを編集・統合する機能はありません。

マニュアルによると、将来的に作る予定だそうです。そのため、現時点では、作成したアニメーションクリップの不要部分を削るには、Unity標準の機能を使います。


まず、2-1と同じように、wavehandsのアニメーションクリップを選択してEditをクリックします。すると、このようにアニメーションクリップのタイムラインが出てきますので、赤枠で囲ったstartとendを調整してから、下にあるApplyをクリックすればOKです。

クリップの不要部分を削る処理

ただし、最初と最後しか削れません。

将来的な機能として、アニメーションクリップの分割や結合ができたらいいですね。


3. 補足 アニメーションの設定Tips

Cinema Mocapとは無関係ですが、ユニティちゃんの表情を変化させるところで少し詰まったので、対応方法を書いておきます。


ユニティちゃんアセットには体全体のモーションサンプルと、表情のモーションサンプルがついています。

Unityの標準機能として、一つのモデルに複数のアニメーション再生の状態を割り当てるには、Animator Controllerの中でLayerという機能を使います。

Animator Controllerの設定項目

赤枠で囲った箇所がそれぞれレイヤーです。


今回は表情変化用にfaceというレイヤーを追加しました。次に、faceの右側にある歯車をクリックすると、いくつか設定項目が出てきます。

Maskの設定箇所

ここでMaskという項目でface only maskを選択します。
(これはユニティちゃんアセットの中に最初から付いているものです)

この状態で、状態遷移の中で表情系のモーションを指定します。こうすれば、表情と身体のモーションを別々に再生させることができます。

4. 感想

アニメーションクリップを0から作るのは大変なので、自分の動きをそのまま取り込めるというのは非常に便利だと思います。

初期準備さえ済ませれば使い方もシンプルです。一方、私の環境で作ったアニメーションクリップは、手足の先が時々変な動きをしてしまうことがありました。

これはKinectの誤検知の可能性があるので、もう少し散らかってない部屋(何も置いてない部屋)で試せば改善される気がします。


また、これでCinema Suiteシリーズを全て調べきることができました。4種類はなかなか量が多かったですが、それぞれ実際に使うこともあるので、わりと役に立っています。

あと、アセットを調べて整理すること自体で、Unityの勉強にもなりました。引き続き、アセットを調べつつ、VR/AR系コンテンツ開発を進めていこうと思います。


ユニティちゃんライセンス

この作品はユニティちゃんライセンス条項の元に提供されています