Search Unity

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

, 5月 14, 2019

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

33 コメント

コメントの配信登録

コメント受付を終了しました。

  1. Very Well Explained About Animation Rigging. Great Job.

  2. pls publish video on YouTube or make it donwloadable

    1. pls publish video on YouTube or make it donwloadable on gdcvault site

      1. Hi Shola,

        The GDC Vault has its own restrictions about how videos can be shared that are beyond our control. For now it is only available to watch on the GDC Vault website through this link:
        https://www.gdcvault.com/play/1026151/

  3. Chris Mahoney

    6月 14, 2019 10:37 pm

    DAVE HUNT RULES! So excited to dig through this post.

  4. Brooke Barton

    6月 13, 2019 8:24 am

    It looks like something really awesome! I can’t wait to see the result of implementation on my favorite https://ipayzz.com/ I hope to be really amazed and get some cool stuff.

  5. Christougher

    5月 21, 2019 3:55 pm

    I imagine I already know the answer but the ninja project isn’t also available for download is it?

    1. Hi Christougher,
      The example content we currently have available for download is the mechanical crane. We have versions available on GitHub for both 2019.1 and 2019.2. We do hope to release more example content including the ninja later this year.

  6. This is so going in the right direction – I’m planning to mix animation data from various sources (mocap system, neural network, regular fbx animation, IK etc) and the new rigging system looks like it may enable me to this cleanly and effectively.

    However, in trying to follow the demo movie (Unity Runtime Rigging Setup on youtube) I am completely stumped by how he manages to select the armature in the Hierarchy whilst keeping the ‘Ninja’ prefab’s root gameobject selected in the Inspector (22 seconds into the movie) – how does one select one thing in the Inspector whilst selecting something else in the Hierarchy – what magic is this, and how do I perform it!?

    1. Edit: Further on in the movie, I noticed the presenter uncheck the padlock icon at the top of the Inspector window. I guessed then that the icon is a selection lock – I tried it and was able to select the joints in the hierarchy whilst keeping the root gameobject selected in the Inspector – my issue is resolved.

      1. Hi DaveDub,

        Cool, glad to hear you figured it out. Yes, it can be useful sometimes to lock the inspector so it stays focused on a particular GameObject. You can also open a second instance of Inspector so you can also see the selected GameObject. I agree it’s not the most obvious workflow, so we will keep an eye out for how to make it easier to discover.

        I’m excited to hear how it goes with your project. This does seem like something that would be facilitated by the runtime constraints in Animation Rigging. Definitely stay in touch with us about how that goes and feel free to post a thread on our forums (link is included in the blog) if there are good discussion topics that come up.

        And by the way, cool name!

        -Dave

  7. I’m so so happy features built into humanoid are being transferred into components, with a billion new features to boot! Quick question though, how do those twist bones work? The ones that are built into the rig before import.

    1. Hi Josh,
      Glad to hear you are happy about these features! The Twist Correction constraint gets added to bones that are already in your skeleton with skin weights. The constraint blends rotation on one axis to the target transform. So this just sets rotation correctly during runtime, but the bones need to be there to begin with. I hope that helps clarify how they work.

      1. This sounds great!

  8. I assume that characters already have to be skinned to get this new stuff work?
    Many character-files out there provide geometry in T/A-pose but have no bones/skin.
    So I would like to get a skinning tool in Unity similar to the Mixamo-thing but better ;-)

    1. Hi Carsten,
      That is correct, your character needs to have a skeleton and skin weights already set up. Thanks for the suggestion, I agree it would be nice to have tools for creating that content in Unity.

      1. Isaac Surfraz

        5月 16, 2019 8:49 am

        I am guessing thats next on your list, as a logical next step from this would be to add the bone creation and skin weighting into unity itself

  9. Looks cool. What is the performace cost of this? Can it run in mobile? Would be possible to import rig systems from a dcc tools? Would b possible to enable this feature by lod distance? Great work

    1. Hi Andre,
      To speak to your question about performance costs, this is relative to how much computation happens within each constraint solver algorithm. Simple constraints will be more performant than complex ones. We do have the added benefit of automatic multi-threading with the C# Jobs System. There isn’t any reason why this wouldn’t work on mobile platforms. There is the ongoing trade-off of processor vs. memory, which can mean different choices for mobile based on what kind of game you are making.

      For DCC importing of constraints, Unity does have a different kind of constraint that is meant to serve that purpose. Those can be found on the Component > Miscellaneous menu (Aim, Position, Rotation, Scale, Look At and Parent). These will be exported from DCC if you FBX settings have export constraints set to true, and they will be imported into Unity. However, the constraints in Animation Rigging are not intended to serve this purpose and are instead built for runtime so that games and applications can have the performance and range of functionality that is needed for that set of use cases.

      For your final question: yes, it’s definitely possible to enable/disable these constraints by LOD distance. You can manage constraints active state and weight value from C# scripts very easily.

  10. Wendelin Reich

    5月 14, 2019 9:52 pm

    Is there more info available about the physics-based constraints?

    1. Hi Wendelin,
      Yes, there is more information about physics-based constraints in our GDC Developer Days presentation. The link to that video is included at the top of the blog post. In that presentation we describe how to build a new physics-based constraint called the Jiggle Chain Constraint. There is also an example scene included with the package that shows how to used the Damped Transform Constraint. I hope that helps.

      1. Jérémy Crombez

        5月 18, 2019 12:13 am

        If i understand the video correctly, the jiggly example is faking physics.
        Is there a way to have let’s say the scorpion tail with something like :

        “baked idle tail animation” + “realtime rig constraints to attack a position” + “physics rigidbody+collider to adapt to the map and other ojects around” ?

  11. David Whatley

    5月 14, 2019 6:31 pm

    This is definitely going in the right direction. It is a bit disappointing that the out-of-the-box constraints do not include a constrained FABRIK or general constrained CCD IK solver. This is the thing I need most. Specifically, I need more than two bones and I need to specify rotation limits at each bone. Bonus would be to handle sliding joints in the IK solver. The game we are working on now uses 6 bone chains with rotation joints at each. We use the Final IK plugin for the constrained IK. If we could get Rigging up to that level, it would be extremely useful.

    1. Hi David,
      Great suggestions and yes, we understand the importance of different kinds of IK solvers like FABRIK and CCD. We do intend to add more constraints in future releases, but in the meantime we left it open ended for users to extend the package and develop their own constraints in C#. The package architecture handles all of the internal work for you to get access to Animation Stream and multi-threading with the C# Jobs System. Our GDC Developer Days presentation has more instructions how to do that if you are interested. The link to that is included in the blog post.

  12. What is the difference between Animation Rigging and Humanoid IK through OnAnimatorIK? Can these two systems be used together?

    1. Hi, you can use animation rigging with humanoid, but humanoid IK will override constraints applied by animation rigging. You can use one or the other, but not both at the same time.

  13. Hey Unity, what kind of Gamepad do you use ?

    1. I used an Xbox one Gamepad controller (did have an issue with the button mapping though), but any PS4 controller should also be fine. Also mapped Keyboard inputs, just in case ;-)

    2. PS4 controller is also supported

  14. OMG!!

    Can I make mocap directly in Unity using Kinect & Cinema Suite???

    (please say yes, please say yes, please say yes, please say yes)

  15. OMG!!!!

    This is compatible witi the asset Cinema Suite?

    CAN I MAKE MOPAC DIRECTLY IN UNITY NOW??

    (PLEASE SAY IT IS,PLEASE SAY IT IS,PLEASE SAY IT IS,PLEASE SAY IT IS,PLEASE SAY IT IS,PLEASE SAY IT IS,)

    1. Hi Kaz,
      It looks like Cinema Suite is an Asset Store plugin provided by an external developer, so we don’t maintain that ourselves. I haven’t used it so I can’t say for sure if it is compatible. By reading the description it looks like it does Kinect mocap and as far as I can tell that should work fine with the Animation Rigging package.

  16. Vasily Liubezhanin

    5月 14, 2019 4:39 pm

    AWESOME