ぷらこあ

ゆるふわゲームクリエイター / イベントオーガナイザーを目指してます

【TECH x GAME COLLEGE #5】Unityのアニメーションシステムの今と未来の話 に参加しました

TECH x GAME COLLEGEとは

www.techcross.co.jp

株式会社テクロスさんの主催する技術系の勉強会。
『UNITIA 神託の使徒×終焉の女神』『神姫PROJECT』を開発しているところ。
勉強会コンセプトは 「毎週渋谷でちょっといい人呼んでゲーム勉強会」
(こういう勉強会の指針が分かりやすいコンセプトは個人的に好み)
京都の会社だけど東京オフィスも出来るということもあり 絶賛採用強化中 とのこと。

今回の会について

techxgamecollege.connpass.com

今回は 「Unityのアニメーションシステムの今と未来の話」 という題材について、Unityを触っている人であれば1度はお世話になるであろう テラシュールブログ で有名なUTJエヴァンジェリスト山村 達彦 さんがトークしました \キャー椿サーン/

▼以下、ざっくりまとめです。

🗓Unityのアニメーションシステムの過去

Animation

f:id:lycoris102:20181011123457p:plain

AnimationComponent の話。AnimationClip を再生する機能を持つシンプルなアニメーション再生のためのコンポーネントなのだけど、Unity5から Legacy/非推奨 になった。どうしても使いたいケースがあるときは Animation ClipのLegacyフラグを有効にする 必要がある。ただ、企業サイドからは今でも根強い人気があるため、このまま残り続けるでしょうという話だった。

⏰Unityのアニメーションシステムの今

Mecanim

f:id:lycoris102:20181011123434p:plain

Unity4から入ったAnimationClipの再生制御を行う仕組みで現在最も流行っている仕組み。

Mecanimの主な機能

リターゲット

GameObjectを経由せずに直接マトリクスに書き込む

キャラクターの移動をアニメーション側で制御

再生アニメーションを判断する機能

リターゲット

ヒューマノイドアニメーションのリターゲティング - Unity マニュアル

異なる体型(ボーン構造)であっても異なるモデルで同じアニメーションを再生させる機能のこと。リターゲットするためには各モデルの設定 Rig > Animation TypeHumanoid に指定して Avatar を作成し、必要に応じてメッシュとボーンの紐付けを行う必要がある。

GameObjectを経由せずに直接マトリクスに書き込む

Avatar経由でアニメーション情報をボーンに書き込むことができる (Transformを経由しない分だけ効率的に扱える) ただしアニメーションの事後処理が使えなくなるので注意。

tsubakit1.hateblo.jp

キャラクターの移動をアニメーション側で制御

アニメーション側に移動距離を持たせることができる。主な用法として、移動時に足滑り (踏み込んでいる時に瞬間的に踏みとどまって欲しいはずが移動してしまう) を回避できる等。

tsubakit1.hateblo.jp

再生アニメーションを判断する機能

AnimatorController によって再生するAnimationを制御する機能。ステートマシンを用いて特定の条件下にて特定のアニメーションを再生させることができたり、BlendTree を用いて、複数のアニメーションをブレンドさせたりすることができる。StateMachineBehaviour を用いることで、Stateに入ったり抜けたりするときにフックして振る舞いを付与することも可能。

tsubakit1.hateblo.jp

また、キャラクター毎に共通したアニメーションを使いつつ、一部のモーションだけ個別に設定したいみたいなケースの時は AnimationOverrideController を使用すると良い。

tsubakit1.hateblo.jp

SimpleAnimation

f:id:lycoris102:20181011123524p:plain

Mecanimが非常に高機能であったのに対し、例えば2Dでのアニメーション制御等を考えるとここまで機能がいらなくて「再生したいタイミングで任意のAnimationClipを再生できればいい」みたいなケースでは今は SimpleAnimation を使うと良い。

tsubakit1.hateblo.jp

SimpleAnimationは PlayableAPI / Animation再生に関わる低レイヤの仕組みにアクセスし処理をすることができるため、AnimatorControllerを介する必要がない。

tsubakit1.hateblo.jp tsubakit1.hateblo.jp

Animation Instancing

一方、多数のオブジェクトを動かすための技術としては Animation Instancing というものがある。GPU Instancing を使って SkinnedMeshRenderer を多数動かす場合、ドローコールの数とアニメーション計算の量が多くなっていたところを Animation Instancing は良しなにしてくれる。ただし、Shaderで頂点アニメーションを行う側面もあり、ローポリ向け。

blogs.unity3d.com

アニメーション制御の使い分け

Timeline

f:id:lycoris102:20181011123609p:plain

Timeline は複数のオブジェクトをアニメーションや音声、パーティクルの再生タイミング、イベントの実行タイミングを制御し、カットシーン (イベントシーンや演出) を作る際にアドバンテージがある仕組み。出来ることも多いため、今回は概要のみの解説。

tsubakit1.hateblo.jp

🌄Unityのアニメーションシステムの未来

Animation C# Jobs

blogs.unity3d.com

Animation C# Jobsを使うとプロパティやTransformの評価に割り込むことができる。究極的にはAnimationClipすら不要で自分でAnimationStreamに流し込むことも可能。独自のアニメーションやIK処理を組み込むことができる。IAnimationJob を実装していくことになる。サンプルコードは コチラ にある。

kinematica

blogs.unity3d.com

機械学習を用いた新しいモーション制御の仕組み。事前にモーションデータを学習させておくことで、軌跡や速度を元に次のポーズを判断させることができる 。とはいえ、現在はモーションキャプチャースタジオにてモーションデータを収録する必要があるため、一般のご家庭で使用することは難しい。映像作品やAAAタイトル向けになっていきそう。

💭感想

▪️ 2Dを中心に扱う人は引き続き、ユーザ操作は Mecanim or SimpleAnimation / カットシーンは Timeline にお世話になっていきそう。よりリッチな体験や作り込んだ演出や人体の動きを追求する場合は、低レイヤ (PlayableAPI) への理解が必要になっていきそう。個人的に触ったことない部分なので、触ってみるTODOタスク積んでおきます。

▪️ 引用でテラシュールブログさんの記事をたくさん貼ったけど、完全に椿さんの活動がUnityアニメーションシステムの歴史を体現してて、アウトプットを継続する素晴らしさを感じることもできました。

▪️ トーク自体は60min程度で残りは簡単な交流時間が20min程度でした。人数が少ない時は全員で自己紹介したりするのですが、今回は大人気だったため近くの人と交流したり名刺交換するスタイル。その後、希望者で別の店で懇親会という感じの流れでした。(今回だけかもですが) 費用が掛かるという事前連絡を頂きつつ、無料でご馳走になってしまいました。どうもありがとうございました! (何故かずっと現職/前職のプロジェクト管理の話だったり評価制度や勉強会制度の話をしてました)