イベント
[CEDEC 2017]ニューラルネットがキャラの動きを自然に,処理負荷を低くする? キャラクターアニメーション品質向上に向けた新提案
ゲームが3D化を果たして以降,キャラクターの自然な動きを作り出す方法はゲーム制作における大きな課題の1つになった。モーションキャプチャを使って現実の人の動きをデータ化してゲームに取り込むことは可能だが,ゲーム中のキャラクターはユーザーの操作に応じてさまざまな動きを見せなければならないからだ。
しかし,「だからゲーム中で起こり得るすべてのモーションをキャプチャし,データとして用意しておきましょう」というのは,ハードウェア側のストレージやメモリ,それにCPUパワーによる制限を考えると現実的でない。そこで,ごく限られたモーションキャプチャのデータを組み合わせ,多彩な動きを作り出す「モーショングラフ」といった手法が考案されたのだが,特定の状況下で奇妙なモーションを作り出してしまう欠点が表面化することもあった。
そんなキャラクターアニメーション生成の課題を解決するかもしれない新手法を提案したのが,エジンバラ大学情報学部准教授の幸村 琢氏である。
CEDEC 2017の初日に行われた氏によるセッション「ニューラルネットを用いたキャラクター制御」の概要を,本稿では紹介してみたい。
キャラクターアニメーションを生成する学習データの作成手法
今回,幸村氏がCEDEC 2017のセッションで紹介したアニメーション生成技法は,SIGGRAPH 2017でエジンバラ大学のDaniel Holden氏が発表した「Phase-Functioned Neural Networks for Character Control」(ニューラルネットを用いたキャラクター動作生成)を基にしたものである。
幸村氏によると,この研究は主筆のHolden氏がゲームが好きで,「ゲームに応用できる研究をしたい」というところがスタート地点になっているのだそうだ。ゲームで使うために,リアルタイムで高速にアニメーションを生成でき,同時に可能な限り消費するメモリの量を抑えるというところにゴールを設定したという。
さらにスケーラビリティが高く,多様なモーションが生成できることもゲームでは重要として,ここでニューラルネットワーク(深層学習)を使うことを考えたそうだ。
というのも,ニューラルネットワークなら大量のモーションを学習でき,学習後の結果を使ってモーションの生成を行う負荷が低く,しかも学習後のデータ量も小さくて済むからだ。「速い」「データ量が小さい」「多様なモーションに使える(=スケーラビリティがある)」ので,ゲームに最適というわけである。
実際にどんなものができあがったのかは,先ほど示したリンク先にあるデモで実際に体験できるが,ひとまずは下のデモムービーを見てほしい。ゲームパッドによる操作でキャラクターが自然に動く様子を確認できるだろう。
仕組みは下のスライドにあるとおりで,「フレームi」を基に,ニューラルネットの学習結果を使って続く「フレームi+1」を生成する仕組みになっている。
ニューラルネットの学習にはモーションキャプチャのデータを使っているそうだ。Holden氏本人が歩いたりサイドステップを踏んだり,積み上げた机や台によじ登ったりという動きを実際に行って,それをキャプチャしたという。
よじ登るところで,地形のデータはキャプチャしていないそうだ。その代わりにゲームから地形のデータを抜き出し,Holden氏の動きにフィッティングさせるという方法を使って学習データを生成したとのことである。
もちろん,Holden氏の動きとゲームから取り込んだ地形とがピッタリと合うことはありえない。そのため,ゲームから取り込んだ地形を変形させて,キャプチャした足が地面に接地するよう調整する手法は採用しているという。ある程度自動化しているものの,多少の人手はかかったそうで,現時点ではやや手間がかかる工程になっていると,幸村氏は振り返っていた。
Phase-Functioned Neural Networkとは?
さて,以上のようにして用意した大量のデータをニューラルネットワークに学習させるわけだが,この手法においてキモになるのが,「Phase-Functioned Neural Network」(フェーズファンクション・ニューラルネットワーク,以下 PFNN)と命名されたニューラルネットワークだ。
PFNNは下の図にあるのような3層のニューラルネットワークだが,通常のニューラルネットワークだと各層のパラメータが学習後は固定されるのに対して,PFNNでは「Phase-Function」と呼ばれる一種の周期関数を使って周期的に変化させるのが特徴となっている。
上のスライドで「歩容の位相に応じて変化する」とあるが,どういうことかというと,Phase-Functionは「左足が接地した時点を0とすると右足の接地がπ,そして再び左足が接地した時点が2π」(幸村氏)となるような周期関数になっているという。
このような周期関数を使うことで,歩行のモーションを極めて精度よく学習できたというのが,PFNNの目新しく,かつ注目できる成果と言っていいのではないかと思う。
PFNNに投入される学習データは,キャラクターの体幹からの相対的な各関節の位置と速度,回転の情報と,地形の情報だという。地形には,進行方向に対して12フレーム分先までと12フレーム分過去のデータを含むと幸村氏は説明していた。
また,進行方向に対して両サイド2点の高さも学習データには加えているそうだ。これによって,たとえば「細い橋をバランスを取りながら渡る」というようなモーションも学習できるのだという。つまり「キャラクターの両サイド2点の高さが低い場合のモーション」も学習することができるわけである。
結果としてできあがったのが先ほど紹介したデモであり,ムービーである。デモでは不自然な動きを補正するためにIK(Inverse Kinematics,逆運動学)を使っているそうだが「(IKは)なくても問題ないくらい」(幸村氏)のモーションを得られるとのことだった。
当初の目標であったメモリ消費量や演算負荷の低減について言えば,その成果は目覚ましく,下のスライドにあるとおり,Phase-FunctionにCatmull-Romスプライン曲線補完を使う場合でも学習後のデータサイズはわずか10MBで済み,次フレームの計算に要する時間も1.8msで済んだという。幸村氏は「補完の計算負荷がやや高いので,補完を使わずにデータを増やせば,計算時間は1msを切れる」とも述べていた。
ちなみに,元の学習データは容量が1.5GBあるそうだ。つまり,PFNNを使って学習させた後のニューラルネットの重みデータは元のサイズの150分の1に縮小できた計算になる。データが小さく,かつ計算量も小さいということで,PCゲームやゲーム機だけでなく,モバイルゲームにも応用できそうな技術と言えそうだ。
以上がPFNNの概要だが,質疑応答でちょっと面白い話もあったので付け加えておこう。前述のとおり,Phase-Functionは人の歩容に合わせた周期関数になっている。「なら,人の歩容に合わないモーションはどうなのか?」という疑問は当然湧くだろう。
質疑応答で出たのは,たとえば「ケンケンパ」のような動きで,これは今のPhase-Functionでは「対応できないと思う」と幸村氏は語っていた。
また,4本足あるいは6本足の生物ではどうか,という点も気になるが,これも今のPhase-Function対応できないはずだという見解を幸村氏は示していた。実際,4本足の生物だと歩行の速さによって位相が変わるという特性もある。馬の並足とギャロップでは位相が違うというのが典型的な例だが,こうした生物にPFNNを当てはめるには,Phase-Function部分に一工夫必要になりそうだ。
いずれにしても,このPFNNを土台にしてひねりを加えていくと,まだまだ面白い広がりがありそうで,将来が楽しみな技術と言えるのではないだろうか。
4GamerのCEDEC 2017記事一覧
CEDEC 2017公式サイト
- この記事のURL: