今週の進み具合 #11 - スプライトアニメーション

進み具合 (2014年4月30日 - 5月11日)

目のまばたきを UV アニメーション(スプライトアニメーション)で実装してみました。

(動画) スプライトアニメーションを用いた目のまばたきアニメーション

スキニングを実装する予定でしたが、手つかずのまま過ごしてしまいました(汗)
スキニングの実装を行う代わりに、アニメーションシステムのリファクタリングをしていました。 アニメーションシステムのコードがだいぶ増えてきて、複雑になってきたのでなんとかしたいです。 リファクタリングしながら、スキニングの次はアニメーションブレンディングあたりをやってみたいと考えてました。アニメーションブレンディングについて簡単に説明します。

アニメーションブレンディングについて

普段歩くときに(寸分たがわぬ正確さで)全く同じ歩き方をする人がこの世にいるでしょうか。おそらくほとんどの人はそんな歩き方をしないはずです。眠たそうに歩いたり、急ぎ足で歩いたり、Wii リモコン片手に歩いたり、いろんな歩き方をしています。「歩く」動き1つをとってみても、人の状態によっていろんな歩き方をします。最近の写実的なインタラクティブゲームではこれを再現しようと試みているタイトルがたくさんあります。ではどうやって再現しましょうか。
もっとも簡単な方法は、それぞれの状態に対する動きのアニメーションクリップを(Maya や Blender などの)DCC ツールを使って気合いと根性で作成し、それをゲーム内で直接再生することです。 もちろん、大量のアニメーションを手作業で作成するのはとても気が滅入る作業です。仮に気を失いそうになりながらもなんとか作成することが出来たとして、次はランタイムで再生する際に何かと困難を極めるはずです。アニメーションデータの量が膨大になってパッケージを配布するのが難しくなるでしょう。そこで、少ないアニメーションを組み合わせて複雑なアニメーションを大量に作成しようという試みがされました。それがアニメーションブレンディングです。

アニメーションブレンディングについてざっくり説明すると:

  1. 複数のアニメーションクリップから複数のローカルポーズを生成する。
  2. 複数のローカルポーズからそれぞれ重みを付けて補間したポーズを生成する(複数のローカルポーズの重み付き平均からポーズを生成する)
  3. 生成したローカルポーズからグローバルポーズ(行列パレット, Matrix Palette)を出力する

上記のことを行うのがもっとも簡単なアニメーションブレンディング(重み付き平均を用いたブレンディング)です。アニメーションブレンディングには上記以外のブレンディング手法も存在します。特殊な差分ポーズを用いて最終的なポーズを作成する加算ブレンディングや、スケルトンの部位ごとに別のアニメーションを適用して部分ごとのポーズ(部分ポーズ)から全体ポーズを生成する部分的なスケルトンブレンディングがそれに該当します。
最初に挙げた重み付き平均を用いたブレンディングと加算ブレンディングを組み合わせて使うことも少なくありません。キャラクターの状態あるいはキャラクターのインスタンスごとに、どのアニメーションブレンディングをどれくらいの量(ブレンディング係数)で適用するかを柔軟に指定できるととても便利でしょう。そこで昨今のゲームエンジンでは、ノードベースのビジュアルなエディタとともにブレンディングツリーが頻繁に利用されています。例えば Unity3D のアニメーションシステム Mecanim や Unreal Engine 4 のアニメーションシステムではエディタ上から直接ブレンディングツリーを編集することができ、より複雑なアニメーションブレンディングを簡単に追加することが出来ます。

ここでのアニメーションブレンディングはスケルトンのアニメーションを想定して書いていますが、モーフィングでもこのブレンディングの考えは使われています。表情のパターンを大量に作成するのは難しいでしょう。そこで「普通の表情」と「笑った表情」のみ手作業で作り、ゲーム内ではこの 2 つの表情をブレンディングして様々な表情を作ります。「普通の表情: 10%、笑った表情: 90%」や「普通の表情: 60%、笑った表情: 40%」といったような組み合わせから膨大な表情パターンを作成することが出来ます。重み(ブレンディング係数)を変更することでゲーム内のキャラクターの状態に適した表情を作成することができるので魅力的なアプローチです。

アニメーションブレンディングについては実装するときに(機会があれば…)もう少し掘り下げて説明したいと思います。

今週の予定

  • 2D スキンドメッシュの作成
  • 2D スキンアニメーション(スキニング)

先週に引き続きスキニングを実装します。今週中に終わらせたいところ!

(来週は "今週の進み具合 #12" があるのでしょうか。乞うご期待。)

参考文献

  • 『ゲームエンジンアーキテクチャ』 ジェイソン・グレゴリー著、大貫宏美、田中幸訳、今給黎隆、桐山忍、鴨島潤、湊和久監修、ソフトバンククリエイティブ。第11章「アニメーションシステム」参照。

Leave a Reply