Home » Technology » BVH 変換

BVH 変換

Rinions が 3.1RC になって BVHに対応しました.

Kinect が繋がっていなくても BVH の読み込み,書き込みができます.

ためしに Perfume の BVHデータ を変換して SLにアップロードしてみました.
ほとんど自動でここまできます.smiley

 

 

【手順】 ビデオを見ながら読んでね.

ビデオ中の係数は間違っています.すみません 0.408->0.3937

1. BVHの読み込み準備

Perfume のBVHファイルを読み込むために,関節名の変換ファイルをつくります.ビデオの最初で中身を表示している bvh_joint_name.txt というファイルです(ファイル名固定).

PELVIS   Hips
TORSO    Chest
CHEST    Chest4
NECK     Neck
HEAD     Head
L_COLLAR LeftCollar
L_SHLDR  LeftShoulder
L_ELBOW  LeftElbow
L_WRIST  LeftWrist
R_COLLAR RightCollar
R_SHLDR  RightShoulder
R_ELBOW  RightElbow
R_WRIST  RightWrist
L_HIP    LeftHip
L_KNEE   LeftKnee
L_ANKLE  LeftAnkle
L_TOE    LeftToe
R_HIP    RightHip
R_KNEE   RightKnee
R_ANKLE  RightAnkle
R_TOE    RightToe

一行に関節一個の対応を書きます.右側が読み込むBVHファイル内の関節名.左がシステムの関節名(予約語)で PELVIS がルートジョイントを表します.TORSOは胴体.後は… 見れば大体分るでしょう.
bvh_joint_name.txt は読み込む BVHファイルと同じフォルダにおいて置きます.

 

2.Rinions 3.1RC の起動とBVHファイルの読み込み.

Rinions 3.1RCはここからダウンロードします.
Rinons 3.1.0 リリース中
Rinionsは Kinect が繋がっていなくても,ドライバ等がインストールされていなくても起動可能ですが,DX9のランタイム(D3DX9_43.dll)が無いと起動しません.

Rinionsが起動したら,ファイルメニューから BVHファイルを読み込みます.読み込みが完了すると FilePlayer ダイアログが表示されます.
Perfume の BVHファイルの座標の単位はたぶん cmですが,SLなどはBVHの座標を inchで読み込むようなので,FilePlayer の「サイズ」を インチにして,inchデータとして解釈します.
cm のデータを inch で解釈したので Rinions内部ではデータのスケールがおかしくなります.これを防止するために「サイズ」のスケールに 1.0/2.54 = 0.3937 を指定しています(2.54cm=1.0inch).

Rinions 対応の SL Viewer があれば,この時点でのアバターの動きも確認できます.この状態でデータを保存すれば,Viewer で確認したアバターの動きに準拠したBVHデータを出力できます(inch単位).

 

3.SL/OS用データの出力

まず FilePlayer の「BVH」でファイルのフォーマットを選択します.通常は QAvimator(ビデオでは QAv) で良いでしょう.
SL/OS はまだ実験用で,目の動きなど加える場合などに使用しますが,今回は使いません.
Original はその名の通り,Rinionsのローカル環境でなるべくデータを落とさないようにしたい時に使用します,これも今回は使用しません.

FPSは書き出すBVHの FPSです.FPSが余り大きいと BVHファイルを30秒以内に分割しても SLにアップロードできない場合がありますので,20か30くらいにします.10だとアニメーションがカクカクになります.

分割時間は BVHを分割する際の,1ファイル当たりの再生時間です.SLではアップロードできるファイルの再生時間は30秒以内になっていますので,ここは30秒以内にします.ただし,ファイルの FPSが大きいと 30秒以内でもアップロードできない場合があります.
さらに,Rinionsではファイルを分割する場合に,後で結合するための「のりしろ」として,指定された分割時間を越えてさらに 10~30フレームくらい余分に出力します.
以上より,FPSが20の時は,経験的に分割時間は20秒くらいが適当かと思われます.

設定が終わったら,「SAVE as BVH」ボタンをクリックして,出力ファイル名をしています.例えば,出力ファイル名に out.bvh を指定した場合は,実際には out_00.bvh, out_01.bvh, out_02.bvh, …. のように出力されます.

 

4.SL/OSへのアップロード

分割出力されたファイルを SLやOSにアップロードします.運悪く,ファイルサイズ制限(これはViewer内部で binBVHに変換された後のサイズ制限だと思われる)に引っかかった場合は,FPSか分割時間を下げて,BVHファイルを出力し直します.

 

5.SLでの再生

SLにアップロードしたら MLDU などのツールで連続再生してください.MLDU を使用する場合は各アニメーションの再生時間は分割時間と同じになるようにしてください.ビデオで aachan_03 を一番最初に再生しているのは,一番最初のアニメーションが最初はうまく再生できない場合が多いからで,良く設定を理解していないためで,単純にデモのためです.

まだ色々と怪しい動きもありますが,手動でのデータ修正なしということでご勘弁を.

OpenSim での連続再生方法は不明です(勉強不足ですみません).

 

追記: ビデオ中で,「最初のアニメーションは実行失敗」とありますが,これは私の設定がいい加減なせいです.MLDUのせいではありません.作者様にはお詫びいたします(コメント参照).Snuma Whitfield様申し訳ありませんでした.

 

6 Comments

  1. Whitfield-In-World says:

    MLDU 製作者です(^^; ビデオ内でお使いいただきありがとうございます。
    本来のビデオの目的(ツールの紹介)とは離れますが、SLのモーションについて補足します。

    最初のモーションは失敗しているのではなくて、モーション開始の時点でアバタ―が踊っていないだけですね。[踊る] の状態にしておいて、[ダンス選択] で ダンスセット を選べば最初から再生されます。

    ただ、今のやりかただと最後のダンスが再生されてしまいますよね。一番いいのは 最初の BVH ファイルを BVHACKER などの編集ツールで Tポーズ0フレームと1フレームだけのBVHファイルを作成し、アップするときにループでポーズ状態を作り、10秒とか待ち時間を設定すれば、[次のダンス] で一連のダンスを開始させることができます。

    また、連続モーションをアップする場合は、最後のフレームでループさせる(とまった状態)とちょっとした時間がずれても繋がって見えます。アップのダイアログで [ループ] にチェック、[イン] に 99.999 といれて、最後の最後でループさせる(止める)方法です。

    ご参考まで~

    • iseki
      iseki says:

      すみません.私の勉強不足でした.ご指摘ありがとうございます.ブログ拝見してます.こちらは技術屋ばかりで,モーションについては素人なので参考にさせてもらっています.ありがとうございました.

  2. AglaiaOlifone says:

    はじめまして。
    MMDのvmdモーションデータをSL用のbvhに変換する方法を調べていて、こちらの記事にたどり着きました。
    Rinionsをインストールし、上記のparfumeのダンスの変換をしてみたところ、とても綺麗なモーションが出来上がって感激しています。
    ただ、その他のサイトでフリーで公開されているbvhや、Liveanimationなどの変換ソフトを解してvmd→bvhに変換したものが上手くSL用に変換されません。
    上半身の動きは反映されるのですが、下半身(hip)が固定されたままのアニメとして出来上がってしまいます。
    Rinionsでvmdをbvhに変換しても同じ現象になります。

    モーションを作ったソフトによって関節名が異なるせいなのかもしれませんが、
    こちらの動画ではrinionsだけでvmd→bvh変換が綺麗にできているので、
    同じように綺麗に変換出来る方法をご教授くださると嬉しいです。

    ※Rinions での VMDファイルの読み込み
    https://www.youtube.com/watch?v=BVmfgs_wHSc&t=36s

    MMDのダンスをSLにインポートするのには、現状いくつものソフトを介して行わないといけないようですが、
    もしRinionsだけでその処理が出来たら、もっとSLのダンスを楽しめます。
    とても素晴らしいシステムだと思いますので、是非活用させていただきたく、書き込み致しました。

    記事の投稿から大分経過しているため、サポートなどはすでに行われていないことも考えましたが、
    一縷の望みを託して投稿させていただきます。
    どうぞよろしくお願いします。

    • admin
      admin says:

      返答が遅れて申し訳ありません.

      現在こちらのサイトのフォーラムは機能が停止しています(適当なモジュールがない).
      宜しければ,www.jogrid.net のフォーラムの方で質問および,問題のあるデータを提示して頂けると回答し易いかもしれません.

      お手数ですがよろしくお願いいたします.

      • admin
        admin says:

        思い出した.

        多分.関節名の対応表を書けば良かったような気がします……

        • AglaiaOlifone says:

          返答をありがとうございます。
          こちらこそ現在使われていないフォーラムに書き込みしまして失礼いたしました。

          うまく変換できなかったデータはSLとはアバターの間接名が違うMMDのものでしたので、見当をつけて試しては見たのですがダメでした。
          間接名を改めて調べ、SL←→MMDの間接名の対応を「bvh_joint_name.txt」に記入して再度試してみます。

          それでもまた行き詰ったときはJapanOpenGridのほうで質問をさせていただきます。ありがとうございました。

コメントを残す

登録 ログイン