モーリーのメモ

アプリ開発等(プログラミング、CG作成)、興味を持ったことを実践してまとめるブログです。

モーリーのメモ

BVHファイル(モーションキャプチャデータ)をインポート!:Blender

◆ 今回やること!◆

  • BVHファイルを無料で配布しているサイトから入手します。
  • BVHファイルのモーションデータを簡易人体モデルに取り込んで動かします。
 
 今回作成するアニメーションです。走るモーションをインポートしています。
 *gifファイルです。クリックの度に最初から再生します。
 BlenderではBVHファイル形式のモーションデータを利用可能です。
 
 BVHファイルには、ポーズや動きが付けられたアーマチュアのデータが含まれています。
 アーマチュア(骨格)は、ボーン(骨)で構成されており、ボーンを移動、回転させることでポーズや動作が作成されます。
 Blenderモデリングしたオブジェクトに、アーマチュアを関連付けさせることでモーションを取り込むことが出来ます。
 
 なお、アーマチュア(骨格)とボーン(骨)は、グループとメンバーのような関係ですが、言葉としては同じ意味合いで使われることがあります。
 
 さっそく作業します。
 
Windowsのキー操作で書いています。Macの方は以下のように変換して下さい。
 Window[Mac]キー対応:alt[option]、ctrl[control]、windows [command]

使用環境

 私が使用している環境です。

BVHファイルを入手する

 BVHファイル(モーションキャプチャデータを入手します。
 

    ブラウザで作業

  1. 下記のページを開いて、使いたいモーションファイルの番号を確認します。
    sites.google.com
    今回は、『#2』の『02_03』の 『run/jog』のモーションを使います。
    f:id:mmorley:20200607140907p:plain
  2. 下記のページを開きます。
    sites.google.com
  3. 『2010 RE-RELEASE DOWNLOAD LINKS AND CAVEATS:』の『BVH directories 01-09』をクリックします。
    『#2』を使うので、末尾が01-09のファイルを選びます。
    f:id:mmorley:20200607221931p:plain
  4. 『Download』をクリックします。
    f:id:mmorley:20200607222243p:plain
    『cmuconvert-mb2-01-09.zip』がダウンロードされます。
     

    Windowsエクスプローラで作業

  5. 『cmuconvert-mb2-01-09.zip』を解凍します。
    『cmuconvert-mb2-01-09』フォルダの『02』の『02_03.bvh』が対象のファイルです。

モーションを適用する人体モデルを用意する

 下図のような単純なモデルを用意しました。

    f:id:mmorley:20190404104127p:plain

    ブラウザで作業

  1. 下記のページの『Download』をクリックします。
    https://github.com/githubmorley/blog-files/blob/master/160330/blender.blend
    blender.blend』がダウンロードされます。

BVHファイルのモーションデータを人体モデルに適用する

BVHファイルをインポートする

    Windowsエクスプローラで作業

  1. blender.blend』をダブルクリックして開きます。
     

    Blenderで作業

  2. 『ファイル』→『インポート』→『Motion Capture(.bvh)』をクリックします。
    f:id:mmorley:20200607171138p:plain
  3. 『cmuconvert-daz-01-09』の『02』フォルダの『02_03.bvh』を選択して『BVHインポート』をクリックします。
    f:id:mmorley:20200607222741p:plain
  4. 『home』キーを押して、オブジェクト全体を表示します。
    f:id:mmorley:20200607224747p:plain
  5. アーマチュア(ボーン)を選択して、『オブジェクトプロパティ』の『ビューポート表示』の『最前面』にチェックを入れます。
    f:id:mmorley:20200607212205p:plain
    『3Dビュー』でアーマチュアが常に表示されるようになります。
    f:id:mmorley:20200607234123p:plain
  6. 『オブジェクトデータプロパティ』の『スケルトン』の『レスト位置』をクリックします。
    f:id:mmorley:20200607214137p:plain
    アーマチュアがレスト位置(ポーズが付いていない状態)になります。
    f:id:mmorley:20200607234312p:plain

アーマチュアと人体モデルの姿勢を合わせる

人体モデルは足を閉じていますが、アーマチュアは足を開いています。
このままアーマチュアをモデルにを適用すると動きがおかしくなるのでズレを直します。
 

    Blenderで作業

  1. 『tab』を押して編集モードにします。
  2. アーマチュアの左足の付け根を選択した後に『shift + s』キーを押して、『カーソル→選択物』をクリックします。
    f:id:mmorley:20200608091013p:plain
  3. フルキー側の『.(ピリオド)』を押して、『3Dカーソル』をクリックします。
    ピボットポイント(移動、回転、拡大縮小の基準点)が『3Dカーソル』の位置になります。
  4. 左ドラッグで、左足全体を選択します。
    f:id:mmorley:20200608113943p:plain
  5. 『r』→『y』→『20』キーを押して、アーマチュアの足をモデルの足と平行にします。
    f:id:mmorley:20200608133833p:plain
  6. 反対側の足も同様にします。
    『r』→『y』→『-20』キーで回転させます。
    f:id:mmorley:20200608140717p:plain
  7. 『オブジェクトデータプロパティ』の『スケルトン』の『ポーズ位置』をクリックします。
    f:id:mmorley:20200608134630p:plain
  8. 『ctrl + tab』を押して、『ポーズモード』をクリックします。
    レスト位置を変更したため、足が交差しています。
    f:id:mmorley:20200608140730p:plain
  9. 下のパネルを『タイムライン』から『グラフエディター』に変更します。
    f:id:mmorley:20200608152401p:plain
  10. 下図のように左太腿のボーンを選択します。
    f:id:mmorley:20200608161928p:plain
  11. 『グラフエディター』パネルで、Z軸以外の瞳のマークをクリックして非表示にします。
  12. グラフが全選択された状態で『g』→『y』→『20』と入力して、グラフ全体を20度オフセットします。
    足を閉じる動作は、Z軸の回転です。
    f:id:mmorley:20200608162345p:plain
    『3Dビューポート』パネルのアーマチュアは下図のようになります。
    f:id:mmorley:20200608163030p:plain
  13. 反対側の足も同様にします。
    『グラフエディター』パネルで『g』→『y』→『-20』キーで移動させます。
    f:id:mmorley:20200608162703p:plain
    『3Dビューポート』パネルのアーマチュアは下図のようになります。
    f:id:mmorley:20200608163258p:plain
  14. 左肩と右肩も下がり気味なので同様の操作でほぼ水平にします。
    『グラフエディター』パネルで、左肩:『g』→『y』→『8』キー、右肩:『g』→『y』→『-8』キーで移動させます。
    『3Dビューポート』パネルのアーマチュアは下図のようになります。
    f:id:mmorley:20200608164138p:plain
  15. 下のパネルを『グラフエディター』から『タイムライン』に変更します。
    アニメーションを確認する場合は、『space』キーで再生/停止、『shift + ←』キーで最初に戻ります。

アーマチュアと人体モデルのサイズを合わせる

 『オブジェクトモード』で拡大縮小すると、アニメーションの位置情報(移動距離)も拡大縮小します。『編集モード』では位置データはそのままです。ここではアーマチュアと人体モデルの足の長さを揃えることで移動距離がそれらしく見えるようにします。
 

    Blenderで作業

  1. 『オブジェクトデータプロパティ』の『スケルトン』の『レスト位置』をクリックします。
  2. 『ctrl + tab』キーを押して、『オブジェクトモード』にします。
  3. 『shift + c』キーを押して、全体を表示して3D カーソルを原点の位置にします。
  4. アーマチュアを選択した後に『s』キーで拡大縮小して、原点から足底までのサイズを合わせます。
    f:id:mmorley:20200608231114p:plain
  5. 『tab』キーを押して『編集モード』にします。
  6. 下半身を選択した後に『s』→『x』キーで拡大縮小して、足の幅を合わせます。
    f:id:mmorley:20200608231127p:plain
  7. 上半身を選択した後に『s』→『z』キーで拡大縮小して、手の高さを合わせます。
    f:id:mmorley:20200608231140p:plain
  8. 『s』→『x』キーで拡大縮小して、手の幅を合わせます。
    f:id:mmorley:20200608215319p:plain
  9. 首の付け根を選択した後に『shift + s』キーを押して、『カーソル→選択物』をクリックします。
    f:id:mmorley:20200608215826p:plain
  10. 首から上を選択した後に『s』→『z』キーで拡大縮小して、頭の高さを合わせます。
    f:id:mmorley:20200608220053p:plain

アーマチュアと人体モデルを関連付ける

    Blenderで作業

  1. 『tab』を押して、『オブジェクトモード』にします。
  2. 『shift』キーを押しながら、モデル→アーマチュアの順にクリックして複数選択します。
    f:id:mmorley:20200608224737p:plain
  3. 『ctrl + p』キーを押して、『自動のウェイトで』をクリックします。
    f:id:mmorley:20200608220744p:plain
  4. 『オブジェクトデータプロパティ』の『スケルトン』の『ポーズ位置』をクリックします。
  5. 『タイムライン』パネルの『開始』を”2”、『終了』を"174"にする
    f:id:mmorley:20200608223318p:plain
  6. アウトライナー』パネルで、アーマチュアの瞳のマークをクリックして非表示にします。
    f:id:mmorley:20200608222206p:plain
  7. 『タイムライン』パネルの操作ボタン、または下表のショートカットでアニメーションを再生します。
    再生/停止space
    1フレームずつ順送り→または↑
    1フレームずつ逆送り←または↓
    開始フレームに移動shift + ←
    終了フレームに移動shift + →
 
 これで、BVHファイルの適用は終了です。

あとがき

 今回の作業の注意点は下記の通りです。

  • オブジェクトモードで拡大縮小すると『アニメーションの移動距離』が変わります。
  • 編集モードで関節の角度を変えると、アニメーションの動きがおかしくなります。
  • レスト位置のままだとアニメーションが再生されません。
 
 モデルとアーマチュア(レスト位置)の姿勢が異なる場合の対処方法を見つけるのに苦労しました。