けんぼうは留年生

ノンジャンルで何か書きたくなった時に書く感じ

VRChat Avatar SDK 3 の動きをいじる話

これのもう少し踏み込んだ話。
kembo.hatenablog.com
基本的には自分のためのメモ書きであってよくわからないまま書いていることを断っておく。

動きを決める場所

f:id:kemboorg:20211117210017p:plain
この画面の左端の Hierarchy からアバター全体のオブジェクトを選択して、右側の Inspector の下の方に色々設定がある。
Base の部分に Layer というのが色々あってここで「〇〇をしたらこう動く・変化する」というのがまとまっている。
Layer が複数に別れていることの意味はよく分かってないが、レイヤー毎に何となく役割が異なるっぽいのは分かる。
Layer を分けているのが単に利便性の問題なのか、動作仕様に影響する問題なのかはよく分からない。
このアバターでは Base で立ったり歩いたり落っこちたりといった設定を行っているらしい。
Additive は未使用、Gesture が指の形を管轄していて、Action は Expression Menu とかから選んだ動作や AFK などの身体のアニメーションを司り、
そして FX の部分がハンドサインによる表情変化やアイテムを出したり消したりといった部分を担っている。

Layer の中身

f:id:kemboorg:20211117211443p:plain
先程の Layer の部分をダブルクリックすると現在設定されている Action Layer が出て来る。
Animator のウィンドウに状態遷移図的なものが出て来る。
状態ノードをクリックすると Motion の項目に設定されている Animation が出て来て、これがオブジェクトのパラメータだとか有効/無効の切り替えだとかを行えるものになる。
そして矢印の方もクリックすると上図右のようにその状態遷移の詳細が出て来る。
一番目立つところに状態変化にかける時間などが指定出来るらしいが、ここはまだよく分かってない。
その下に Conditions というのがあり、ここで「パラメータの値がいくつになったら遷移する」という条件式を書き込める
この条件は増やせるのでどんどん絞り込むことが出来る。
絞り込みではなく OR で条件を増やしたい時は別の状態遷移を重ねて追加することになるらしい。
ノードを右クリックすると「遷移を作成する」というのが出て来るのでそれで遷移を増やせる。

上の図は FX で指定された contorller で左手のハンドサインを司る場所を選択した様子である。ここの各ノードの Animator を編集することで表情を指の形による表情を変更できた。
ついでにこのアバターピースの時の指の形も間違っていたので Gesture の方もいじって指の形を入れ替えることが出来た。

あと Animator の各レイヤーの歯車マークをクリックすると Mask という設定項目があるんだけどここはまだよく分かってない。何か重要そうな気がする。

パラメータの定義

パラメータも手の形などは標準らしいが、Expression Menu に応じたものなど追加することが出来るようだ。
Base よりも更に下に Expression の項があり、Parameters の方で色々定義出来る。
f:id:kemboorg:20211117214045p:plain
どうも表示を見る限りパラメータとして渡せるデータの量には上限があるようだ。

AFK を変えたい

Action を開いて出て来る状態遷移図はこれである。
f:id:kemboorg:20211117212908p:plain
やたらややこしく見えるが、これは上から「立ってる時の Expression Menu で選択した Emotion」「座ってる時の(略)」が沢山あるのでぐちゃぐちゃして見えるだけだ。
今変えたいのは AFK なのでこれらを無視して下の方のこれを見る。
f:id:kemboorg:20211117213114p:plain
AFK Init と AFK と BlendOut にそれぞれ以下から入手したいい感じのポーズを当てはめることで AFK の動きを再現した。
それぞれ「AFK への入り」「AFK 中」「AFK 解除」を示してるっぽいので、AFK の入出で複雑な動きをさせることも可能なのだと思われる。
necocoya.booth.pm
私はここの Animation に表情の変化とリングの変更も突っ込んだが、どうも上手くいかなかったので、ここでは身体の動きのみに留めた。
表情の変化は正確には上手く行っていたのだが、他の設定と干渉したのか目が半開きになってしまった。

もう1つの変更場所

f:id:kemboorg:20211117213516p:plain
FX の方にも AFK と書かれたノードがあった。矢印の方にも「AFK になったら遷移する」と書いてある。
f:id:kemboorg:20211117213751p:plain
表情はこっちで定義した方が良さそうだったのでこっちで定義した。
恐らく色んな設定を1つの anim ファイルに詰め込まず、目的毎に分けて別の anim を作成し、別の Layer で管理するのが適切なのだろう。
加えてまぶたに関わりそうなパラメータも全部目が全開になり続けるよう設定し直した。設定してないパラメータは他の状態遷移と重なってしまうようだ。

何故か変化してくれないリング

f:id:kemboorg:20211117214414p:plain
表情同様リングの変化もそのためのレイヤーを活用すべきと思ってそこをいじった。
Expression Menu の入力を受けてリングの変更をする状態遷移が既に用意されていて、Ring5 が赤い AFK リングだったのでそこへ上図のような AFK の時に遷移するパスを追加した……のだけど思ったようにリングが変化してくれなかった。
これの原因はよく分からない。
上の Base のレイヤーで AFK のパラメータを参照した状態遷移を行ってしまったからだろうか? それとも RingChange では AFK を参照できない何か特別な理由があるのだろうか?
ただ、そもそも最初の時点でも目は変化が反映されていてリングが変化しないという状況は変わってないのでリングを変化させるために何か他の条件も絡んでいる可能性がある。

現状

f:id:kemboorg:20211117215808p:plain
何やかんやあって今はこう。以前の記事の時点では浮かび上がってスカートの中が丸見えになるなどしていたので、浮上も抑制して現在はこんな感じになってる。リングも AFK になってくれれば完璧なんだけどなぁ。
まだ分からないことだらけだけど、こうやって試行錯誤して物を見るのは楽しい。