LightWaveで、モーションキャプチャのデータを適応したり、加工する仕事は得意では有りません。反対に、FiLMBOXのMotionBuilder5.1はこれらの作業を得意にしています。また、FiLMBOXのシーンファイルフォーマットFBXは多くのツールでImport/Exportがサポートされ、モーションやモデルのツール間での共有が行いやすくなっています。
このことからモーションキャプチャを使用したり、他ツールと連携して作業する場合、MotionBuilderをHUBの様にして作業することが多くなると思われます。
ここではAutomatonRigとMotionBuilder5.1との連携が可能かどうかを検証しました。
下記のWWWからプラグインを入手し、インストールすると以下の3つ機能が追加されます。
「Export to FBX」
「FBX Inport」
「Merge with FBX」
また同じWWWにMotionBuilder5.1のデモ版もあります。制限事項は無いようなので、購入を検討される方はまずデモ版をテストすることをお勧めします。
(実は私もデモ版でテストしてます(^_^;)>)。
上記の「Exoprt to FBX」を使えばAutomatonRigは簡単にFBXを出力することが出来ます。このFBXをMotionBuilderで開いても一見問題が無いように見えます。
しかし、モーションライブラリのデータを適応すると正常に再生することが出来ません。これは骨の初期位置に起因する問題です。
AutomatonRigは初期状態で+Z方向を向くようになっています。これはAutomatonRigの前身であるAcs3bとの互換性を保つ為のものです。ところが、MotionBuilder上でのデータは-Z方向を向いたモデルを想定して作られています。その結果、上記のFBXでは腕や足の回転方向が逆転し、「阿波踊り」を踊ってしまうのです。
では、AutomatonRigでは+Z方向を向いたモデルを作る事は出来ないのでしょうか?
実は隠し機能で+Z方向モデルをサポートしているのです。このモデルを正式に採用しなかったのはAcs3bとの互換性を優先したのと、AutomatonToolsの使用上で問題が発生した為です。
今回これを解消し、問題が発生した部分パッチを当てました。以下は+Zモデルと対応したプラグインです。最終的にはこのプラグインを正式版1.21もしくは1.3にする予定です。
自作のモデルを+Zモデルに修正するには多少の注意が必要です。これまでのツールとの互換性を保つ為いくつかの回転初期値を変更する必要があります。この作業は複雑なので下記の「LightWaveでの作業」の様に、サンプルから骨を抽出し、入れ替えを行なうことで対応してください。
LightWave上での作業は
1)モデルをY軸上で回転し+Zモデルにする。
2)サンプル ZPlusから骨を抽出し、現在のものと入れ変える。
3)Layout上でFKモデルでAutomatonRigを生成する。
4)「Exoprt to FBX」でFBXファイルを出力する。
という手順になります。
AutomatonRigは必ずFKモデルで出力してください。これはMotionBuilderとの受け渡しにIKが使用できない(問題が発生し易い)為です。
出力されたFBXをMotionBuilderで読み込むと次章の図のようになります。
MotionBuilderでもっとも優れた機能がCharacterizeと呼ばれる機能です。Characterizeは自分のキャラクタとMotionBuilder内部で使用されているCharacerを関連付ける作業です。一旦、Charaterizeされたキャラクタは腕の長さや足の長さを気にせずにモーションの受け渡しが可能になります。この機能を使えばMoCapのデータを簡単に自分のキャラクターに適応したり、モーションのライブラリ化が可能になります。
まず「Asset」ブラウザの中の「Template」-「Caracter」を読み込んだモデルにDrag&Dropします。
次に以下の様にマッピングを行います。Itemを他のItemと関連付ける場合は「Ctrl」を押しながらItemをピックします。LightWaveとは違ったオペレーションなので注意が必要です。
Base(requrired) (2004/01/12 修正)
Hips | LWS:Root(注1) |
LeftUpLegs | LWS:L_Thigh |
LeftLeg | LWS:L_Shin |
LeftFoot | LWS:L_Foot |
RightUpLegs | LWS:R_Thigh |
RightLeg | LWS:R_Shin |
RightFoot | LWS:R_Foot |
Spine | LWS:Spine |
LeftArm | LWS:L_Arm |
LeftForeArm | LWS:L_ForeArm |
LeftHand | LWS:_pivot@L_Hand |
RightArm | LWS:R_Arm |
RightForeArm | LWS:R_ForeArm |
RightHand | LWS:_pivot@R_Hand |
Head | LWS:Head |
Special
HipsTranslation | LWS:_pivot@Root(注1) |
Axuliary
LeftToeBeas | LWS:L_FootTip |
RightToeBeas | LWS:R_FootTip |
LeftShoulder | (LWS:L_Shoulder)(注2) |
RighttShoulder | (LWS:R_Shoulder)(注2) |
LeftFingerBeas | LWS:L_Hand |
RightFingerBeas | LWS:R_Hand |
注1) 中心回転をBaseでHipsTranslationで平行移動成分を受け渡すようにする。
注2) 基本形状が異なる為、通常のモデルではうまくモーションが伝わりません。また、スタンダード版では肩の調整が出来ない為、ほとんどの場合ではこの項目を使用しない方が良いモーションになります。
マッピングが終わったら上図オレンジの部分「Characterize」のチェックを有効にします。これで自分のキャラクタをMotionBuilder上で動かせるようになります。
MotionBuilderのキャラクタはソースになるモーションと実際に動かすCharacterが分離しています。以下は入力ソースの切り替えの概念図です。
「Actor」 MoCapに特化したCharacter。Standerdには含まれていないので注意してください。
「ControlRig」 手付けモーション用のChatacter
「Motuonライブラリ」 サンプルに含まれるモーション。
これ以外にも他のCharacterそのものをソースにすることも可能です。
ではまず「ControlRig」を自分のCharacterに適応してみましょう。
「CharacterSetting」ペインのInputTypeを「ControlRig」にして、Activeを有効にします。上図の真ん中のようなコントローラが表示されこのコントローラに従ってキャラクタが動lくようになります。
次に「Asset」ブラウザ「Motion」から適当なモーションをDrag&Dropします。(青く骨が表示されます)
「CharacterSetting」ペインのInputTypeを「CharacterInput」にしてInputSourceを今Drag&Dropしたモーションとします。
Activeを有効にするとモーションとCharacterが連動して動くようになります。「CharacterPropertise」を使えば各部の微調整が可能です。
上記の状態では関連付けされているだけの状態なのでモーションを他のツールに受け渡すことが出来ません。「CharacterControls」-「Edit」-「PlotCharacter」を使ってモーションの焼きこみを行います。
焼きこみ以降入力ソースは必要ないので削除します。
後はこのシーンをFBXファイルとして出力します。
LightWaveではAutomatonRigをFKモデルもしくはIK/FKモデルで生成してください。これは入力されるデータがFK行なわれるためです。
プラグイン「Merge with FBX」を使って上記で作成したFBXを読み込みます。以下のようなパネルが出力されればOKです。
IK/FKモデルを使用している場合はATIKControlなどでFK使用(non)に変更します。
これでMotionBuilderでつけたモーションを適応することが出来ました。
上記の方法でFKに焼きこまれたモーションは1フレ単位のBakeデータであり、修正が非常に面倒です。ReduseKeyプラグインなどでキーを間引くことも可能ですが骨の個数を考えると現実的ではありません。
そこでもっとも簡単な方式がATFKtoIKを使用し修正箇所をIKに焼きこむことです。IK/FKブレンドとこのIK焼きこみを使えば比較的簡単にモーションを編集することが出来ます。
ここで問題になるのがATFKtoIKの精度です。ATFKtoIKでは独自計算で回転方向を計算していますがあまり精度が良くありません。「よれ」と呼んでいる半周期異なった回転を適応してしまうことがあります(LightWaveのぷるぷるする現象と同じ原因で発生しています)。
こういった作業を行なうと「よれ」をなんとかしないといけませんねぇ。(-_-;)