見出し画像

Tracking Controlについて考えた

VRChatのオープンベータでグループ機能が追加されて周りが騒然となる中、ひとりAnimator ControllerのTracking Controlについて考えていた。

課題は、追加の表情レイヤーとTracking controlだ。

ジャンプ中の表情変更を、ジェスチャー表情変更の上のレイヤーで新しく行うと、Tracking Controlの状態が正しくなくなる。
ジャンプ中の表情が表示されたまま、ジェスチャーを変えると内部のTracking Controlがコロコロ変わり、最新の変更が反映されるからだ。
だから表情変更はすべて同じレイヤー内で行うのが望ましいともされている。
しかし表情変更を一括でするレイヤーに追加編集していく方法だと、後で「ジャンプ中だけアニメーションが変わる」機能を独立して抽出してBOOTHに置きたいとなったとき、それができない。

あくまで「ジャンプ機能」なのだから新しいレイヤーで創るのが自然では?という思いもある。今はたまたま表情を変更しているが、ジャンプ中だけTrailを出すアニメーションに差し替わっても「ジャンプ機能」として当初意図した通りだ。

ジャンプ開始時にジャンプ表情でTrackingを奪い、「ジャンプ表情」が出ている間だけジェスチャー表情変更レイヤーで状態遷移が行わないようにするなら理論上うまくいくはずだが、流石に創るのはめんどくさい。

ジャンプは短時間なので、ジャンプ中表情ステートでジャンプ開始時に一回だけTrackingを取るとそれでうまく行ったりするのだが、かといってそのままにするのも気になる。

アイデアとして、ジェスチャー表情変更レイヤーより上、ジャンプ機能レイヤーのひとつ下のレイヤーにジャンプと同条件で遷移して毎フレームTracking Controlを実行するゴリ押しトラッキング修正レイヤーを作ればいいんじゃないか?

トラッキング オーバーライド(ウェイト0)

通常状態


ジャンプ中は目を瞑ってるので瞬きしない


毎フレーム遷移してTracking Controlを確保する。着地するとオレンジに行ってつぎ浮遊するまで停止する


赤が追加機能のレイヤー

レイヤーの実行順があるため、ジェスチャー変更によるTracking Controlの設定変更は後から実行されるこの部分によって必ずオーバーライドされて無効化される仕組み。

これなら機能ごと取り外しやすいし上下関係が描写順になっているのでいくら重ねても大丈夫そう。

問題はジャンプから復帰した後、EyeのTracking Controlがアニメーションになってて、これジャンプ後は必ず一回ジェスチャーで表情変更挟まないと瞬きが出ないんじゃないか?ってなるけど流石にそこまで細かいのは勘弁(Trackingがアニメーションになってたらどんな表情でもとりあえず破綻だけはしないはず…)。

すごく細かい話になったので需要があるかどうかはわからないけど一応、「トラッキングが後から上書きされうるなら毎フレーム直前のレイヤーで上書きすればいい」という力技です。


ちなみにもーちは「BLINK」というレイヤー内でまばたきをカスタムしているので、この「BLINK」より上のレイヤーにギミック表情変更レイヤーを移動させるとジャンプ中表情のときはジェスチャーによらず一切まばたきは行わなくなったりする(埋もれるので)。

だからぶっちゃけジャンプについては支障ないんだけど配布用や、ほかのギミック表情変更のためにこのテクニックが必要だったりした。以上でした。


この記事が気に入ったらサポートをしてみませんか?