モーリーのメモ

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

モーリーのメモ

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

<今回やること!>

  • BVHファイルを無料で配布しているサイトから入手します。
  • BVHファイルのモーションデータを簡易人体モデルに取り込んで動かします。 
    *gifファイルです。クリックの度に最初から再生します。
    走る→止まる→走る

 
 歩く、走る、踊るといったモーションデータが無料で配布されています。
 BlenderではBVHファイル形式のモーションデータを利用可能です。
 
 BVHファイルには、ポーズや動きが付けられたアーマチュアのデータが含まれています。
 アーマチュア(骨格)は、ボーン(骨)で構成されており、ボーンを移動、回転させることでポーズや動作が作成されます。
 Blenderモデリングしたメッシュデータに、アーマチュアを関連付けさせることで、アーマチュアに付けられたモーションを取り込むことが出来ます。
 
 なお、アーマチュア(骨格)とボーン(骨)は、グループとメンバーのような関係ですが、言葉としては同じ意味合いで使われることがあります。

 詳しいやり方を説明します。

使用環境

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

BVHファイルのダウンロード

 ファイルを入手するにはアカウントの作成が必要です。
 アカウントの作成には、メールアドレスが必要です。フリーメールで出来ました。

  1. 下記のサイトを開く
    www.animstreet.com
    *ブラウザでサイトでのFlashの実行を許可をするとモーションがプレビュー出来ます。
  2. サイトの右上の『Join』をクリック
    f:id:mmorley:20190402164116p:plain
  3. 下記の内容を入力して、『Create new account』をクリック
    f:id:mmorley:20190402170618p:plain:w500
  4. 登録したメールアドレスに『admin@animstreet.com』からメールが送付されるので確認
  5. 受信したメールにある下記の文章に続くリンク(最後に文字が羅列された長めのURL)を開く
    『You may also log in by clicking on this link or copying and pasting it in
    your browser:(このリンクをクリックするか、ブラウザにコピーすることでログイン出来ます)』
    *このリンクは1度ログインするまで有効です。
  6. パスワードを入力し、『Save』をクリック
    f:id:mmorley:20190402190147p:plain:w500
  7. サイトの上部の『Search』をクリック
    f:id:mmorley:20190402195019p:plain
  8. 検索窓に"127_17"を入力
    "run"で検索して『last>>』のページにあったモーションです。
    ここでは直接番号で検索しました。
    f:id:mmorley:20190402211209p:plain:w500
  9. 検索結果の下図の赤枠の部分をクリック
    f:id:mmorley:20190405131344p:plain
  10. 『Free』をクリック
    f:id:mmorley:20190405132726p:plain
  11. 『Get now !』に変わるのでクリック
    f:id:mmorley:20190402230224p:plain
  12. 『Download』に変わるのでクリック
    f:id:mmorley:20190402230731p:plain
    『3345.bvh』がダウンロードされます。

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

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

    f:id:mmorley:20190404104127p:plain:w300
  1. ダウンロードするには、下記のリンク先のページの『Download』をクリックします。
    https://github.com/githubmorley/blog-files/blob/master/160330/blender.blend

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

  1. ダウンロードした『blender.blend』を開く
  2. 『ファイル』→『インポート』→『Motion Capture(.bvh)』をクリックし、『3345.bvh』を選択
    f:id:mmorley:20190404150956p:plain:w400
  3. 『プロパティ』の『データ』タブの『レントゲン』にチェックを入れる
    ボーンが常に表示されるようになります。
    f:id:mmorley:20190405233636p:plain:w500
  4. 『プロパティ』の『データ』タブの『レスト位置』をクリック
    アーマチュアがレスト位置(ポーズが付いていない状態)になります。
    f:id:mmorley:20190405234019p:plain:w500
  5. モデルとアーマチュアの姿勢を揃える
    モデルは足を閉じていますが、アーマチュアは開いています。
    このままモデルにアーマチュアを適用すると動きがおかしくなるので、ズレを直します。
    1. アーマチュアを選択して、『tab』を押し、編集モードにする
    2. 左足の付け根を選択して、『shift + s』を押し、『カーソル→選択物』をクリック
    3. 『.(ピリオド)』を押して、『ピポットの中心』を『3Dカーソル』にする
    4. 左足全体を選択
    5. 左足の付け根を中心に、足が地面とだいたい垂直になるまで回転させる
      厳密にやる場合は、回転角度を覚えておきます。私は20度回転しました。
      f:id:mmorley:20190406105651p:plain:w500]
    6. 右足も同様の操作で、地面と垂直にします。私は-20度回転しました。
    7. 『プロパティ』の『データ』タブの『ポーズ位置』をクリック
    8. アーマチュアを選択して、『control + tab』を押し、ポーズモードにする
      レスト位置を変更したため、足が交差しています。
    9. 下のウィンドウを『タイムライン』から『グラフエディター』に変更
      f:id:mmorley:20190406212154p:plain:w500
    10. 左太腿(オブジェクト名:LeftUpLeg)を選択
    11. 『n』を押して、『数値パネル』を表示
    12. 『グラフエディター』で、Z軸以外の瞳のマークをクリックして非表示にする
      足を閉じる動作は、Z軸の回転です。
      f:id:mmorley:20190407100132p:plain
      『グラフエディター』の操作は基本的に『3Dビュー』と同じです。
      ホイールスクロールで表示の拡大縮小、『shift』+ホイールスクロールで視野の移動です。
    13. グラフが全選択された状態で、『g』→『y』→『20』と入力してグラフ全体を20度オフセットする
      目分量でやる場合は、『g』→『y』を押した後、カーソル移動で足の角度を地面に垂直にします。
    14. 右太腿(オブジェクト名:RightUpLeg)は-20度オフセットする
      f:id:mmorley:20190407101229p:plain:w500
      アニメーションを確認する場合は、『option + a』で再生/停止、『shift + ←』で最初に戻ります。
    15. 下のウィンドウを『グラフエディター』から『タイムライン』に変更
  6. モデルとアーマチュアのサイズを合わせます。
    『オブジェクトモード』での拡大縮小は、アニメーションの位置データも拡大縮小します。『編集モード』では位置データはそのままです。
    ここでは股下の距離を基準に移動距離を合わせました。
    1. 『プロパティ』の『データ』タブの『レスト位置』をクリック
    2. 『control + tab』を押して、『オブジェクトモード』にする
    3. 『shift + s』→『カーソル→原点』をクリック
      『3Dカーソル』が原点に移動します。
    4. 『アーマチュア』を選択して、『s』で拡大縮小し、原点から足底までの距離を合わせる
      f:id:mmorley:20190407113521p:plain:w300
    5. 『tab』を押して、『編集モード』にする
    6. 『b』の範囲選択等で、上半身のみ選択
    7. 『s』→『z』を押して、原点を中心に首の付根の高さを合わせる
    8. 『s』→『x』を押して、手の幅を合わせる
    9. 下半身を選択し、原点を中心に足の間隔を合わせる
      f:id:mmorley:20190407152001p:plain:w300
    10. 首の付根を選択し、『shift + s』→『カーソル→洗濯物』をクリック
    11. 首の付根を中心に、首から頭頂部、右腕、左腕をそれぞれ拡大縮小
      f:id:mmorley:20190407191649p:plain:w300
  7. モデルとアーマチュアを関連付ける
    1. 『tab』を押して、『オブジェクトモード』にする
    2. モデル→アーマチュアの順に同時選択する
    3. 『control + p』を押して、『自動のウェイトで』をクリック
      f:id:mmorley:20190407192528p:plain
  8. 『プロパティ』の『データ』タブの『レントゲン』にチェックを外す
  9. 『プロパティ』の『データ』タブの『ポーズ位置』をクリック
  10. 『タイムライン』の『終了』を"382"にする
    このアニメーションは1〜382までフレームがあります。
    f:id:mmorley:20190407200321p:plain:w300
  11. 『3Dビュー』でアニメーションを再生
    タイムラインのパネルを操作、または下表のショートカットを使用します。
    f:id:mmorley:20160401004955p:plain
    再生/停止option + a
    1フレームずつ順送り→または↑
    1フレームずつ逆送り←または↓
    開始フレームに移動shift + ←
    終了フレームに移動shift + →
    10フレームずつ順送りshift + ↑
    10フレームずつ逆送りshift + ↓
 これで、BVHファイルの適用は終了です。

あとがき

 2019年4月7日に記事を全面更新しました。
 更新前の記事はPerfumeのモーションデータを使用していましたが、公式サイトが配布をやめたようなので、現在入手可能なデータを使用した内容に変更しました。
 
 今回の作業の注意点は、

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