トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

AnimationRiggingをVRMで触る

AnimationRigging

Unity2019で使えるAnimationRigging

Animation Rigging パッケージは、アニメーション化されているスケルトンに対して実行時にプロシージャルなモーションをセットアップできるようにするものです。

一連の定義済みのアニメーションのコンストレイントを使用して、キャラクターの制御リグ階層を手動で構築することができるほか、C# で独自のコンストレイントを構築することもできます。

これにより、ワールドとのインタラクション、スケルトン変形リグ、物理演算ベースの二次モーションなど、ゲームプレイ中に各種の魅力的な表現が可能になります。

blogs.unity3d.com

ボーンがあるものもないものも、アニメーション的なものを作れる。元となるアニメーションがないオブジェクトに対してでも作成・制御できる。

既存のアニメーションがあってもそれに制御を加えられる。

キーフレームを打つような既存のアニメーションとは違い、プロシージャル(数式やプログラムにより事前に定めた手続きに則って作成した)アニメーションを適用する。既存のアニメーションに上書きできる

ドキュメント

docs.unity3d.com

2020.1だとAnimationRiggingはpreviewが外れてVer1.0.3になったららしい

f:id:bibinbaleo:20200902162940p:plain

コンストレイント

 コンストレイント(制約)と呼ばれるスクリプトを利用してアニメーションの作成や制御をおこなう。制約を追加することでアニメーションが簡単になる。

LookAtみたいに何かの方向を見続けるように頭を動かすとかそういうことだよね。

docs.unity3d.com

コンストレイント一覧

  • Blend Constraint
  • Chain IK Constraint
  • Damped Transform
  • Multi-Aim Constraint
  • Multi-Parent Constraint
  • Multi-Position Constraint
  • Multi-Referential Constraint
  • Multi-Rotation Constraint
  • Override Transform
  • Twist Chain Constraint
  • Twist Correction
  • Two Bone IK Constraint

 

Constraint Components | Animation Rigging | 1.0.3

0.2.7だとこんな感じだった

f:id:bibinbaleo:20200902181226p:plain

環境準備

UnityデザイナーズバイブルのAnimationRiggingを見ながら触っていく

環境

Unity2019.4

AnimationRigging0.2.7

 

PackageManagerでAnimationRiggingを入れる。

f:id:bibinbaleo:20200901152530p:plain

インポートしたらサンプルプロジェクトもインポートできるようになる

f:id:bibinbaleo:20200901153730p:plain

AnimationRiggingのことARって大々的に訳すの

f:id:bibinbaleo:20200901153727p:plain

RigBuilderとRig

RigBuilderRigコンポーネントが基礎

RigBuilderが管理。Animatorがついている場所などにつける。AnimatorがないモデルにはAnimatorが勝手につく。

f:id:bibinbaleo:20200901160013p:plain

RigBuilderがついているモデルの下に空のオブジェクト作ってRigを付ける

f:id:bibinbaleo:20200901160331p:plain

これをRigBuilderに登録

f:id:bibinbaleo:20200902101552p:plain

上のほうから計算される?

ちなみにRigBuilderやアニメーションの更新タイミングはAnimatorのUpdateModeで変わるそうです。

f:id:bibinbaleo:20200901160326p:plain

f:id:bibinbaleo:20200901160600p:plain

Animatorコンポーネント - Unity マニュアル

関係性

RigはConstraintの親。複数のConstraintを子にもつグループ

ConstraintがIK的な、本当の機能を持つもの??

RigBuilder>Rig>Constraint

RigBuilderはRigを複数持てる。

RigはConstraintを複数持てる。

各種コンポーネント/Constraint

このまま行ったら教科書丸写しみたいになるので、コンポーネントだけメモしていく

基本的にVRMキャラでやったのでBone名とか参考になると思う

BoneRenderer

BoneRendererはその名の通りオブジェクト同士の親子関係と位置関係をボーンみたいに示してくれる。

f:id:bibinbaleo:20200901163950p:plain

Rootを全部選んで、Trandsormsに自分でドラッグしないとダメ。しかもまとめてドラッグするとき、Transdorms枠の少し上にドラッグしないと反応しない。

f:id:bibinbaleo:20200901164057p:plain

これで表示されたBoneを選択するとヒエラルキーのBoneに行く

f:id:bibinbaleo:20200901172053p:plain

TwoBoneIKConstraint

腕みたいに二つのBoneがあるものをIKで動かしてくれる。

Rootが根元、Tipが先端。Targetがターゲット

f:id:bibinbaleo:20200901163704p:plain

Targetの位置に合わせて動く

f:id:bibinbaleo:20200901164122g:plain

VRだとTargetにコントローラーの位置代わりになるものを付けたら、FinalIKとか使わなくてもとりあえず腕は動きそう

 

本ではRigの下にConstraintを付けるようのオブジェクトを作ってそこにつけてた。

f:id:bibinbaleo:20200901165542p:plain

銃を持たせる

f:id:bibinbaleo:20200901165432p:plain

MultiAimConstraint

SourceObjectに対してConstrainedObjectが正面を向くように回転値を操作

LookAtみたいな感じ。

f:id:bibinbaleo:20200901170926p:plain

ConstrainedObjectに向きを変えたいBone、AimAxisはそのボーンの前方方向をセット。

VRMだと+Zだった

f:id:bibinbaleo:20200901171125p:plain

Neckボーンを設定するとこんな感じになった。

f:id:bibinbaleo:20200901170758g:plain

肩も設定

f:id:bibinbaleo:20200901170902g:plain

このままだとイナバウアーするぐらい首が曲がるので、制限を付ける

f:id:bibinbaleo:20200901171827p:plain

SettingのMaxLimitとMinLimitを適当に設定。

これである程度の角度で回転が止まる。(設定していない肩は限界を超えて回っている)

f:id:bibinbaleo:20200901171752g:plain

胴もできた

f:id:bibinbaleo:20200902105627p:plain

f:id:bibinbaleo:20200902105038p:plain

f:id:bibinbaleo:20200902105630p:plain

VRMはこのままで良さそう

TwistCorrection

「Sourceに設定したTransformの回転を参照して、1軸だけtwistNodesの回転に適用する」(「Unityデザイナーズバイブル」377pより引用)

f:id:bibinbaleo:20200902104211p:plain

本だとUnityChanの胴の回転はTwistCorrectionしないと自然に見えないって書いてた。

ただ上のように通りVRMでやってみたけどうまくいかない

静止したら動く

f:id:bibinbaleo:20200902110958g:plain

VRMはMultiAimConstraintで普通にできたので、使う必要はないかな?

よくわからない~

MultiParentConstraint

「ConstraintObjectに登録したTransformの親をSourceObjectsに登録したTransformに設定したような挙動をする」(「Unityデザイナーズバイブル」380pより引用)

f:id:bibinbaleo:20200902144919p:plain

その他

AnimatorにUnityChanのWait01モーションを適用している。そのモーションに上書きするように上のIKは動いている

f:id:bibinbaleo:20200901165115p:plain

docs.unity3d.com

最後に

なんとなくAnimationRiggingの枠組みは分かった。

他のコンストレイントの機能を見ないと、やりたいことができるかわからないな〜