[Unite 2018]キャプチャデータはもういらない! プロシージャル・キャラクターアニメーション作成ガイド
プロシージャル技術といえば,昨今のゲーム制作全般で,もはや大型タイトルでは必須技術だ。アニメーションだけでなく,さまざまなところで使われているものである。そんなゲーム制作の現場でも熱いテーマについて講演を行ったのは,テレサイトに在籍するデザイナーの落合信人氏だ。
落合氏は,講演のタイトルの「キャプチャーデータがいらない」とはどういうことなのかについてから説明を開始した。
まず紹介されたのは,落合氏が個人で開発している,キャラクターの二足歩行のアニメーションをプロシージャルで生成するアセット「SmartRig Biped(以下SmartRig)」だった。Mecanimが適用されたモデルにアニメーションコントローラを付け,アセットのSmartRigを付けるだけで,二足キャラクターの歩行アニメーションを自動で作成してくれるというものだという。
使い方は至ってシンプル。シーンにApplyRootmotionを外したキャラクターを設置して,適当なアニメーションコントローラをアタッチし,SmartRigのコンポーネントをアタッチして,キャラクターに合わせて設定を調整するだけ。これだけで二足歩行のアニメーションを自動で行ってくれるというすぐれものだ。さらにキャラクターを物理に沿って動かすRagdoll,経路探索で使われるNavMeshにも対応しているという。
ちなみに,普段の落合氏は,ゲーム制作とは無縁のテレビのCG屋であり,かつては,プロデューサーとしてタレントのギャラ計算などを行っていたという経歴を持つ。その氏が,どうしてこのUnityのアセットを作ろうとしたのだろうか。
そもそもキャラクターのアニメーションを自動生成しようと思ったきっかけは,本業での無茶振りからだという。テレビドラマでは何気ないシーンでもCGが使われていて,スケジュールが押し迫るなか「(画面奥にいる)通行人などをちょっと増やしてくれない?」とわれるようなことが多かったようだ。そのたびに大変なアニメーション修正作業をやらねばならず,どうにか自動生成できないか,と思ったのが大きなきっかけだそうだ。そういう事情から,最初は「CINEMA 4D(以下C4D)」のプラグインとして開発され,それをベースに今回のUnity用アセットが開発されたという。
「面倒なことは自動化して楽をしたい」といった落合氏の個人的な事情もさることながら,プロシージャルを選択した理由として,キーフレーム型アニメーションの問題も指摘されていた。とくにモーションキャプチャの場合は,キーフレームによってアニメーションを修正することが困難であり,それならと手付けにすると今度はアニメーションそのものの制作負担が大きくなる。先ほどの「通行人を増やす」という要望にも,単に複製するだけで使い回すがすぐばれるので,モーションを修正するか新たに作り直す必要があったという。
さらに,モーションブレンドツリーについても言及しており,アニメーションを滑らかにつなげてくれるためには必要で,掘り下げて見ればいい機能と肯定しつつも,キャラクターを動かすとなると見た目が複雑化して,扱いが難しくなってしまう面を持つという。
こういったこともあり,パラメータをちょこっと変えたりするだけで,動きを修正したり,キャラクターアニメーションのバリエーションを増やすことが可能になる方法として,自動生成というアプローチをとってみたと落合氏は語ってくれた。
続いて,SmartRigがさらに掘り下げて紹介された。 使い方は先ほど紹介したように動かしたいキャラクターにアタッチするだけで,そこに設定するパラメータは,大まかに分けて二つ。二足歩行としてのキャラクターがどのようなキャラクターであるかを設定するSetup Parameterと,アニメーションの振る舞いを調整するために必要なAnimation Parameterだ。
まず,Setup Parameterに設定された数値によって,身長などを考慮した基本的な動きのアニメーションが決定される。例えば,長身のキャラクターであれば歩幅が大きくなるので,移動スピードも速くなるという具合だ。
Animation Parameterは,キャラクターの振る舞いを変えるために設定するパラメータ群だ。これはSetup Parameterによって生成されている基本アニメーションに新たに手を加え,体格のいいキャラクターが,腕を上げて体を左右に大きく揺さぶるようにしたりすることもできるようになっているとのこと。これらのパラメータは,外部からのアクセスが可能となっていて,低いところを通りたいときは,腰のパラメータを低くすることで,くぐり抜けるアニメーションを自動的に生成することが可能になるという。
ここまででSmartRigが,移動に関するアニメーションを自動的に作ってくれることは分かった。しかし,ゲームで使われるアニメーションは歩いたり走ったりするだけではない。ほかのアクションをさせたいときは,どうするのか? SmartRigは歩行専門のアニメーション生成しかできないので,ゲーム中の別のアニメーションをさせたいときには,クリップアニメーションを使うことで対応しているという。基本のアニメーションレイヤーの上にアニメーションレイヤーを加え,そこに動かしたアニメーションクリップ置いて制御することで,移動はSmartRigで行いつつ攻撃などのアニメーションを同時に行うことができるといった具合だ。
そして,落合氏がC4Dで手掛けた映像のなかで,プロシージャルらしい映像シーンを紹介してくれた。群衆が入り乱れて戦うシーンでは,非常に複雑な動きをしていつつも足がついてきていて,全体のアニメーションが複雑になってもモーションとして見れる形になっていると解説。
次に六足の昆虫が群がっているシーン。黄色い円の範囲で周りをサーチし,円に入ったときに応じた動きをさせて昆虫そのものの動きを自動生成している映像だという。
これらの,アニメーターに発注すると死ぬほど手間のかかる作業をしなければならないシーンでも,手間をかけずに見た目として破綻せずに済ませられ,さらにキーフレームアニメーションだけではできない操作や動きを加えられるのは,プロシージャルならではだろうということだ。過去の映像のみだと片手落ちということで,SmartRigを使ったデモ映像も用意してくれた。
これは,キャラクターの周りにコリジョンを用意して,コリジョン範囲にほかのキャラクターが入ったらその反対側に移動しつつ,入ってきたキャラクターのほうを向くというスクリプトで動いているもの。要は逃げながら相手のほうを向くというアニメーションを自動的に生成し続けているというシーンだが,手作業では比較的難しい,斜め後ろを向きながら回転するといった複雑なアニメーションにも,きちっと全身が対応できているという。
さらにSmartRigがどのようなアルゴリズムで動いているか,コア部分だけではあるが簡単に解説してくれた。
まず,歩きのサイクルを二歩を基本としてカウントする。こうすることで,0.0〜0.5のときは左足が動き,0.5〜1.0までは右足が動いているというサイクルになって,距離から足の動きを把握するのに都合がいいという。あらかじめ二歩進む距離をCycle Lengthとして定義しておけば,どれだけ進んだか比較することで,左右の足の動きが決まるのだ。
ただし,これは,距離に対する足の位置だけなので,動きとしてはすり足状態になる。ここに0〜1で周期するSin関数の動きを0.5倍して,足の高さに適用することで,上がっては下がるという動きに変化させる。
しかし,かっちりとした周期では,人らしい動きとはほど遠く,まさにロボットのようなアニメーションしかできない。これに抑揚をつけるためにもうひと手間加えることになる。最終的には,スライドにあるようにDeform操作を加えて最終的なアニメーションとしているようだ。SmartRigの開発には4年かかっているが,人らしい動きの抑揚を管理するDeformの調整は難しく,これだけで3年を使ったとのこと。
最後に二足の応用としての四足歩行,歩行アニメーションの下半身を固定してちょっとしたダンスっぽいアニメーションを紹介して講演は終了した。
さすがにこのアセットを使うだけで,講演タイトルにあるように「キャプチャデータはもういらない!」となることはないだろう。とはいえ,ゲーム内の状況に応じて歩行アニメーションを自動制御してくれる汎用性があるだけでも,動きを管理するプログラマやアニメーションを作るアニメーターの負担が減ることは間違いない。
夏頃にUnity AssetStoreでリリースを目指して開発は進んでいるようなので,どこまで違和感のない人の動きに近づけられるのかに期待したい。