『 AREA JAPANウェブサイト モニタリング 調査 』実施中アンケートにご協力いただいた方全員に、Amazonギフト券(500円分)をプレゼント!

チュートリアル / Road to Stingray
第8回:アニメーション&リギングについて 後編

2016.04.28

  • Maya
  • Stingray
  • アニメーション
  • キャラクター・リグ
  • ゲーム
  • チュートリアル
  • 中級者

キャラクターが動くまで

こんにちは、上原です。後編では、Animation Controllerを使ってゲーム中にアニメーションを制御する方法と、物理シミュレーションを用いて髪の毛を動かす方法をご紹介します。

Animation Controllerを使ってアニメーションを制御する方法

まず、アニメーションデータ(FBX)がどのような流れを経てゲームになるのかを簡単な図にまとめました。

Mayaから出力したアニメーションデータ(FBX)は、アクションごとにバラバラなので、Animation Controllerでまとめておきます。命令を受け取ったら必要なアニメーションを再生するといった流れです。

ROAD TO STINGRAY

インポート

モデルデータとアニメーションデータは別々のファイルに分けます。どちらもFBX形式であるため、名前で区別できるようにしておきます。また、アニメーションデータ(FBX)を出力するとき、ポリゴンメッシュを含まないように注意が必要です。 うっかりポリゴンメッシュデータを含めてしまうと、一つ一つのFBXの容量が大きくなってしまい、非常に無駄です。ポリゴンメッシュはモデルデータ(FBX)にのみ含まれていればよいです。

ROAD TO STINGRAY

・モデルFBXが持つ情報
ポリゴンメッシュ、UV、マテリアル(シェーダー・テクスチャ)、スケルトン、スキンウエイト

・アニメーションFBXが持つ情報
スケルトン、キーフレーム(アニメーション)

FBXデータをStingrayに取り込むには、AssetBrowserへドラッグアンドドロップする方法などがあります。
ただし、一つだけ注意点があります。必ずモデルデータから先に取り込むようにします。なぜならアニメーションデータのインポートオプションで、「どのキャラクター(スケルトン)のアニメーションとして読み込むか(Target Skeleton)」を指定する項目があるからです。

ROAD TO STINGRAY

複数のアニメーションFBXをまとめて取り込むときは、AssetBrowserの指定の階層で右クリックすると「Import Asset」というメニューがあるので、そこからインポートするのが最も簡単です。

Animation Controllerについて

Animation Controllerとは、アニメーションを制御することができるノードグラフです。一つ一つのノードが「状態」を表します。
たとえば以下の画像の場合、左側のノードは一つのアニメーションがループ再生される状態です。右側のノードはループにはなっておらず、一度再生されるとそれでおしまいです。

ROAD TO STINGRAY

ノードとノードの間にある矢印は、「遷移」を表します。左側のノードの状態から「AnimEvent_Run」という命令がきっかけになり、右側のノードへ遷移します。また、右側のノードから延びている「AnimEnd」は、右側のノードのアニメーションが「再生を終えたときに発生する命令」となります。

それでは「ぱぴこ」の遷移グラフを見てみましょう。
「ぱぴこ」は最初に「待機(Clip_wait01)モーション」がループ再生されます。そして二つの「遷移」が存在します。これはイベントシーン用とゲームプレイ用です。ちなみに今は二つですが今後増えていきます。
右側に茶色のノードが出てきましたが、これは「Group State」と呼ばれ、複雑になったグラフを束ねるのに役立つグルーピングノードです。

ROAD TO STINGRAY

ゲームプレイ用のノード「Running_State」をダブルクリックすると以下の画像のように中身が展開されます。

青いノード「Clip_State」の他に、今度は緑色のノードが現れました。これは「Shortcut State」と呼ばれる任意のノードへのショートカットです。これを使うとノードグラフの複雑さが緩和され、見やすくなるのでお勧めですが、多用しすぎると逆に分かりにくくなるので注意が必要です。

もしかすると、青いノード(Clip_State)には一つのノードに対して一つのアニメーションしか設定できないと思われるかも知れませんが、実は複数のアニメーションを設定してランダムに再生してくれるという便利機能を備えています。「ぱぴこ」でもこのランダム再生機能が大活躍しております。

ROAD TO STINGRAY

追加したそれぞれのクリップの右側のスライダーを調節することで出現頻度を重み付けすることができます。

Animation Controller のレイヤー機能

上で紹介した「ぱぴこ」の遷移グラフは「身体」のアニメーションのみを制御しているものでした。顔のアニメーションは含まれていません。
市販されているようなゲームでは、身体のアニメーション(ポーズ)に関係なく表情を変化させているものが多いと思います。つまり、身体と顔の遷移グラフが異なるということです。Stingrayでそれを実現するにはレイヤーを使います。

ざっくりとですが、レイヤーのイメージは以下のようになります。
「ぱぴこ」の場合、身体の動きに関係なく、眼球の微動やまぶたの開閉などをランダムで再生できるようになっています。

ROAD TO STINGRAY

ちなみに、レイヤーの追加方法は、Animation Controller の「Layers」の右クリックメニュー「Add Layer」からとなっています。

ROAD TO STINGRAY

イベント(AnimEvent)の発行

アニメーションを切り替えるには「きっかけ」が必要です。たとえば、キーが押されたときや、障害物に衝突したときなどです。「Send Animation Controller Event」というFlowノードを使ってFlowからAnimationControllerに対してイベント(AnimEvent)を発行します。この辺りは第5回の記事でも紹介されているのでシンプルな例を以下に示します。

「1.スペースキーが押されたらジャンプモーションへ遷移させる」

ROAD TO STINGRAY

「2.障害物に接触したらダメージモーションへ遷移させる」

ROAD TO STINGRAY

アニメーションの指定のフレームでイベント(FlowEvent)を発行する

今度のイベントは、AnimEventとは逆です。アニメーションの特定のフレームでAnimationControllerからFlowに対してイベント(FlowEvent)を発行します。

ROAD TO STINGRAY

この機能を「ぱぴこ」でどのように利用しているかというと、「ジャンプモーションで足が地面から離れた瞬間」に「砂ほこりエフェクト」を発生させるためや、アニメーション中のキャラクターの詳細な「状態」を得るために使っています。

設定したFlowEventは「On Animation Controller Flow Events」というFlowノードから取得することができます。

ROAD TO STINGRAY

NVIDIA PhysXを用いた髪の毛の物理シミュレーション

作成したアニメーションをStingrayに組み込むところまでを説明しました。今度は作成したアニメーションをただ再生するのではなく、物理シミュレーションを利用して自動的に動かす方法です。
こういったダイナミックなアニメーション技術の良いところは、「データを作らなくて済む」ということもそうですが、違うアニメーションに切り替わったときの「繋ぎが自然に見える」というのが素敵です。

MayaでPhysXのセットアップ

まず忘れてはいけないのが「単位」の設定です。
PhysXのセットアップを行うときは「メートル」にします。
Mayaのデフォルト設定は「センチメートル」です。
モデルやアニメーションを作るときは「センチメートル」で問題ありません。「ぱぴこ」のデータもすべて「センチメートル」で作ってあります。

セットアップの流れは大きく分けて三つあります。
一つ目、「骨を物理オブジェクトにする」
二つ目、「物理オブジェクト同士を拘束する(コンストレイント)」
三つ目、「物理オブジェクトとコンストレイントの調整を行う」

1.骨を物理オブジェクトにする

物理で動かしたい骨を選択して「Create Dynamic Rigid Body」を実行するだけで物理シミュレーションの対象となります。

ROAD TO STINGRAY

オレンジ色のオブジェクトが追加されました。これは衝突判定用のコリジョンです。ある程度自動でサイズを決めてくれます(左画像)が、調整は必要です。

ROAD TO STINGRAY

2.物理オブジェクト同士を拘束する(コンストレイント)

1.で作成したRigidBodyオブジェクトを二つ選択して「Create Constraint」を実行します。このとき、親、子の順番で選択する必要があります。

ROAD TO STINGRAY

三角錐と円が合体したオブジェクトがコンストレイントです。円は「ロール(Twist)」の角度制限範囲を表し、三角錐は「ヨー(SwingY)」と「ピッチ(SwingZ)」の角度制限の範囲を表しています。

ROAD TO STINGRAY

3.物理オブジェクトとコンストレイントの調整を行う

「ぱぴこ」の髪の毛の場合、あまりもっさりした動きにはしたくなかったので、「重さ」のパラメーターをかなり下げ、さらに部分的に重力をOFFにしている場所もあります。また、「髪の毛」なので衝突したときに「跳ね返り」は必要ないため「Bounciness」はゼロとしました。

ROAD TO STINGRAY

コンストレイントに関しては、先端の方に角度の自由度を持たせつつ、根元の方はやや硬い動きになるようにしています。

Stingrayでの設定方法

Mayaで行ったPhysXの設定情報は専用のXMLファイルで出力します。StingrayでそのXMLファイルをロードするには、対象のキャラクターUnitの名前とXMLファイルの名前が一致している必要があります。
たとえば、「ぱぴこ」なら「PPK_m.unit」というUnitファイル名なので、「PPK_m.xml」というファイル名である必要があります。そしてAssetBrowserで「ReImport」を行うことで自動的にロードされます。

ROAD TO STINGRAY

ロードできているかは、Unit Editor に「physx scene」フォルダに入った「Physics Actor」を見て確認することができます。
また、プロパティのPhysicsカテゴリの「Enabled」はオフにしておくのがよいです。デフォルトではオンになっているのですが、そのままではゲーム開始と同時に暴れ狂う場合があるので、OFFにして大人しくさせておきます。

ROAD TO STINGRAY

PhysXの有効無効を制御するのは、AnimationControllerで行います。「Ragdolls」の右クリックメニューから新しい設定を追加できます。この設定は、どの骨がキーフレームアニメーションでどの骨が物理で動くのかといった「状態」を表します。「ぱぴこ」の場合、「Ragdoll_All_Disable」と「Ragdoll_All_Enable」を持っていて、単純にオンオフできるようにしています。

ROAD TO STINGRAY

「Ragdoll_All_Disable」と「Ragdoll_All_Enable」

複数の骨の設定を一つの状態として管理できる。

ROAD TO STINGRAY

Ragdoll State

物理挙動の切り替えを行う遷移ノードです。キャラクターの遷移グラフとはレイヤーを分けています。部分的な物理化を行うためにはレイヤー分けが必要です。全身を対象にした物理シミュレーション(ラグドール)であれば、レイヤーを分ける必要はありません。

ここまでくれば、あとはゲーム中から「遷移」するための命令を出せば切り替えることができます。
以上でポニーテールの説明はおしまいです。ありがとうございました。

ぱぴこ

ソースコードをGITHUBで公開中!

先日のイベントで公開しましたが、実はこのプロジェクトのソースコードやプロジェクトのデータは既にGitHubにて公開されています。ダウンロードして頂ければ、どなたでも試してみることが出来ます。

まず、下記のAutodesk社のURLから、Stingrayの30日体験版をダウンロードし、インストールします。

http://www.autodesk.com/products/stingray/free-trial

ダウンロードからテストプレイまでの流れ

GitHub URL
https://github.com/guncys/MeowedfulDays

まず、上記のURLからDownload ZIPを選択しダウンロードした後で、好きなフォルダに解凍します。 次に、Add Existingから既存のプロジェクトを追加出来ますので、先程ダウンロードしたフォルダの中にある、rtsを選択します

プロジェクトがロードされたら、 “rts” を選び、Openします。 初回ロード時のみ、数分のコンパイル処理が走ります。次に、下図の様にlevelsフォルダからtesmap1.levelを選択しダブルクリックします。

すると、上部ペインのLevel Viewportにマップが読み込まれます。 そこで、F8キーか、TestLevelボタンを押すとテスト版がビルドされます。

開発環境

PC G-Tune「NEXTGEAR-NOTE i5700 シリーズ」
プロセッサ Intel(R) Core(TM) i7-4720HQ CPU @ 2.60GHz 2.60GHz
RAM 8.0GB
OS Windows8.1 x64
グラフィックスカード NVIDIA GeForce GTX 970M
DCCソフト Maya 2016, 3ds Max 2016
Stingray 1.2.526.0
Maya Learning Channel