【VRChat】Force Locomotion animations for 6 point trackingを擬似的に切り替える

「force Locomotion animations for 6 point tracking」ってあるじゃないですか。
6点トラッキング(いわゆるフルボディトラッキング、フルトラ)のときに効果を発揮するやつです。
これをオフにするとどうなるかはわざわざ説明しません。この記事にたどり着いた人はとっくに知っているはずなので、、、、

スクリーンショット 2021-07-01 232403

これです

これ、座ってる時とかはスライド移動でも別にいいんですけど立ってるときにスライド移動するの絵面的に気持ち悪くないですか?????
だから動的に切り替えられたら良いなと思ったんですけどこのオプションはAvatars3.0のちからをつかってもアバター使用中に変更できないんですよ…

ですが、このオプションをExpression Menuなどから切り替えられるようにしました。
(正確には、切り替わったかのように見せるAnimationControllerを組みました。)

動かしている様子

AnimationControllerやらの基本は知ってる前提で説明していきます。
よくわからんが動けばいいという人は以下のBoothで販売しているので購入してください。僕のエナドリ代になります。

https://sliverstomentosa.booth.pm/items/3091437

そもそもこの設定では何が行われるの?

まぁとりあえずここを見てください。困ったときは素人が書いたNoteとかブログじゃなくて公式ドキュメントをみるものですよ。

つまるところ、これをオンにしていればスティックでの移動中はトラッキングよりも優先して設定されているアニメーションを再生するよってことです。
なので、切ると移動しても棒立ちのスライド移動になるわけです。

でも、移動中でも頭の位置とか手の位置とかはちゃんとトラッキングされているようです。ぶっちゃけよくわからん。

後述するAnimator Tracking Controlと格闘することで、どうやら頭と両手はトラッキングが維持されてるっぽいことを特定しました。おそらく。
※公式ドキュメントで見つけきれなかったため私の予測になります。間違ってたらすまん。公式ドキュメントのここに書いてるよってのがあれば教えてください。

じゃあ切り替えてやればいいじゃん!

じゃあ解決方法としてどうすりゃいいのって話ですが、アニメーターのステートにつけられるbehaviorにAnimator Tracking Controlっていうクッソ便利で応用しがいのあるものをつかいます。(みんなも表情干渉とかIndexでピースしたいとかで使ってるよね)

どうやらオプションをオフにしていたとしてもこのbehaviorで変更した内容はちゃんと適応されるようです。

つまり、移動していない(velocityが0)の時は腰と両足をTrackingに、移動している(velocityの絶対値が0ではない)ときは腰と両足をAnimationにしてやればいいのです。やったね!

画像2

左が移動していない時、右が移動している時
HeadからRightHandまでは変更ないのでNoChangeでも良さそうだけど僕は保険でつけました。

実用するには

ただし、先ほどのことだけを馬鹿正直にやるとオプションをオフにしてもオンの時と全く同じ動きになってしまいます。
なので、それを切り替える機構を追加で作る必要があります。

たとえば…
・Expression Menuを駆使してきりかえる。
・立っているときはAnimation、座っているときはTrackingする。(Uprightをみるといい)
・特定の速度を超えたときはAnimationする。(velocityの閾値を上げる)
などがすぐに思いつきますね。当然すべてのハイブリットも可能です。

注意点

ただし、いくつか注意点があるので記載しておきます。
・6点未満Trackingの際に壊れる。(これは初めにTrackingTypeを見ることで回避できる)
・アバター使用中にTracking方式が変わると壊れることがある。(素直にリセットアバターしよう)
・velocityが0に戻るまでに若干時間がかかるせいでAnimationに遊びができ、Trackingが再開するまでに時間がかかってしまう。(これはたぶんどうしようもない。閾値を大きくすることで時間を短くすることは可能だが移動速度との兼ね合いになる)

自分がぶつかった問題としては以上ですね。ほかにもあるかもしれませんが、同じ問題でつまずいた人のためにメモしておきます。

めんどくせえよ!

冒頭でも書きましたがBoothで私が作ったControllerを売っています。時間を金で解決したい方はぜひ購入を検討ください。よろこびます。

いかがでしたか?

今回はForce Locomotion animations for 6 point trackingについて調べてみました!よくわかりませんでした!

とはいえそれっぽい動きは再現できてると思います。応用すればもっといろいろなことができそうな気がします。
Avatars3.0はかなり何でもできるので楽しいですね。
いやまじで、2.0のころに比べると格段にわかりやすさと自由度が上がってるので有志の作ったツールとか使ってる人も一度自力でやってみるといいですよ。改変の幅が広がると思います。まぁここまで読んでる人はそのくらいやってる気もしますが…

追記

このままだと椅子から降りたときにトラッキングが行われないことがあるのがわかりました。
いろいろ検証したところ、椅子から降りたときに妙なトラッキングの上書きが行われるっぽいです。正確な理由はわからなかったですが…。
対策として、椅子から降りたときに再度トラッキングさせてやれば軽減できました。
ただ、ステート移動のタイミングによっては発生するっぽくて完全な解消はできませんでした。困ったなぁ…。

サポートいただいたら日々のエナドリ代としてありがたく使わせていただきます。 もしよろしかったら〜