目次
4. 編集
4-1. モーションムービーファイル(.avi)を開く
4-2. キャリブレーションシーンファイルを開く
4-3. モーションの編集する範囲を決める(開始フレームと終了フレームの設定)
4-4. ソフトのモデルの位置と体型をアクターに合わせる。
4-5. アクターの動きに合わせフィットさせていく
4-6. モーション全ての動きを補整し、自然な動きにする。
4-7. モーションデータ(.bvh)をエクスポートする。
4-8. Vicon との比較 (編集編)
4-9. Kinect による問題 (編集編)
4. 編集
ここでは、Kinect で撮影したモーションの編集をご紹介していきます。
主なワークフローは以下のようになります。
① モーションムービーファイル(.avi)を開く
② キャリブレーションシーンファイルを開く ※Kinect 2台で撮影した時のみ
③ モーションの編集する範囲を決める(開始フレームと終了フレームの設定)
④ ソフトのモデルの位置と体型をアクターに合わせる。
⑤ アクターの動きに合わせフィットさせていく
⑥ モーション全ての動きを補整し、自然な動きにする。
⑦ モーションデータ(.bvh)をエクスポートする。
手順
①モーションムービーファイル(.avi)を開く
iPi Desktop Motion Capture を開きます。
iPi Desktop Motion Capture のパースペクティブビュー上での基本操作は、
ホイール: ビューの拡大・縮小
ホイールボタンをドラッグ: ビューの移動
右ドラッグ: ビューの回転
となります。
ウィンドウ左上の ”Open” より、Kinect で撮影したモーキャプのムービーファイルもしくは ソフト独自のセーブファイルを開きます。
対応している拡張子は以下のようになります。
ムービーファイル
・AVI ファイル
・MPGファイル
・WMVファイル
セーブファイル
・MoCap Trial ファイル
・MoCap ファイル
次に、ビデオレイアウトを選択します。
今回もキャリブレーションと同様、”Depth video from MS Kinect” を用いて編集を行いたいと思います。
開くと下のようなウィンドウが表示され、バックグラウンドの非表示処理が行われます。
②キャリブレーションシーンファイルを開く
※この動作は、Kinect を 2台で撮影したときのみに行う
キャリブレーションシーンファイルを開きます。
ウィンドウの右より “Scene” を選択し、 “Load Scene…” をクリックします。
次に、現在編集を行っているモーションの、キャリブレーションシーンファイルを開きます。
すると、カメラ2台がそのとき撮影した位置に移動し、カメラ2つに映ったアクターの位置が重なります。
③モーションの編集する範囲を決める(開始フレームと終了フレームの設定)
メニューバーの ”View” より Hide Background 選択します。
すると、下の画面のように Kinect が認識した背景が非表示になります。
Hide Background は、Kinect が認識した人体のみを表示させたいときに使用します。人体が上手く表示されない場合はこれを使って確認することができるので、編集の際は非常に便利なツールです。
“Region of Interest” と “Take 1” を 開始・終了時間を最初と最後のTポーズに合わせます。まず、下の画像のスライダーを左ドラッグして Tポーズをしているフレームに合わせます。
次に、 左ドラッグで “Region of Interest” と “Take 1” のパラメータをTポーズのフレームに合わせます。
④ソフトのモデルの位置と体型をアクターに合わせる。
まず、モデルの位置をTポーズをしているアクターの位置に移動させます。
次にウィンドウの右より、Actor を選択します。すると、下の画像のように部位の名前とステータスバーが表示され、Height は身長、Arms morph は両腕の太さ、Torso morph は胴体の幅、Legs morph は両脚の太さを意味します。
スライダーを左ドラッグしてアクターとモデルの体型が合わさるように調節します。
モデルとアクターの体型を合わせたら、 “Save actor…” でモデルの体型データを保存します。
すると、次回同じアクターでモーションを編集する際に、”Load actor…” で体型データを読み込むことでモデルの調節をする必要がなくなります。
⑤アクターの動きに合わせフィットさせていく。
ウィンドウの右より、”Tracking” → ”Refit Pose” を選択し、モデル全身をTポーズをしている状態のアクターとフィットさせます。
すると、下の画像のようにモデルがアクターと合わさります。
次にモーションを再生した状態でモデルをアクターの動きに合わせフィットさせていきます。
まず、”Tracking resolution”で、モデルをアクターをフィットさせるために、細かく処理を行うか早く処理を行うかを設定を行います。
細かな部位までフィットさせたい場合は ”High (recommended)”、早く処理を行いたい場合は ”Low (faster)” のどちらかを選択します。
選択したら、先ほどフィットさせたTポーズが、モーションの開始位置の場合は ”Track Forward” を選択し、モーションの終了位置の場合は ”Track Backward” を選択します。
するとモーションが再生され、モデルがアクターの動きに合わせてフィットし、モデルのモーションがアクターと同じになるまで自動的に処理されます。
しかし、処理している中、下の画像のようにモデルの一部の部位がアクターの部位から外れてしまうことがあります。
こうなってしまった場合は、ウィンドウの左上にある “Rotate” を使用しモデルのボーンを回転させ アクターに合わせたり、また ”IK” を使用してモデルの手や足を移動させて合わせます。
“Rotate” は、まず動かしたいボーンを選択し球体を左ドラッグして回転させると、同時にボーンも回転します。
“IK” は動かしたい手もしくは足を選択し、矢印もしくは立方体を 左ドラッグ して動かすことで腕、脚の位置を変えることができます。
その後、”Track Forward” もしくは ”Track Backward” を押して続きから自動処理を行っていきます。
⑥モーション全ての動きを補整し、自然な動きにする。
右のウィンドウより、”Post-processing: Jitter Removal” の下にある ”Options…” と書かれたボタンを押します。
すると、Option についての説明と体の部分部分の名前が書かれた スライダーのウィンドウが開かれます。
スライダーは “Sharpen” に持っていくと動きが硬くなり、”Smooth” に持っていくと動きが柔らかく自然な動きに仕上がります。
まず、スライダーを上から順に 頭(Head)、左腕(Left arm)、右腕(Right arm)、左脚(Left arm)、右脚(Right arm)を調節していき、”OK” ボタンを押します。
次に ”Post-processing: Trajectory Filtering” の下にある、”Sharpen” と “Smooth” でモーション全体の動きを柔らかくしていきます。
この時、真ん中の値を上げ過ぎると、フィットしていたモデルがアクターから外れてしまう恐れがあるので注意しましょう。
そして、”Post-processing: Jitter Removal” の下にある、"Apply" ボタンを押してモーションが自然な動きになるように自動処理で補整されていきます。
⑦モーションデータ(.bvh)をエクスポートする。
ウィンドウの右より “Export” を選択するか、もしくはメニューバーの “File” を選択します。
”Export” を選択した場合、一般的なBVHファイルで出力したいときは ”Export animation…”、3ds Max の Biped に合わせた BVHファイルを出力したい場合は ”Export animation for 3D MAX Biped…”、MotionBuilder は ”Export animation for MotionBuilder…”、iClone は ”Export animation for iClone…” のいずれかのボタンを押します。
”File” を選択した場合、一般的なBVHファイルで出力したいときは ”Export animation…”、3ds Max の Biped に合わせた BVHファイルを出力したい場合は ”Export animation for 3D MAX Biped…”、MotionBuilder は ”Export animation for MotionBuilder…”、Endorphin は ”Export animation for Endorphin…”、Blender は ”Export animation for Blender…”、iClone は ”Export animation for iClone…” のいずれかをクリックします。
最後に、名前 と 出力先 を設定して [保存] ボタンを押せば、 BVH ファイルが出力されます。
⑧ モーション編集での Vicon との比較
・Kinect モーキャプ編集に使うモデルの違い
Kinect で撮影したモーションを編集するときに使用するモデルは、Kinect のメモリ内に入っている人体データもしくは「iPi Studio」のように アクターの体型に合わせたcgモデルを使用します。その分、モデルを作成する必要がなくなり、手間が省かれます。
しかし、Viconの場合は、1からボーンを作成しマーカーを配置していく必要があるため、その分モデル作成に時間が掛かってしまいます(VST ファイルの作成)。ですが、Kinect では撮影することができない、手首、足首、首などの細かなモデルを作成することができ、ハンドモーションやフェイシャルモーション用のモデルも作成できます。
さらに、VST ファイルからROMファイルを編集することで、その時に撮影した際のアクターのモデルのデータ(VSKファイル)に変換することができるため、より正確なモデルが作ることができます。
・編集方法の違い
Kinect は、モーション撮影の時点で完成したモーションデータが出力されるパターンや、「iPi Studio」のようにモデルを赤外線照射されたアクターにモデルを当てはめて編集を行うパターンなどがあります。一方、Vicon でのモーション編集は、個々のマーカーをラベリングし、カメラに認識されなかったマーカーのフレームを穴埋めしていくというものです。
これらを比較すると、Kinect は編集時間が非常に短いというのが大きな利点ですが、Vicon のようにフレームとフレームの間で編集されていない部分を穴埋めする際に、モーションの流れを計算してマーカーの動き作っていくような編集ができません。
Kinect の場合は、1フレームごとにモデルとアクターを合わせていく形になります。また、Vicon のRigit body のように他の部位から動きの情報を得て計算する編集もできません。そのため、Kinectは編集で使用できる機能が少ないため、より性格なモーションを編集することが難しいです。
・小道具を使ったモーションの編集
Viconでは、武器をなどの小道具を使ったモーション撮影でき、小道具にマーカーを取り付け小道具自体のモーションを編集することもできます。
しかし、Kinectでは小道具を用いたモーション編集ができません。これは、小道具を持っているとき Kinectは、小道具を人体の一部として誤認をしたり、ノイズとして認識してしまうからです。
・撮影・編集可能なアクションの数
Vicon と比べ、Kinectでの撮影や編集できるモーションはかなり限られます。
1つ 目は、人間の普段の生活では行われないような動きを撮影するのは困難なところです。例えば、マット運動の前転や後転などのモーションで、身体がうずくまるとき赤外線が背中、腕と足の外側だけしか当たらず、身体内側の情報がないためトラッキングに失敗してしまいます。
2つ目は、前の項目にも書きました、小道具を用いたモーションを撮影することができないことです。
3つ目は、複数人による同時撮影が困難であることです。Vicon の場合は、撮影スペースの範囲の広さから7人程のアクターで撮影を行っても問題はありません。しかし、Kinectは撮影スペース小さいため複数人でのモーションはできて 2~3人程度になってしまいます。また、複数でトラッキングしている状態でも、誤認で人体データがほかアクターへ移動してしまうことがあります。
・出力できるモーションデータの数
編集後に出力可能なモーションデータのファイルは、Kinect は Maya や3ds Maxといった幅広い3DCG作成ソフトで利用されているBVHファイル出力することができます。それに比べ、Vicon の場合ですと、C3D ファイル、Vファイル、CSMファイル、FBXファイルなどのモーションデータやCSVファイル、TRCファイルといった表計算ソフトで動きを参照するためのファイルなど、数種類のファイルを出力することができます。
Kinect の大きな利点としましては、様々な3DCGソフトで利用されるBVH ファイルを簡単に出力できてしまうことですが、Vicon から出力された C3Dファイルを用いてMotion Builderで変換してしまえばBVHファイルの出力が可能であり、また変換する際、数多くのマーカーから身体の部分の位置情報が多く得られるため的確なBVHファイルが出力されます。
⑨ Kinect での問題
・バックグラウンドによる問題
Kinectは、Viconの ようにマーカーのみを撮影するといった機能がないため、赤外線照射した人体以外にもバックグラウンドを認識して撮影してしまいます。そのため、一部のバックグラ ウンドによってモーションに若干のブレや誤認が出てしまう恐れがあります。
例えば、椅子や床に座るモーションでは、下半身が床もしくは椅子に触れていると き、Kinectが触れている部分に対して身体の一部であると認識してしまい、トラッキングされている人体データの下半身がやや下に下がってしまうことがあります。