ポリゴンメッシュでキャラクタを作成(人体/Unity Mecanim 編)
fbxやUnityの説明を前回行いましたが、ここでUnityのMecanimをより理解するため人体とボーン構造について説明しておきます。
ここではサンプルとしてロボットを題材として進めることにします。
T-PoseとA-Pose
人体で腕を一直線に水平に伸ばした状態を「T-Pose」と呼びます。
水平よりも少し腕を下ろした状態を「A-Pose」と呼びます。
ただ、「A-Pose」と呼ぶこともあれば「Relaxed Pose」と呼ぶこともあるようです。
腕を下ろす角度は30-45度くらいでさまざま。
腕だけでなく、足を若干開くパターンもあるようです。こうなると、A-Poseにこだわらずに「Relaxed Pose」と呼んだほうが適切なのかもしれません。
「T-Pose」「A-Pose」のどちらが多く使われるのかというのは、どちらの派閥も根強い支持があるようで一概にどちらがいいとは言い切れないようでした。
モデリングに関してはT-Poseのほうが楽そうではありますね。
Unityの人体キャラクタを扱う場合はT-Poseで使用します。
MMDでの人体キャラクタはA-Poseが多いようですが、T-Poseを使用する場合もあるようです。このように、使用する環境によってどちらが主流かは変わってきます。
どちらを使うかというのは悩ましい問題がありまして、A-Poseでボーンを仕込んだキャラクタのモーションをT-Poseのキャラクタに使用する、というのは回転のずれが出てしまって使えなかったりします。逆も同じ。
これは、基準となる姿勢自体が異なるためです。
人体キャラクタを扱う場合はモーションを複数キャラクタで使いまわすことも多いかと思います。
このときは、T-PoseかA-Poseか、というのはまずはじめに確認しておくほうがよいでしょう。また、A-Poseの場合は水平から何度腕を下ろすか、というのも大事なルールになりますね。
人体ボーン構造を仕込んでみよう (BoneUtilプラグインが必要です)
では、人体ボーンを仕込んでみましょう。
お尻かヘソをルートボーンとして、そこから背骨にボーンを張って腕を、手を、頭を、、、というように結構手間がかかります。
幸いなことに人体の場合は、よく使う特定のボーン名と構造が用意されていたりします。
有名なものとして「HumanIK」のボーン構造があります。
Shade 3Dマーケットプレイスで公開されている「BoneUtil」プラグインでHumanIKのボーン構造を自動生成できますので、これを使ってみましょう。
なお、プラグインですのでShade 3D Standard/Professionalでのみ動作します。
Shade 3D Basicの場合は、この記事の最後にshdファイルを添付してますのでボーン構造をコピーして使用するのが楽かと思います。
HumanIKのボーン構造を作る
「BoneUtil」プラグインでHumanIKのボーン構造を作成します。
最終的にfbxエクスポートしてUnityで使いますので、T-Poseにあわせることにします。
「robot_00.shd」というファイルを用意しています。これは、ボーンを入れる前のポリゴンメッシュのロボットが一体あるシーンです。ここからボーンを入れていきます。慣れると数分でできますよ。
なお、人体は原点位置を地面に接する足の中央になるように配置しておいてください。
人体リグの制御点を初期化
ブラウザの「情報」をクリックしてコンテキストメニューより「人体リグの制御点を初期化」を選択します。
このロボットの身長は2メートルになりますので、ダイアログボックスで「身長」を2000mmと指定、「ポーズ」を「T-Pose」、「ミラーリング」チェックボックスをOnにしてOKボタンを押します。
RigPointsというパートが生成され、その中に人体の位置を調整する球が配置されました。
ここの球を元のポリゴンメッシュに合うようにオブジェクトモードで移動させます。「ミラーリング」をOnにしてますので、左半分または右半分の球を移動させると、対になる球も移動します。
以下のようになりました。
人体ボーンの生成
ブラウザの「情報」をクリックしてコンテキストメニューより「人体ボーンの生成」を選択します。
「ボーンの種類」で「HumanIK」を選択、名前は「bone」、オプションの「目」「あご」のチェックボックスをOnにした状態でOKボタンを押します。
※ 目やあごについては、HumanIK構造にはありませんのでオプションとなってます。
これでボーンが生成されました。
ボーンの軸方向が+X軸方向を向いているので、ブラウザの「情報」をクリックしてコンテキストメニューより「ボーンの軸方向」を選択。
「ボーン方向に統一」チェックボックスをOnにしてOKボタンを押します。
同じく「ボーンのリサイズ」でボーンサイズを調整しました。
以降は、「RigPoints」パートとその中の球は不要ですので削除してください。
ボーンのずれがある箇所をオブジェクトモードでボーンを移動して調整します。ボーン構造はこれで完了です(robot_01.shd)。
※ ボーンを調整する場合は、オブジェクトモードで移動だけで行うようにしてください。ボーンの回転操作をしてはいけません。
※ 調整が多い場合は左腕と左足だけ位置を合わせて右腕と右足を削除し、ブラウザの「情報」をクリックしてコンテキストメニューより「ボーンのミラーリング」機能を使うことで、対になるボーンを複製できます。
ボーンは「bone_xxx」という名称に統一されており、これにより「HumanIK」構造の人体リグ同士でボーン構造やモーションを使いまわすことができます。
HumanIKのボーン構造の特徴は、以下のようになっています。
- 「ボーン名_xxxx」という命名
- 「ボーン名_xxxx」という名前の「xxxx」は、どのHumanIKを使ったキャラクタでも同じ
- ボーン構造は、どのHumanIKを使ったキャラクタでも同じ
このルールを守ることで、他ツール間の人体ボーンやモーションを移行しやすくなります。
スキンを割り当て
スキンについては「スキン編」を参照してください。
ボーンさえ割り当てられれば、後は同じ要領で対処できます。
robot_02.shdにスキン割り当て後の形状を保存しました。
FBXエクスポート
ポリゴンメッシュ、ボーン、スキン割り当てが完了したキャラクタをFBXエクスポートします。
ここで作成したデータはアニメーション情報がないため、FBXエクスポート時の「アニメーション」タブの「出力」は「なし」を選択。
FBXエクスポートについては「FBX/Unity編」を参照してください。
ここでは「robot.fbx」として保存しました。
Unityで人体キャラクタを動かす
これで下準備は整いましたので、後はUnityでの作業になります。Unity 4.6.1を使用しました。
Shade 3Dで作成したrobot.fbxをUnityにインポート後、Assetのrobotを選択し、Inspectorウィンドウで「Rig」タブを選択します。
ここで、人体のためのリグ設定を行います。
この場合は人体ですので、Animation Typeで「Humanoid」を選択。
その後、「Configure」ボタンを押してボーンとMecanimの人体リグ構造の割り当てを行います。
ボーンのマッピング
Inspectorウィンドウに緑色の人体の図が表示され、Sceneにはボーンが可視化されています。
ここで、どの位置にどのボーンを対応付けるか、という指定を行います。
ほとんどは自動で割り当てられてますが、LeftLegとRightLegのToesだけはNoneになっています。
これを設定してあげましょう。
つま先の先端ボーンの指定になります。
この表示の右の丸の記号をクリックし、リストより「bone_LeftToeBase」「bone_RightToeBase」を選択しました。
Mappingタブの「Body」「Head」「Left Hand」「Right Hand」ボタンを選択して、それぞれのボーンで間違いなくマッピングできているか確認します。
問題なければInspectorウィンドウ右下の「Apply」ボタンを押して確定します。
次にInspectorウィンドウの「Muscles」タブを選択して、ボーン操作で正しく動くか確認します。
Open Closeのスライダを操作すると、体全体で開いたり閉じたりします。
その他、いろんな部位の動きを確認できますのでチェックし、問題なければInspectorウィンドウで「Done」ボタンを押します。
これで、Mecanimの人体としての割り当ては完了です。
シーンにrobotの形状が配置されていますがこれは不要なので削除しておきます。
ところで何をしていたの?
今までの操作は、Mecanimの人体(Humanoid)としてのリグのマッピングになります。
これを行うことで、ボーン名に依存せずに人体であればどのモーションも相互に適用できるようになります。
多少ボーン構造が異なっていてもMecanimが自動で吸収してくれますが、ここに渡すボーン構造は今回のようにHumanIKを使うのが楽かと思います。
では、次にUnity Asset Storeにあるキャラクタの動きをこのロボットに当てはめてみましょう。
Asset Storeで「Mecanim Exapmle Scenes」をダウンロード
Asset Storeの検索枠で「Mecanim Exapmle Scenes」を探してダウンロードしプロジェクトにインポートします。
ここにいくつか人体に関する動きのデータがありますので、これを使って動作確認してみます。
Animator Controllerの作成
「FBX/Unity編」の説明を参考に、
アニメーションを行うためのAnimator Controllerを作成し「robot_anim」としました。
シーンにrobotを配置し、Animator Controllerを割り当て
シーンに地面となるPlaneと光源を配置。
Mecanimのリグを割り当てたrobotのAssetを、シーンにドラッグして配置します。
このrobotのInspectorウィンドウで、AnimatorコンポーネントのControllerで先ほど作成したし「robot_anim」のAnimator Controllerを割り当てます。
Runのモーションを割り当て
このAnimator Controllerに対して、Asset Storeでダウンロードしたサンプルの走るアニメーションである「Run」を割り当ててみましょう。
「Mecanim Exapmle Scenes」のAssetをインポートした際に作成された「Animations/Runs」を開きます。
「robot_anim」を選択して表示したAnimatorウィンドウに、「Run」のAnimation Clipをドラッグして配置。
実行する
これですべて整ったので、Playボタンを押して再生してみましょう。
Shade 3Dで作成したキャラクタが、アニメーション情報も与えてないのに走り出しました。
このように、どの3DCGツールでモデリングしてもMecanimのリグ構造のマッピングさえしっかり行えていれば、Unity Asset Storeで公開されているさまざまな動きを与えることが可能になります。
逆に、Shade 3Dでモーション設定したものをfbxで用意しUnity Asset Storeで購入したキャラクタを動かす、ということもできますよ。
T-PoseだったりHumanIKだったりとルールさえ守ればキャラクタやモーションを共用しやすくなるので、独自にボーンを組むのではなく、長いものに巻かれることをお勧めします。
これらのデータのダウンロードはこちら。