Unity 2019.1 向けの Animation Rigging パッケージは、アニメーション化されているスケルトンに対して実行時にプロシージャルなモーションをセットアップできるようにするものです。一連の定義済みのアニメーションのコンストレイントを使用して、キャラクターの制御リグ階層を手動で構築することができるほか、C# で独自のコンストレイントを構築することもできます。 これにより、ワールドとのインタラクション、スケルトン変形リグ、物理演算ベースの二次モーションなど、ゲームプレイ中に各種の魅力的な表現が可能になります。
Unity 2019.1 向けのプレビューパッケージとして提供する新機能 Animation Rigging についてご紹介します。このブログ記事では、Animation Rigging の概要といくつかの使用例を説明します。また、GDC 2019 での Animation Rigging に関するプレゼンテーションのビデオも参照してください。GDC Vault から無料で視聴できます。
まずは、パッケージマネージャーから Animation Rigging パッケージを Unity プロジェクトにインストールします(パッケージマネージャーの「Advanced」タブでプレビューパッケージが表示されるようにしてください)。パッケージページには、ユーザーにパッケージの使い方を紹介するためのドキュメントへのリンクやサンプルがあります。Unity 2019.1 向けのプレビューパッケージとしては、今回が初めてのリリースになります。次回のリリースは公開ベータ版の Unity 2019.2 向けを予定していますので、こちらもぜひお試しください。この次回のバージョンでは、「Animation」ウィンドウを使って、変更に対してすぐにフィードバックを見ながら独自のコンストレイント付きアニメーションを作成することができます。
「プレビュー版」が意味するところについて簡単に説明します。このパッケージの内容は、新しいバージョンへの更新時に変更されます。プレビューパッケージの利点は、自分の必要としている機能を私たちの開発作業に反映できるチャンスがあるということです。ぜひ最新情報を確認して、ご意見をお寄せください。ユーザーの皆さんからのフィードバックは非常に重要です。
Animation Rigging パッケージには、リグコンストレイントのライブラリが入っています。このライブラリは、実行時にプロシージャルなモーションを作成する際に利用できます。実行時にプロシージャルなモーションを作成することを一般に、「ランタイムリギング」と言います。コンストレイントは、リグと呼ばれるグループに分けてセットアップされます。リグの構築は、アセットの「Animator」ルートに割り当てられる Rig Builder コンポーネントで行われます。
これにより、ユーザーがゲームプレイ中、アニメーション化されたスケルトンによって高度なこと(ワールドとのインタラクションなど)を実行できるようになります。たとえば、キャラクターの手とプロップのインタラクションを行ったり、ワールド内のターゲットに照準を合わせたりすることが可能になります。また、プロシージャルに制御されたボーンをスケルトン変形リグに使用して、スキンメッシュされたキャラクターの肩と手首のねじれを補正するなど、より高度なリギングを行うことも可能です。さらに、キャラクターのリグの動的な二次モーションに使用できる、物理演算ベースのコンストレイントもあります。
Unity エディターでリグに対する作業を行うには、「Scene」ビューでスケルトンを表示して操作すると便利です。Bone Renderer コンポーネントを使えば、トランスフォームのリストを追加してさまざまなビジュアルスタイルで表示できます。
複数の Bone Renderer コンポーネントを使用してスケルトンの部品を組み立てることには、多くのメリットがあります。この例では、1 つのキャラクターに複数の Bone Renderer コンポーネントがあるため、胴体、指、ツイストボーンがそれぞれ独自のディスプレイスタイルを保持できています。これにより、リグのセットアップ、キーフレームの設定、ゲームプレイのデバッグなど、アーティストのさまざまなワークフローが容易になります。
キャラクターのリグをセットアップする手順を以下に示します。
これで、リグに最低限必要なセットアップが終わりました。次のステップではコンストレイントを追加します。
Rig Builder の非常に優れた点は、「Rig Layers」リストで複数のリグを使用できることです(上図参照)。これは、ゲームプレイ中にオンとオフを切り替えられる特殊な動作を作成する際にたいへん役立ちます。さらに、各リグには固有のウェイトがあり、他のリグとブレンドすることもできます。
リグのコンストレイントは、リグを組み立てて実行時にプロシージャルなモーションを生成するために使用されるビルディングブロックです。モジュール化しやすい形で汎用的に設計されているため、さまざまな方法で組み合わせて、アニメーションゲームデザインのニーズに実行時に対処することができます。
以下に、パッケージと併せてリリースされているリグのコンストレイントのリストを示します。
リグのコンストレイントをセットアップするステップを以下に示します。この例では Two Bone IK Constraint を使用しています。
リグコンストレイントの仕組みを知るには、パッケージに含まれているサンプルを確認するのが一番です。パッケージマネージャーには、サンプルをプロジェクトにインポートするボタンがあります。それぞれのコンストレイントについて、仕組みを紹介するシーンが用意されています。
ランタイムリギングはゲームプレイ中に発生するので、その仕組みを体験するために既存の Unity サンプルコンテンツをいくつか使用して、簡単なゲームプレイのプロトタイプを作成しました。
これらの基本的なプレイヤーコントロールを実装し、Animation Rigging パッケージを使用することで、クールなゲームプレイのメカニクスを非常に簡単に作ることができました。以下の短いビデオで、そのゲームプレイを紹介します。
これらの機能の 1 つ 1 つに注目すれば、ランタイムリギングを作成する方法がわかります。
忍者のスケルトンでは、ツイストボーンとスキンウェイトがすでに最初からセットアップされています。Unity では、腕と脚の変形を補正するために Twist Correction コンストレイントを追加しました。以下のビデオでは、これらのコンストレイントがオフになった場合の様子を示しています。ねじれ補正を適用すると、動きが実世界の人体や服装の挙動に近づいて、格段に自然なものに感じられるようになります(下記のビデオ参照)。
プレイヤーアビリティ「手裏剣」については、忍者が手裏剣を 360 度あらゆる角度に向けて投げられるようにする必要があります。
以上の結果、このアニメーションレイヤーは、忍者のすべてのアニメーションの上にオーバーレイします。これは、走っていても、ジャンプしていても、かがんでいても、さらには刀で攻撃しているときでも常に機能し、忍者として手裏剣をすばやく投げることができます。
地面や頭上にあるターゲットを攻撃するために、忍者の刀も垂直に照準を定められるようになっていなければなりません。私たちはこれを手裏剣リグを使って構築しました。照準の制御には、同じ 1D ブレンドツリーを使用しています。
刀のアニメーションは、水平方向の回転という新たな要素をもたらします。刀の軌跡のエフェクトが滑らかになるように、この水平方向への照準は完全な直線にすることが非常に重要です。ポーズが完璧であってもサブフレームに欠陥があることが多いため、スケルタルアニメーションのみを使用して直線に見えるようにするのは難しい可能性があります。この原因は、腕の FK ボーンチェーンの補間方法にあり、問題を修正するには Multi-Aim Constraint を使用するのが最適です。
以上の結果、Multi-Aim Constraint により刀の水平方向の回転角における欠陥がすべて修正されます。上記のビデオのように、アニメーションの動作を遅くしてパーティクルエフェクトを追加しても刀の動きは常にまっすぐで正確です。
忍者に付いて回るキャラクターを作成するのにも、リグのコンストレイントが役立つ例をご紹介します。私たちは、蝶が忍者のプレハブにあるターゲットのトランスフォームを追うようにする Damped Transform コンストレイントを使用しました。また、場所にかかわらず忍者の前のターゲットに常にスポットライトを当てる Multi-Aim Constraint も使用しています。
蝶のモデルについては以前、シェーダーグラフに追加された HD Lit Master ノードについてのブログ記事で触れました。実はこの蝶、パワーアップや特殊攻撃を可能にする忍者のメッセンジャーで、最も重要なのは Megacity の中でずっと忍者に付いて回るということです。ともかく、Unity ではこのようにクールなゲームプレイのメカニクスを自由に開発できるのですが、Animation Rigging パッケージを使えばその実装を簡単に済ませることができます。
Animation Rigging のコンストレイントは、キャラクターに限らず何にでも使用することができます。この例では、コンストレイントを使って近未来的な機械式クレーンを構築しました。目的は、入力と実行時のコンストレイントによって完全に駆動されるリグを作成することでした。この例にはアニメーションクリップがありません。すべてのモーションが、ゲームパッドのジョイスティック入力 2 つと、コンテナを掴んだり放したりする動作をトリガーするボタン 1 つから派生するためです。
注意:サンプルプロジェクトにHD レンダーパイプライン(HDRP)テクスチャは含まれていません。
Unity 2019.1 用の機械式クレーンのサンプルプロジェクトは GitHub からダウンロードできます。
Unity 2019.2 ベータ版を使用している場合には、プロジェクトの更新版をダウンロードしてください。
クレーンの制御は以下のとおりです。
この例では、2 つのリグを作成するというアプローチを取りました。1 つ目が、目的とする結果をアニメーションストリームに入力して解決するために、基本的にモデル階層を模倣する ControlRig です。
リグの赤い部分は、入力または目的のターゲットを表し、緑の部分は実際の結果/現在の結果を表します。
2 つ目は DeformRig で、以下のように ControlRig の最終結果を取得してモデル階層と 2 つ目のピストンの動きに適用します。
リグの最終結果はその後、シーン内のモデルかジョイントに適用されます。
クレーンのアームへの入力は、適切なシーン/入力の評価を取得するために、単純なスクリプトと Rig Transform コンポーネントを使用してリグのエフェクターを駆動します。これらの入力は、その後 2 つ目のエフェクターで減衰されます。コンテナが回転する動作や掴む動作などの残りのエフェクターは、この減衰結果の子となります。この例では、ControlRig が 15 個のコンストレイントを使用しています。具体的には、入力に Damp、アームに 2BoneIK のほか、掴む動作とコンテナを放す動作のために複数のコンストレイントを使用しています。DeformRig はコンストレイントのフラットリスト(Aim、ピストン用の Multi-Position、リグとモデル間のリマップ用の Multi-Parent)を使用します。
もちろん、ほかにもさまざまな方法でリギングを行って、この例と同じ結果やこの例に似た結果を得ることができます。コンストレイントが評価される順番を制御しているのがリグ階層(シーン内のゲームオブジェクトの順番)であることを覚えておくようにしてください。このことは、ここで示したように特定のコンストレイントを決められた順番で評価しなければならない場合に、きわめて重要になります。
入力、Rig Transform、さまざまな種類のリグとコンストレイントを管理する方法をこのブログ記事で理解していただけたなら幸いです。ぜひ、試してみてください。フォーラムでは、皆さまからのフィードバックをお待ちしています。
Is this article helpful for you?
Thank you for your feedback!