モーリーのメモ

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

モーリーのメモ

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

この記事の内容
  • 無料で使えるBVHファイル(モーションデータ)を入手します。
  • モーションデータをBlenderに取り込んで簡易人体モデルを動かします。
  • 『"足を閉じた"モデル』と『"足を開いた"モーションデータ』の姿勢のズレを直します。
  
 今回作成するアニメーションです。走るモーションデータを簡易人体モデルに適用しています。
 ( ↓ 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:20211124130455p:plain
  2. 下記のページを開きます。
    sites.google.com
  3. 『2010 RE-RELEASE DOWNLOAD LINKS AND CAVEATS:』の『BVH directories 01-09』をクリックします。
     『BVH directories 01-09』の末尾の数字は、リストの#1~#9のモーションファイルを含んでいるという意味です。今回は『#2』を使うので、末尾が01-09のファイルを選びます。
    f:id:mmorley:20211124131006p:plain
  4. 『Download』をクリックします。
    f:id:mmorley:20211124131800p: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:20210401154102p: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ファイルの適用は終了です。

あとがき

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

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