BVH」タグアーカイブ

チップス:Poserからmodoへのワークフロー

先日ご紹介したようにBVHローダーを使用して、キャラクタ用のモーションファイルBVHをmodoへと読み込めるようになりますが、このBVHファイルを簡単にカスタマイズしながら生成できるツールとして有名なのがPoserです。

ここではPoser→modoへデータを持ってくる際のワークフローについて、今回は簡単に解説していきましょう。

まずはPoserを起動し、キャラクタに歩行アニメーションをつけます。ここではデフォルトのアンディ君に対して、歩行デザインを使用して、てってけてってけ走ってもらっています(下記画像をクリックすると、モデルがPoser内でてってけてってけ走ります)。

ここからデータを書き出していきます。書き出すデータは2種類。一つはモデルデータをColladaで、もう一つはモーションデータをBVHで書き出します。今回使用しているPoser 9日本語版では、デフォルトの状態でモデルの名称が全て日本語化されていますが、Colladaでデータを介する場合など、正しく日本語が解釈されない場合がありますので、あらかじめモデルの名称は英数字へと変えておくようにしてください。

ファイル > 書き出しよりColladaを選択します。最初にシングルフレームで出力するか、複数フレームで書き出すかを問われますので、複数フレームでの書き出しを選択してください。

後は、階層から書き出したいモデルだけにチェックマークをつけて出力します。スケールに関するオプションが出てきますが、ここはあとでmodoの中で自在にスケールを変えられますので、それほど正確に設定する必要はありません。これでモデルデータの書き出しは終了!

次はモーションデータです。同じようにファイル > 書き出しよりBVHモーションを選択します。ここもデフォルトのままで出力します。これでPoser内からの出力は完了です。簡単ですね。

次に読み込み側のmodoを起動し、さきほど出力したColladaファイルを開きます。モデルがTスタンス(Poserではこれをゼロポーズと呼びます)で出力されているのがわかりますね。前回のBVHローダーの紹介で解説したとおり、まずはこのモデルの身長を測りましょう。ビューメニュー > 寸法ツールを呼び出すと、身長が1.8736mであることがわかります。この数値、覚えておいてください。

次に、いよいよBVHローダーの登場です(まだBVHローダーをインストールされていない方は、こちらの記事で先にインストールをお済ませください)!アニメーションレイアウトからBVHタブを選択し、Heightのところに先ほど記憶しておいたモデルの身長1.8736mと入力したら、Load BVH Motionボタンをクリックし、出力したおいたBVHファイルを読み込みます。

ここまでは単にBVHファイルを読み込みスケルトンが生成されただけであり、実際のモデルデータに割り当てられていません(上図参照)。セットアップモードへと切り替えてみると、読み込まれたBVHのデータによるスケルトン階層もTスタンスを保持していることがわかります。あとは、モデルデータをこのスケルトンのTスタンスの位置へと移動させるだけ!

PoserからモデルデータとそのBVHを出力する場合、他よりとびきり優れている点は、このスケルトン(BVH)とモデルのTスタンスが完全一致しているという点にあります。BVHでは階層のルートに当たるHipスケルトンが原点へと設定されているため、どうしてもモデルデータをスケルトンに合わせ移動させる必要はありますが、各スケルトンを細かく位置調整する必要はありません。あくまで全体の位置を合わせるだけでOK。これはスゴク楽ですね。

位置を調整したら、スケルトンとモデルを選択した状態で、デフォーマタブからバインドボタンをクリック!セットアップモードを抜け出し再生してみると、Poserで設定した動きが、そのままmodo上でも再現されるようになります(下記画像をクリックすると、モデルがmodo内でてってけてってけ走ります)。

ここでPoser→modoへとデータを出力する際の注意点を挙げておきます:

[1] インバースキネマティクス機能をオフに

Poserではインバースキネマティクスの設定がオンになっている場合があります。この状態でうまく歩行アニメーションが作れたとしても、BVHにはPoser内のインバースキネマティクスの影響は反映されません。このため、Poserではインバースキネマティクスの影響をオフにした状態で、適切に動くようなアニメーションを設定するようにしてください。

[2] バインド後の修正

Poserからのデータに限ったことではありませんが、今回のような骸骨君ではなく、リアルなキャラクタに対してスケルトンをバインドする場合、自動で設定されたウェイトが必ずしも最適なものであるとは限りません。特に関節部分などは、その動きによって肩や腕などの膨らみ具合が意図しないものへとなってしまう場合があります。この場合には、ウェイトのペイントツールを使って、スケルトンからの影響を受ける範囲などを微調整するようにしてください。このウェイトのペイントツールの使い方に関しては、トレーニングビデオSpotlight 601で紹介されていますので、ぜひそちらをご覧下さい。

どうでしょうか?いとも簡単に様々な歩行アニメーションを設計できるツールPoser。興味をもたれましたか?参考までに今回作成したPoserのプロジェクトファイル、出力したColladaファイルBVHファイル、そしてmodoで読み込んでファイルを公開いたしますので、Poserをお持ちの方は、ぜひ一度このフローをお試しください!

 

スクリプト:BVHローダーの使い方

modo 601から搭載されたキャラクタアニメーションですが、自分でいちからアニメーションをつけていくのは、なかなか骨が折れる作業でもありますよね。そんなときにはBVHファイルをアサインしてみるのはいかがでしょうか?

BVHファイルとは、キャラクタアニメーション用のデータフォーマットであり、ネット上にも様々なサンプルデータが落ちています。modo 601ではデフォルトでBVHファイルを読み込むことはできないのですが、LuxologyアセットシェアにてBVHローダーが公開されており、このローダーを使えばmodoの中にBVHファイルを取り込むことが可能になっているのです。

ではmodoへとBVHファイルを読み込むための準備を行っていきましょう。modoへBVHファイルを読み込みシーンを構築するのに必要なリソースは三つ、ひとつはBVHファイルを読み込むためのスクリプト(BVHローダー)、読み込んでキャラクタに割り当てるためのBVHファイル、そしてBVHファイルを割り当てる先のキャラクタモデルです。

まず最初にBVHローダーを用意しましょう。アセットシェアにアップロードされているBVHローダーはこちら(アセットシェアからアセットをダウンロードするには、Luxologyサイトにてアカウントの登録が必要です)↓

http://www.luxology.com/asset/scripts/view.aspx?id=3423

ここからスクリプトをダウンロードします。ダウンロードファイルはZIPで圧縮されていますので、ファイルを解凍し、modoのユーザーコンフィグフォルダへと解凍したフォルダごとコピーします。modoのユーザーコンフィグフォルダの場所がわからなければ、modoを起動しシステムメニューからユーザーコンフィグフォルダを開くをクリックしてください。modo起動中にスクリプトをコピーした場合には、必ずmodoを再起動してください。modoを起動すると、アニメーションレイアウトの中にBVHというタブが新たに作られており、ここにBVHファイルを読み込むためのパラメータが収められています。

次に、キャラクタに割り当てるBVHファイルですが、今回は以下のサイトよりBVHファイルをダウンロードしてきました↓

http://www.beyondmotion.com.au/free_motion.html

今回使用するのはSlip Downという面白いアニメーションです。お好みで他のアニメーションを選んでいただいてもかまいません。

最後にBVHファイルを割り当てるためのキャラクタですが、前回のブログ記事で紹介したBlueNinjaを使用することにしましょう。プリセットからBlueNinjaをダブルクリックし、modo上へと読み込みます。これで準備は完了です。

ではまず、このBlueNinjaの全体のサイズを把握しておきます。モデルレイアウトへと移り、BlueNinjaを選択したら、ビューメニューから寸法ツールを起動します。このBlueNinjaの身長は4.6605m。意外と大きいですね。

寸法ツールをオフにし、今度はアニメーションレイアウトへと移ります。BVHタブからBVHファイルを読み込むことになるわけですが、このパラメータの中にあるHeightにキャラクタの身長を入力します。4.6605と入力したいところですが、このキャラクタ、頭がかなり長いので、短めに4mに設定しておきましょう。Load BVH Motionボタンをクリックし、先ほどダウンロードしておいたBVHファイルを指定します。

BVHが読み込まれると、シーン上でスケルトンがアニメーションしている様子が確認できるようになります。このスケルトンはキャラクタモデルとはまだバインドされていないため、モデルが連動することはありません。それではバインド処理へと進みましょう。

モデルを選択し、スケルトンも全て選択したら、セットアップモードボタンをクリックし、デフォーマタブからバインドボタンをクリックします。セットアップモードを抜け出し、アニメーションを再生してみるとどうなるでしょうか?メッシュがぐちゃぐちゃに破壊されてしまい、見られたもんじゃありません。こうなってしまう原因は、最初のセットアップにあります。

再度セットアップモードへと戻ってみましょう。セットアップモードではキャラクタモデルも変形しておらず、さらにBVHを表すスケルトンも腕を横に広げた直立の状態で表示されています。この状態のポーズをTスタンスといい、モーションキャプチャなどで取得したBVHのアニメーションデータには、初期状態を表すためのこのポーズの情報が含まれています。セットアップ時にはキャラクタモデルと、このBVHTスタンス状態とをなるべく合わせる必要があります。ビューポート上で見てみると、モデルの立ち位置、さらにスケルトンとキャラクタのメッシュの位置が合っていませんので、できるだけこのセットアップモードでキャラクタモデルの中にスケルトンが仕込まれているかのように、スケルトンを編集する必要があります。

いったんバインドを解除するため、アイテムツリーにあるNormalizing Folderを削除し、バインド時に生成されたキャラクタモデルのウェイトマップ(リストビューウェイトマップの中でロケータアイコンがついているウェイト)を全て削除します。Tスタンスのスケルトンをモデルの位置まで移動させ、腕や足、首の位置などが一致するよう、スケルトンを移動させます。指のスケルトンなど細かい動きが必要なければ、思い切って手首から先の指先のスケルトンは削除してしまってもかまいません。

ほぼモデルとスケルトンが重なるように配置できた時点で、再度バインドを行います。セットアップモードを抜け、アニメーションを再生してみると、こんな感じのアニメーションが出来上がります↓

このキャラクタは、体型が通常の人間とは異なりますので、腕が体にめり込んだり、モーションデータがぴったり重なり合わない部分もありますが、大まかにはいい感じでアサインされているようです。

ここまでざっとBVHデータをキャラクタモデルへとアサインする流れをご紹介してきました。改めて、BVHアニメーションを忠実に再現するために重要となるポイントについて、以下まとめておきます:

[1] BVHデータを読み込む前にキャラクタモデルの慎重を把握しておくこと!

今回も、最初にBVHデータを読み込むときに寸法ツールでサイズを測りましたが、大体の目安を合わせておくことが大事です。BVHを読み込んだ段階でキャラクタモデルと比較してみて、あまりに違いすぎるようであれば、もう一度サイズを指定しなおして読み込むほうが、後の修正が楽に行えますし、破綻しにくくなるでしょう。大体はBVHデータの首の部分のスケルトンと、モデルの首の部分が一致するぐらいを目安にすると、合わせやすくなります。

[2] 必要のないスケルトンは削ってしまうこと!

セットアップモードでキャラクタとBVHのTスタンスを細かく合わせていくのは、多少面倒な作業となります。今回も指先付近のスケルトンは削除してしまいましたが、再現したいアニメーションの全体像に必要ないスケルトンは削ってしまう、というのも一つの選択肢です。

[3] キャラクタモデルはできるだけTスタンスに近い形状を選ぶこと!

セットアップモードでモデルとTスタンスを合わせるとはいえ、元から相似した形状であれば、修正も少なくなりますし、再現度合いも高くなります。あまりにキャラクタの形状がTスタンスと異なるようであれば、アニメーションを忠実に再現することが難しくなりますので、ご注意ください。

[4] セットアップモードでスケルトンをできるだけキャラクタモデルに沿って配置すること!

セットアップモードで、スケルトンをどれだけキャラクタにきちんと配置できるかが、アニメーションを再現する一番重要なキーとなります。いろいろなビューから眺めて、できるだけキレイな形で配置できるよう調整してください。

あれやこれやと注意事項を書くと、何だか面倒くさいなぁと感じられるかもしれませんが、慣れてくるとそれほどでもありません。何より、キャラクタに好きなようにアニメーションデータをはめ込み、動いている姿を見るのはとっても楽しいものです。様々なBVHをmodoに取り込み、お気に入りのキャラクタにアニメーションをつけてみてください!