アニメーションオーバーライド
アニメーションオーバーライド
概要
例えば、VR環境では、アバターにあらかじめ登録されたハンドサインの5つを切り替えて使用することができますが、これを任意のアニメーションで上書きすることで表情を任意のタイミングで変更したり、あらかじめ登録しておいたオブジェクトやエフェクトを展開することができるようになります
CunstomOverrideEmptyを見るとわかりますが、他の項目も同じ要領でオーバーライドできます
仕組み
モデリングソフト等で用意したシェイプキーをUnity上でAnimationクリップとして作成、これをアバターに登録し、常時、もしくは任意のタイミングで呼び出したりできる
備考
アニメーションオーバーライドとして知られている機能ですが、本来はカスタムオーバーライドの方が正しい表現かもしれません
表情切替操作
- VRモード
- vive:タッチパッド、トリガー、サイドボタン
- Oculus:指のタッチセンサーを利用
- デスクトップモード
作り方
動画
- VRChat アニメーションオーバーライドの設定 表情編
参考記事
- アニメーションオーバーライドで表情をつけよう
- アニメーションオーバーライドを入れてみよう!!(表情編)
必要なもの
- モデリングソフト等ですでにシェイプキーが設定されたアバターのモデル
動画の手順と解説
- Hierarchyでアニメーションオーバーライドを適用したいアバターを複製
- アップロードしたいモデルとは別に、こちらモデルをアニメーション作成用とする
- 上部メニュー→Window→Animationウィンドウ開く
- もしくはProjectのあるタブを右クリックしてAddTab→Animation、もしくはCtrl+6
- Animationウィンドウ右側のCreateボタンを押して任意の名前を付け、anim形式で保存する
- これがAnimationクリップで、任意の状態とその遷移を保存しておくもの
- また、自動的にAnimatorControllerが作成され、アバターのAnimatorコンポーネントのControllerに登録され、Animationクリップはこれに関連付けられる必要がある
- このとき、アバターは中腰ポーズになるが、これは動きを見るため各パラメータがすべて0になった状態なので気にしなくてよい
- Animationウィンドウ左側のAdd Propertyから任意の項目を選択、右の方に隠れている+アイコンで登録する
- 隠れて見えない場合が多いので、ウィンドウを広げる必要がある
- AddPropertyがグレーアウトしている場合は、AnimationControllerがアバターに登録されていることを確認し、AnimationStateMachineを開き、任意のAnimationクリップをStateとして登録しておけばAdd Propertyできるようになる
- あらかじめモデリングソフトで用意したシェイプキーが登録されたメッシュを選択すると、下の階層にSkinedMeshRendererがあり、その下に各種シェイプキーが配置されている
- また、複数のAnimationクリップをStateとして登録すると、Animationウィンドウ左上にある録画ボタンの下から、プルダウンメニューで選択できるようになる
- 一番右の◇を1f目に移動
- マウスカーソルで範囲選択が可能
- 赤い縦線が現在編集しているフレームを示している
- Propertyの項目名の右側にある数値、0fと1fを100にする
- 時間がかかれている横軸部分を選択すると動作がScene上でも確認できる
- 再生ボタンを押せば登録した部分が時間軸に沿って再生され、動作が確認できる
- 各フレームの◇アイコンは選択可能で、項目値のコピペもできる
- 手のポーズを変更する場合は手のアニメーションも追加
- 任意の手のポーズを登録しなかった場合、脱力した手(idleとして登録された手の状態)が再生される
- つまり、ハンドサインは最初から使えるものをそのまま生かして、表情だけ変更したい場合は手のポーズを設定しなおす必要がある
- 手のポーズについて
- 手に任意のポーズを作るにはすべての手指を登録する必要があるが、すべて手作業で登録するのは手間なので次の要領でコピペする
- VRCSDK/Expample/Animation/Male_Stand_Pose.fbxの△をクリックして中身を開くと素の手のアニメーションが登録されているので、これをクリック、Animationタブを開く
- 必要のない項目が非常に多いが、手の項目名だけコピー、先ほど編集していたAnimationクリップを開いてペースト
- 余計な項目が混ざっている場合は右クリックしてRemovePropertyで削除
- 数値はそのままでは使えないのでとりあえず全部0にする
- 各指は0を基準に-1から1ぐらいの範囲で調整できる(親指はもう少し広い)
- 2つ目以降、手のポーズを作成する場合は、今回作成したものからコピペすると良いだろう
- 0fと1fは同じ数値にする
- このAnimationクリップを再生している間は常に各項目が100になっている状態を意図している為
- 0f目の◇を全部選択、Ctrl+C、1f目を選択、Ctrl+Vで各項目の値をコピペできる
- VRCSDK/Expample/Animation/CunstomOverrideEmptyを複製してリネーム、編集しているアバターのVRC_AvatarDExcriptor/CustomStandingAnimにセット
- 編集しているアバターのモデルファイル等と同じ場所に移動しておくと良いだろう
- 同じものをアップロードしたいモデルにも登録する
- アップロードして動作確認できたら完成
参考
- いわゆるキツネサインはだいたいこのぐらいの数値になりますが、ボーンの長さや配置状況によって適切な数値は異なります
作り方 オブジェクト編
- カスタムオーバーライドを使って、任意のオブジェクトを出し入れする
動画
- VRChat アニメーションオーバーライドの設定 オブジェクト編
- [VRChat]Animation Override入門[Unity]
記事
- アニメーションオーバーライドで物を取り出そう!
- アニメーションオーバーライドを入れてみよう!!(物・手編)
アニメーションオーバーライドの仕様
参考
- https://twitter.com/gend_VRchat/status/971508793103167488
- 右手と左手でそれぞれアニメーションを呼び出す事が出来るが、これには優先順位が存在している。
- 基本的に右手の入力が優先される。そのため任意の表情で別の手の形を作りたい場合は、左手で手の形を作り、右手で表情を入力すると良い。
- ※下記の備考にある表情重複防止を設定した場合に起きる現象。
自動まばたき等との干渉を防ぐ方法
- Animationクリップで横断的に使用されているシェイプキーや自動まばたきと混ざってしまうことがある
- 参考:自動まばたきや表情の重複(干渉)を防ぐ方法
- https://twitter.com/gend_VRchat/status/970572480531189760
- 任意のAnimationクリップに、自動まばたき用Animationコンポーネントと他の全てのAnimationクリップで使うシェイプキーをAddする
- 自動まばたき用AnimationEnabledのチェックを外す
- 当該Animationクリップでは使わないシェイプキーの数値を発動しない数値にする
- 参考:その2
その他
- Emoteについて
- デスクトップでアニメーションを導入すると地面に埋まる場合
- VRと違い位置の上書きがないための現象と考えられる
- 腰のボーンか体全体の正しいポーズをそのままAnimationクリップに設定する必要がある模様
- Animationクリップの名称について
- https://twitter.com/kohack_v/status/981349557807202304
- 項目名と同名だと適用されないが小文字は可(日本語も問題ない)
- Animationクリップについて
- AnimationクリップはControllerに紐づけされるので、アバターを更新するための新しいモデルに付け替えて編集したりしようとすると編集できなくなる
- 新たに編集したいモデルに切り替えて、AnimationTimelineから新規クリップを作成すると自動的にAnimationControllerが作成される
- AnimationStateMachineに切り替え、編集したいクリップをD&Dで登録すると編集できるようになる
- 相対パスが使える:https://twitter.com/kaisya_no/status/1044894667622342658
資料
- 表情をブレンドする方針での設計例: https://twitter.com/phio_alchemist/status/1044909049966284800
カテゴリ・タグ: カテゴリ-Avatar
- 最終更新:2019-09-27 03:32:24