2011年9月21日水曜日

【Script】Take情報をExportしてデータの管理


MotionBuilderでは1つのファイルで複数のアニメーションをTakeという機能で持つことが出来ます。

Mocapの大量のデータやゲームモーションなどを1つ1つのファイルでばらばらになっているより、1つのファイルで管理するほうが、後にメッシュが代わったなど何か更新されたときなどアニメーションの調整が必要なときでも1つのファイルだけ更新すればいいので作業効率がいいです。

また、1つのファイルで管理していればファイルを保存するときのオプションで
「Save One Take Per File」で後でばらばらにファイルを分けるのが簡単に出来るのでデータの管理の面から見ても効率はいいと思います。

そのように1つのファイルで複数のアニメーションデータを作業していると、Takeの名前やスタートフレーム、エンドフレームやコメントなどTake情報をExportしてデータを管理したい場合があります。

そこで全部のTake情報をExportするスクリプトを作りました。
出力される情報は、TakeName,StartFrame,EndFrame,CommentsがTab文字で区切られて出力されます。

Description
D&DしてExcuteすると指定したパスにTakeのもろもろの情報がテキストとして出力されます。
デフォルトだとCドライブの直下にTakeInfo.txtとして出力されます。


DownLoad
TakeInfo.py
(MotionBuilder2010では動作確認済みです)

2011年9月15日木曜日

【Script】RenameToolで作業効率UP





MotionBuilderでこれまた不便なところとして、リネームがあります。

私がキャラクターのリギングをしているときにはオブジェクトを一気に統一した名前で
リネームしたい時というのが結構あります。
MotionBuilderには意外にもリネームする便利な機能がデフォルトではないんです。

NameSpaceという機能はあるんですが、これはどちらかというとキャラクター毎という感じで
1つの大きなくくりとして名前をつけて管理するような機能なので、
1つ1つのオブジェクトに向けての機能ではないと思っています。

そこで、ないなら作ろうの精神でリネームするスクリプトを作りました。
今回から簡単なものは出来うる限り公開していこうかと考えております。




Description
 =PrefixまたはSuffixをつける場合=
 1.オブジェクトを単体または複数選択 する
 2.Searchのところに付加したい文字列を入力
 3.PrefixまたはSuffixを選択しOKボタン押下

 =文字列を置換する場合=
 1.Search入力欄に探したい文字列を入力
 2.Replace入力欄に置換後の文字列を入力
 3.RepalceにチェックしOKボタンを押下


DownLoad

RenameTool.py
(MotionBuilder2010では動作確認済みです)
少しだけバグがあったので修正させてもらいました。
もしDLしてた方は再度お願いします。(2011/09/19追記)


RenameTool_2012.py
リクエストとしてMotionBuilder2012バージョンでも動作するものを作成しました。
(2013/07/08追記)


2011年9月12日月曜日

FullBodyIKにシミュレーションを試す

MotionBuilderを使って自動でモーションを生成出来ないかを色々考えているときに
FullBodyIKの各エフェクターに物理シミュレーション的なものを適用すれば
完璧ではないけどベースとなるアニメーションが出来るんじゃないかと思いました。

すでにMotionBuilderにはFullBodyIKに物理シミュレーションが適用できる機能RagDollがありますが
これは単純に各関節のリンク構造を保ちながら物理シミュレーションするだけで、
いわゆるキャラクターが死んでる状態を再現する機能になってます。

私が考えているのは死んでる状態をシミュレーションしてモーションを自動生成するのではなくて
ある程度ベースとなるアニメーションがあってそれに対して味付けとして物理シミュレーションを
適用するというものです。

というわけでテストをしてみました。


この動画のキャラクターには物理シミュレーション的なものを適用しているだけで
一切の手付けアニメーションはつけていません。

これぐらいのアニメーションならガヤのアニメーションに出来ると思いますし
またこういった物理シミュレーションをベースに作成されたものをベースにして
アニメーションを詰めていくというのも1つの手法としてはいいのではと思っています。

2011年9月10日土曜日

パスをアニメーションさせてパスアニメーション

MotionBuilderにはPathコンストレインがありますがこれまた使い勝手がよくないです。
MayaやMaxなどの他のソフトみたく、
Pathのカーブ自体にアニメーションをつけてパスアニメーションさせるということが出来ないんです。

そこでまたまた、無いなら作りましょうってことです。


このPathAnimationコンストレイン自体の構造自体は簡単で
パスのコントロールポイントを他のオブジェクトでコントロール出来るようにしているだけです。

そして、MotionBuilderに元からあるPathコンストレインをかけてあげれば他のソフトと同じような
動かし方が出来るようになります。

そもそも他で出来ることをわざわざプログラムを書いてまでMotionBuilderでやる必要というのは、
リアルタイムでアニメーションを再生でき、プレビューのレンダリングがOpenGLレンダーですけど
他のソフトより早いので生産性が違ってくるという点でMotionBuilderを使っています。

でも最近だとマシンのスペックが上がってきているのでそんなに差がなくなりつつあるのも事実ですけどね(苦笑)

2011年9月4日日曜日

IKHandleをリアルタイムシミュレーション

アニメーションを作っていて結構面倒くさいのが髪の毛とか服と
いわゆる揺れ物系のアニメーションなんです。

プリレンダーとかならメッシュ自体をシミュレーションしちゃえば問題ないけど、
ゲームの場合はパフォーマンスとかの影響で結局は骨にウェイトをいれて
アニメーションさせることがほとんどだと思います。

手付けで気持ちいいアニメーションを作ることも大事なんですけど
例えば会話のシーンとか動きが少ないところの揺れ物って動きが微妙すぎて
自然に見せるのが難しかったり手間がかかるんです。

MotionBuilderではすでに物理シミュレーションの機能が搭載されてるんですけど、
設定が多くて面倒くさいしパラメーターの調整にはやっぱり経験とか必要です。

ぱっと設定出来て色々拡張性があるようなものを作りました。




これはRelationコンストレインでIKハンドルを物理シミュレーションの計算をしてあります。
IKハンドルの数だけ黄色の枠で囲ったBoxがあればいいので数はいくつでも増やせますし
Relationコンストレインなので間に色々な計算を挟むことが出来ます。


設定次第では、髪の毛、スカート、鞭のような武器、洋服にも応用できます。

以下からこのプラグインを購入できます。



2011年9月1日木曜日

Pythonで作ったGUIをLayoutで記憶

Pythonで汎用性の高いルーチンワークを自動化して作業効率をUPさせようって時に
GUIをもったスクリプトを作成することが多々あります。
でもMotionBuilderを起動するたびにそのスクリプトもExcuteして実行するのが
毎回、毎回だと意外に面倒くさいです。
そこでGUIを持ったスクリプトをMotionBuilderと一緒に起動する方法をみっけました。
 方法は簡単。
1.スクリプトを以下のパスに配置
C:\Users\△△△△\AppData\Local\Autodesk\MB2010\config\PythonStartup
△△△△は自分のユーザー名です
2.MBを起動し、一度そのスクリプトをExcuteして実行する
3.好きな場所にそのスクリプトのGUIを配置して、Layout→UpdateCurrentLayoutでレイアウトを更新
これだけです。
次回からはMBを立ち上げるとそのスクリプトのGUIが表示されてます。
 私はControlRigからSkeletonへPlot、SkeletonからControlRigへPlotという手順を
ボタン1つで出来るGUIを作ってLayoutで記憶させています。