Unity を検索

Unity 2019.1 の Animation Rigging プレビューパッケージの概要

2019年5月14日 カテゴリ: テクノロジー | 11 分 で読めます
取り上げているトピック
シェア

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 の概要

Animation Rigging パッケージには、リグコンストレイントのライブラリが入っています。このライブラリは、実行時にプロシージャルなモーションを作成する際に利用できます。実行時にプロシージャルなモーションを作成することを一般に、「ランタイムリギング」と言います。コンストレイントは、リグと呼ばれるグループに分けてセットアップされます。リグの構築は、アセットの「Animator」ルートに割り当てられる Rig Builder コンポーネントで行われます。

これにより、ユーザーがゲームプレイ中、アニメーション化されたスケルトンによって高度なこと(ワールドとのインタラクションなど)を実行できるようになります。たとえば、キャラクターの手とプロップのインタラクションを行ったり、ワールド内のターゲットに照準を合わせたりすることが可能になります。また、プロシージャルに制御されたボーンをスケルトン変形リグに使用して、スキンメッシュされたキャラクターの肩と手首のねじれを補正するなど、より高度なリギングを行うことも可能です。さらに、キャラクターのリグの動的な二次モーションに使用できる、物理演算ベースのコンストレイントもあります。

Bone Renderer

Unity エディターでリグに対する作業を行うには、「Scene」ビューでスケルトンを表示して操作すると便利です。Bone Renderer コンポーネントを使えば、トランスフォームのリストを追加してさまざまなビジュアルスタイルで表示できます。

複数の Bone Renderer コンポーネントを使用してスケルトンの部品を組み立てることには、多くのメリットがあります。この例では、1 つのキャラクターに複数の Bone Renderer コンポーネントがあるため、胴体、指、ツイストボーンがそれぞれ独自のディスプレイスタイルを保持できています。これにより、リグのセットアップ、キーフレームの設定、ゲームプレイのデバッグなど、アーティストのさまざまなワークフローが容易になります。

Rig Builder とリグ

キャラクターのリグをセットアップする手順を以下に示します。

  • まず、Rig Builder コンポーネントを「Animator」ルートに追加する必要があります。これは Animator コンポーネントが割り当てられているものと同じゲームオブジェクトです。通常、これはリグ階層において最上位のトランスフォームになります。
  • 次に、子となる新しいゲームオブジェクトを作成し、そこにリグコンポーネントを追加します。
  • 最後に、そのリグを「Rig Builder」の「Rig Layers」リストに割り当てます。

これで、リグに最低限必要なセットアップが終わりました。次のステップではコンストレイントを追加します。

Rig Builder の非常に優れた点は、「Rig Layers」リストで複数のリグを使用できることです(上図参照)。これは、ゲームプレイ中にオンとオフを切り替えられる特殊な動作を作成する際にたいへん役立ちます。さらに、各リグには固有のウェイトがあり、他のリグとブレンドすることもできます。

リグのコンストレイント

リグのコンストレイントは、リグを組み立てて実行時にプロシージャルなモーションを生成するために使用されるビルディングブロックです。モジュール化しやすい形で汎用的に設計されているため、さまざまな方法で組み合わせて、アニメーションゲームデザインのニーズに実行時に対処することができます。

以下に、パッケージと併せてリリースされているリグのコンストレイントのリストを示します。

リグのコンストレイントをセットアップするステップを以下に示します。この例では Two Bone IK Constraint を使用しています。

  • まず、リグの下に子となるゲームオブジェクトを追加します。
  • その後 Two Bone IK Constraint を追加します。
  • 次に、Two Bone IK Constraint にボーンとエフェクターを割り当てます。
  • 最後に「Play」を押すと、実行時にコンストレイントが評価されます。

リグのコンストレイントのサンプル

リグコンストレイントの仕組みを知るには、パッケージに含まれているサンプルを確認するのが一番です。パッケージマネージャーには、サンプルをプロジェクトにインポートするボタンがあります。それぞれのコンストレイントについて、仕組みを紹介するシーンが用意されています。

ゲームプレイの例

ランタイムリギングはゲームプレイ中に発生するので、その仕組みを体験するために既存の Unity サンプルコンテンツをいくつか使用して、簡単なゲームプレイのプロトタイプを作成しました。

これらの基本的なプレイヤーコントロールを実装し、Animation Rigging パッケージを使用することで、クールなゲームプレイのメカニクスを非常に簡単に作ることができました。以下の短いビデオで、そのゲームプレイを紹介します。

これらの機能の 1 つ 1 つに注目すれば、ランタイムリギングを作成する方法がわかります。

スケルトン変形リグ

忍者のスケルトンでは、ツイストボーンとスキンウェイトがすでに最初からセットアップされています。Unity では、腕と脚の変形を補正するために Twist Correction コンストレイントを追加しました。以下のビデオでは、これらのコンストレイントがオフになった場合の様子を示しています。ねじれ補正を適用すると、動きが実世界の人体や服装の挙動に近づいて、格段に自然なものに感じられるようになります(下記のビデオ参照)。

VerticalAimRig:手裏剣

プレイヤーアビリティ「手裏剣」については、忍者が手裏剣を 360 度あらゆる角度に向けて投げられるようにする必要があります。

  • このセットアップを行うため、まずはスケルトンに新しいバーチャルボーンをいくつか追加しました。
    • Unity におけるバーチャルボーンとは、新しいトランスフォームをスケルトン階層に追加してプレハブとともに保存したもので、他のすべてのボーンと同じようにアニメーション化することが可能です。なぜ「バーチャル」なのかというと、これらのボーンは、自身が必要とされるアニメーションクリップでキーフレームしか持たない場合があり、必要でない場所ではメモリが節約されるためです。
  • 次に、左腕に Two Bone IK Constraint を追加して、バーチャルボーンを IK ターゲットとして設定しました。
  • その後 IK ターゲットは、忍者が手裏剣を投げる新しいアニメーションクリップでアニメーション化しました。このクリップは、代替レイヤーとして忍者のアニメーターステートマシンでセットアップされます。このレイヤーと VerticalAimRig はどちらも、ボタンを押すとアクティブ化されます。
  • 最後に、IK ターゲットの親である Aim Vertical バーチャルボーンを駆動するための 1D ブレンドツリーを作成しました。これを動かすのは、プレイヤーの入力、つまりゲームパッドコントローラーにある左アナログサムスティックの垂直軸です。

以上の結果、このアニメーションレイヤーは、忍者のすべてのアニメーションの上にオーバーレイします。これは、走っていても、ジャンプしていても、かがんでいても、さらには刀で攻撃しているときでも常に機能し、忍者として手裏剣をすばやく投げることができます。

VerticalAimRig:刀

地面や頭上にあるターゲットを攻撃するために、忍者の刀も垂直に照準を定められるようになっていなければなりません。私たちはこれを手裏剣リグを使って構築しました。照準の制御には、同じ 1D ブレンドツリーを使用しています。

刀のアニメーションは、水平方向の回転という新たな要素をもたらします。刀の軌跡のエフェクトが滑らかになるように、この水平方向への照準は完全な直線にすることが非常に重要です。ポーズが完璧であってもサブフレームに欠陥があることが多いため、スケルタルアニメーションのみを使用して直線に見えるようにするのは難しい可能性があります。この原因は、腕の FK ボーンチェーンの補間方法にあり、問題を修正するには Multi-Aim Constraint を使用するのが最適です。

  • 私たちは、新しいバーチャルボーンをセットアップして刀の前面に移動させ、Multi-Aim Constraint のターゲットとして割り当てました。このソースオブジェクトは、刀モデルの親である右手の握りボーンです。
  • 次に、照準のターゲットの親として別の仮想ボーンを追加し、Position 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 ベータ版を使用している場合には、プロジェクトの更新版をダウンロードしてください。

クレーンの制御は以下のとおりです。

ControlRig

この例では、2 つのリグを作成するというアプローチを取りました。1 つ目が、目的とする結果をアニメーションストリームに入力して解決するために、基本的にモデル階層を模倣する ControlRig です。

リグの赤い部分は、入力または目的のターゲットを表し、緑の部分は実際の結果/現在の結果を表します。

DeformRig

2 つ目は DeformRig で、以下のように ControlRig の最終結果を取得してモデル階層と 2 つ目のピストンの動きに適用します。

リグの最終結果はその後、シーン内のモデルかジョイントに適用されます。

リグ構造

クレーンのアームへの入力は、適切なシーン/入力の評価を取得するために、単純なスクリプトと Rig Transform コンポーネントを使用してリグのエフェクターを駆動します。これらの入力は、その後 2 つ目のエフェクターで減衰されます。コンテナが回転する動作や掴む動作などの残りのエフェクターは、この減衰結果の子となります。この例では、ControlRig が 15 個のコンストレイントを使用しています。具体的には、入力に Damp、アームに 2BoneIK のほか、掴む動作とコンテナを放す動作のために複数のコンストレイントを使用しています。DeformRig はコンストレイントのフラットリスト(Aim、ピストン用の Multi-Position、リグとモデル間のリマップ用の Multi-Parent)を使用します。

もちろん、ほかにもさまざまな方法でリギングを行って、この例と同じ結果やこの例に似た結果を得ることができます。コンストレイントが評価される順番を制御しているのがリグ階層(シーン内のゲームオブジェクトの順番)であることを覚えておくようにしてください。このことは、ここで示したように特定のコンストレイントを決められた順番で評価しなければならない場合に、きわめて重要になります。

入力、Rig Transform、さまざまな種類のリグとコンストレイントを管理する方法をこのブログ記事で理解していただけたなら幸いです。ぜひ、試してみてください。フォーラムでは、皆さまからのフィードバックをお待ちしています。

2019年5月14日 カテゴリ: テクノロジー | 11 分 で読めます
取り上げているトピック