簡単に用意する!CrowdのActionデータ
2017/1/18
新年明けましておめでとうございます。
本年も株式会社デジタル・フロンティアをどうぞ宜しくお願い申し上げます。
2017年最初の投稿は、ようやくCrowdTD2年目になった飯田です。
前回の宣言通りに、今回はCrowd関連の内容です。
内容はタイトル通り、
『簡単に用意する!CrowdのActionデータ』
です。
小さいプロジェクト等でデータ用意する時間が取れない場合に、簡単にActionデータを用意する方法になります。参考になれば幸いです。
CrowdのActionデータとは?
Crowdソフトでは、基本的に歩いたり、立ち止まったり、驚いたりなど細かく分けたMotionデータをCrowdソフトに『Action』として登録して使用します。
こちらは、Actionデータの元になるMotionデータです。
このMotionデータを登録して再生することで、Agentに所定の動作をさせます。
基本的な作り方をすると、簡単な動作でも細かく分けるため、それなりの数のActionデータが必要になってきます。
例えば、「Stand(立ち)」と「Walk(歩き)」だけを繰り返すような群集を作る場合は、Actionの種類はこのようになります。
これは、MassiveのMotionTreeで、Actionの流れを示したものです。
この◎のノード一つ一つがActionになります。
この図ですと、
以上、5つのActionがあります。
ただ、2つの動作を繰り返すだけの簡単なものですが、それぞれ移行するための動作が必要となります。
そのため、動作数が増えると必要なActionがどんどん増えてきます。
こちらが私が勉強も兼ねて作成した、
「Stand(立ち)」と「Walk(歩き)」と「jog(軽い走り)」と「flee(逃げ)」の汎用AgentのMotionTreeです。
回避するための動作や立ち止まっている時の動作など含まれているので、数が増えて52個のActionがあります。
汎用ということで数が多いですが、これが格闘用となると更に数が増えてたりします。
こちらが弊社で過去に使用した格闘用MotionTreeになります。
これくらいになると、しっかりと準備しないと把握も難しくなります。
Action数は数えたく無いです…
さらに、各Actionはそれぞれ矢印の方向に動作が移行するので、移行先とポーズをある程度合わせる必要があります。
ポーズが大きくズレていると、移行時に多少ブレンドするとはいえ不自然な動きになります。
この調整が非常に大変で、数が増えるほどチェックも含めて時間がかかります。
上記の汎用Agentの52個でもかなりの時間を必要としました。本当に大変でした…
通常の方法では、このようにActionデータを用意するのに時間を必要とします。群集が複雑な動作をする場合は、ある程度止むえないかと思います。
しかし、小さいプロジェクトの場合やそもそも動作が移行しない場合は、もっと簡単にActionデータを用意出来ないのか!?
簡単に用意するためにActionを独立させよう
ということで、簡単にActionデータを用意する方法として、
『各Actionを独立させる』
という方法を取ります。
こうする事でActionデータを非常に簡単に用意出来ます。
ここで言う『独立させる』というのは、
Actionを移行させないで1つのActionをループして使用することです。
通常は、細切れになったActionを状況に合わせて、移行しつつ再生しています。
Agentが、Stand→StandToWalk→Walk→WalkとActionを再生する場合、移行時に不自然な動きをしないように各Actionデータのポーズを合わせたりと調整が必要になります。
そこで、Actionを移行を考えずに、このように同じActionをループ再生するようにします。
もちろん、すべてのAgentが同じActionだと不自然なので、ある程度バリエーションを用意して、ランダムにActionを割り当ててループ再生をします。
このように、1つのActionをループして使用することで、移行のためにポーズを合わせる必要が無くなり、データの用意が簡単になります。
用意するのは、ループしているMotionデータだけになります。
短いループだと、カット内でループが分かったりするので、比較的長めのループをオススメします。
あまり長いとデータ的にも重くなると思いますので、だいたい4秒~10秒程度で。
バリエーション数は多ければ多いほど良いですが、この方法だと追加も簡単に出来ますので、最初は少なくても大丈夫です。
同じ動きのAgentが多い場合は、バリエーションを追加しましょう。
また、独立しているので、Crowd用の専用Motionを用意しなくても、過去のプロジェクトのMotionをループ化して使用することも出来ます。
さらに、ランダムにActionを割り当てるだけのため、複雑なBrainを作成する手間も減ります。
弊社ではMassiveとMiarmyを使用していますが、Miarmyだと『Action Group』を使うだけで簡単に出来ます。
Massiveだとほんの少しだけ手間ではありますが、それでも簡単に出来ます。
こちらは、そのほんの少しだけ手間なMassiveのBrainですが、単純にループだけであれば、こんな感じに。
欠点としては、Actionの移行を想定していないので、状況に合わせて動作を移行するということが出来ません。
そういう場合は、通常の方法でActionデータを用意したほうが簡単に出来るかと思います。
ちなみに、実際にプロジェクトでもこの方法を使ってActionデータを用意したことがあります。
じっくりと群集を見るようなカットが無かったので、モーションキャプチャデータをActorInputして、ループ化して、簡単に接地とポーズを行う程度の作業だったため、大体10分で1個のActionデータを作成出来ます。
1日で約40個のActionデータを用意出来ました。
修正や調整があり、もう一日くらい時間が必要ではありましたが、それでも通常の方法に比べて非常に早く作成出来ます。
小さなプロジェクト、または群集の動作が限定している場合は、この方法でデータを用意すると大きくコスト削減出来ると思います。
逆に、大きなプロジェクトや群集の状況が変わりActionが移行する必要がある場合は、通常の方法をオススメします。
最後に
というわけで、上記の方法で寄せ集めたActionを使い、Miarmyで逃げ惑う群集を作成しました。
走っているActionsに、他のAgentを回避するBrainを足しただけの簡単な群集です。
よく見ると、短めのループやバリエーションも少ないので同じ動きのAgentが居ます。
実際にプロジェクトで使用するには調整が必要ですね。
しかし、もっと引いたり、カメラが動いているカットでは、これでも使えるかと思います。
Crowdを1年間触って思ったのが、まずデータを用意するのが大変です!配置作業は思ったより楽でした。
そのため、少しでもデータを用意するコストを削減しようと、上記の方法を考えました。
なので、皆さんもデータを用意するコスト削減することで、気軽にCrowdを!
といっても、AgentSetupやBrainやRenderingなど、この他にも作業は山積みですので、なかなか気軽に始められないかもしれません…
そのような場合は、是非弊社にご相談ください!!
最後に宣伝も出来ましたので、今回はこのへんで。
次回もCrowdTDらしく、Crowd関係と思っていますが!
が!!
最近MotionBuilderのPythonでツール作るのが楽しく、もしかしたらネタが無ければそこら辺のお話かも?
では、また次回よろしくお願い致します。
※免責事項※
本記事内で公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください。
コメント
コメントフォーム