講演を担当したJohn Hable氏
![画像集#001のサムネイル/[GDC 2014]次世代のキャラクターアニメーションはこうなる。フェイシャルキャプチャを用いたプロシージャル処理の実際](/games/999/G999905/20140322020/TN/001.jpg) |
Game Developers Conference 2014の最終日である米国時間2014年3月21日に行われたセッションから,「
Next-Gen Characters:From Facial Scans to Facial Animation」の模様を紹介したい。
昨今,スキンシェーダの進歩をはじめとする多くの要因により,ゲームに登場するキャラクターが非常にリアルになってきている。とくに3次元スキャナによって,本物の人間そのままのCGキャラクターを作ることも難しくなくなり,実際にそうしてキャラクターが作られることすらある。さらに,フェイシャルキャプチャで表情を読み取り,顔の動きを再現することもできるので,キャラクターのリアルさは格段の進化を遂げている。
このような「リアルで当たり前」な時代における
次世代キャラクターとは,なにか? それは,さらにリアルに動くキャラクターのことである。
Agni's Philosophyでのパフォーマンスキャプチャなどを見て,動きを取り込んで再生すれば,本物そっくりになることは決まっているのだから,それで問題は解決する,と思っている人もいるかもしれない。だが,話はそう簡単ではない。一定のカットシーンならそれで良いのだが,インタラクティブな動きをするキャラクターでは,お決まりの表情を繰り返すだけというわけにはいかない。かといって,ありとあらゆる顔の動きをキャプチャデータとして持っておくのも非現実的である。
そこで登場するのが,アニメーションを自動で生成するプロシージャルアニメーションの手法だ。
前述のように,3次元キャプチャ技術によって,簡単にリアルなモデリングデータを取れるようになった。問題は,それにどうリグを入れてアニメーションさせるかだと,FilmicWorlds.comの
John Hable氏は語る。
単に基本的な顔を取り込んで,表情ごとに形状を変化させればよいかというと,それだけではなく,表情それぞれでテクスチャを変える必要もある。以下の写真は,表情を正面から撮影した顔写真と,それをテクスチャにしたときのデータだ。顔のデータの変形だけでは,血流量の変化などによる表情の違いまでは表現できないのだという。
取り込んだ顔データをどのようにアニメーションさせるかについては,技術解説書『GPU Gems 3』で解説された「Playable Universal Capture」(Ucap)と,サウスカリフォルニア大学による「
Polynomial Displacement Maps」(PDM)の手法を参考にし,高精度の基本データと低精度だが大量の表情データを組み合わせる手法を採用している。
Hable氏が顔データの取得に利用したのは,
Infinite-Realitiesによる高精度フェイシャルキャプチャだ。これにより,多くの表情の基本的な形状とテクスチャをデータ化している。キャプチャ時には,基本的なドットマーカーを付けているが,それで足りないものは手動で補完したという。そのマーカーをもとに,150ものリグを自動生成している。
その際,ソルバーのアルゴリズムは,ニュートラルな表情の顔でのジョイントの位置と各表情でのドットの位置などから,ジョイントの動きベクトルを算出し,ジョイントによる動きを行った結果と実際のスキャンでの頂点位置の差を埋め,ラプラシアンフィルタを掛けるという手順になっている。
次に,ニュートラルな表情から見たテクスチャのゆがみを検出し,それをデータ化するのだが,ディフューズデータは,表情ごとに撮影時のライティング条件が微妙に変わる関係で正確に解くことが難しいという。そこで,ニュートラルな表情以外に,近い表情を5個探して中央値を取ることで代用するなどの対策を立てたとのこと。
ノーマル,アンビエントオクルージョン(AO)についても同様に処理し,ブレンドされた形状にまとめ上げる。これには,デザイナーによる作業が発生するので2日くらいかかるとのこと。
これで基本的な表情を動かすフェイシャルアニメーションデータが完成したのだが,この段階ではすべての表情ができるわけではない。キャプチャされたのは70種類の表情でしかなく,これらをもとにさまざまな表情を作っていかなければならない。そのための手法としては,主成分分析(PCA)が使われている。以前,データ駆動型プロシージャルアニメーションの試みとして紹介した「
こちら」の記事と同様の手法である。
このあたりになると,もうなにが行われているのか理解が追いつかないのだが,各表情の差分データに加重を付けて加算し,希望のデータを得るということらしい。PCAを解くためには,特異値分解(SVD)の手法が取られている。
PCAの要素としては,顔の各部分が使われているが,これはデータの圧縮も兼ねているようだ。例として紹介された
Stretchというデータは,顎と額の両方に特徴的なしわが入ったもので,
FACS02は額のみ,
FACS27は顎のみにしわが入っている。そういったエリアを12個用意し,データとして入力している。
そんなこんなで70種類の表情のデータが,PCAによって最終的に8.7MBにまで圧縮されたという。そして,12成分の値に応じて,中間モーションも自在に取り出せるようになった。
これをモーションキャプチャデータに同期してレンダリングしたのが,以下の動画である。
顔にマーカーを貼り付けた人物の表情が,見事に作成したキャラクターにリキャップされて再現されている。
![画像集#032のサムネイル/[GDC 2014]次世代のキャラクターアニメーションはこうなる。フェイシャルキャプチャを用いたプロシージャル処理の実際](/games/999/G999905/20140322020/TN/032.jpg) これが「Powdered Doughnut」問題 |
ちなみに,レンダリングにはNVIDIA式のテクスチャスペースによる表面化散乱を使ったスキンシェーダが使われている。後方からの光で望まない部分が明るくなる「Powdered Doughnut」問題を回避するため,セルフシャドウとSHアンビエントオクルージョン処理も追加されているほか,輪郭部分を重点的に補完するAdaptive Tessellationの導入で滑らかな形状を実現している。
![画像集#040のサムネイル/[GDC 2014]次世代のキャラクターアニメーションはこうなる。フェイシャルキャプチャを用いたプロシージャル処理の実際](/games/999/G999905/20140322020/TN/040.jpg) |
![画像集#041のサムネイル/[GDC 2014]次世代のキャラクターアニメーションはこうなる。フェイシャルキャプチャを用いたプロシージャル処理の実際](/games/999/G999905/20140322020/TN/041.jpg) |
表面化散乱はテクスチャスペースのブラーで近似されている |
「Powdered Doughnut」問題を回避するためのSHアンビエントオクルージョンとセルフシャドウの導入
![画像集#048のサムネイル/[GDC 2014]次世代のキャラクターアニメーションはこうなる。フェイシャルキャプチャを用いたプロシージャル処理の実際](/games/999/G999905/20140322020/TN/048.jpg) |
![画像集#049のサムネイル/[GDC 2014]次世代のキャラクターアニメーションはこうなる。フェイシャルキャプチャを用いたプロシージャル処理の実際](/games/999/G999905/20140322020/TN/049.jpg) |
Adaptive Tessellationの効果
![画像集#050のサムネイル/[GDC 2014]次世代のキャラクターアニメーションはこうなる。フェイシャルキャプチャを用いたプロシージャル処理の実際](/games/999/G999905/20140322020/TN/050.jpg) |
![画像集#051のサムネイル/[GDC 2014]次世代のキャラクターアニメーションはこうなる。フェイシャルキャプチャを用いたプロシージャル処理の実際](/games/999/G999905/20140322020/TN/051.jpg) |
かなり高品質な素材から手間を掛けてデータを作っただけあって,表情はそれなりに自然だ。フォトリアルなキャラクターをレンダリングすることが当たり前にできるようになった現在だからこそ,それに見合った表情を持つキャラクターが求められている。パフォーマンスキャプチャに匹敵する表情が作れてこその次世代ゲームであり,今回の取り組みは,そこに向けた確かな一歩を感じさせるものだったと言えるだろう。