メタバース

clusterで使うヒューマノイドアニメーションに困ったら~アニメーションがずれる・思った通りに再生されない時の話~

seironsyugi

※この記事についての注意書き

本記事は、2024年11月24日 17:20 にFANBOXへ投稿した内容の転載になります。
FANBOX内容整理の為、技術的記事を移行中です。

大まかな構成や流れは当時の記事を踏襲しつつ、
clusterでつまずきやすいポイントの補足や説明を追加しています。

また、記事内で「ベータ版の~」「1年前の〜」といった表現がありますが、
これらは2024年時点での情報・時間軸を基準にした記述です。

元の記事の雰囲気や文脈を残すため、
一部は横棒(──)を入れて当時の文章を残したまま、加筆する形を取っています。

コピー&ペーストで対応している箇所もあるため、
修正の反映漏れなどにより、一部内容に齟齬が生じている可能性があります。
あらかじめご了承下さい。

🐱何をしたい人向けの記事か

この記事は、
clusterのベータ機能を使ってヒューマノイドアニメーションを再生しようとして、
「なんか思った通りに動かない」「位置がずれる」と困った方向けの記事
です。

なお、
ヒューマノイドアニメーションを自作する方法そのものについては、
すでに別の記事で解説しています。

あわせて読みたい
VRChat,clusterで使える!Vsinger用歌モーションの作り方
VRChat,clusterで使える!Vsinger用歌モーションの作り方

この記事では、
・アニメーションがずれる
・VRChatでは問題ないのにclusterだと挙動がおかしい
・再生床に入ったら前に移動してしまう

といった
clusterでアニメーションを扱う時につまずきやすいポイントに絞って整理します。

先に謝罪しておきたいのですが、
筆者はUnity初心者です。

この先、問題点と解決法が出てきますが、
スクリプトを書き換えればもっと綺麗に解決できる部分もあるかもしれません……。
詳しい方がいらっしゃいましたら、ぜひ教えて頂けると助かります。
宜しくお願い致します m(__)m💦

なぜこの記事を書いたか


VRChatで制作し、VRChatでは問題なく使えていたアニメーションが、
clusterでは思うように扱えなかったため、
「clusterで使う場合、どこに注意すればいいのか」を整理したかった。


1年前(※2024年時点の1年前)のcluster公式動画を見ていたところ、
「Unityでヒューマノイドアニメーションを作れないことはないけど、実質作れないと思った方が良い」
という流れがありました。

Unity単体では難しいけれど、
VRChat経由でアニメーションを作り、Unityで調整してclusterで使う
という方法なら現実的なので、
その際につまずいた点を書き残しておこうと思いました。

参考URL
【新機能リリース記念】ベータ機能完全に理解した!
https://www.youtube.com/watch?v=wl-k5mgJLgo

アニメーションを作ること自体は、思っていたよりも簡単でした。

VR機器を持っていない方も、
動けるお友達にお願いしてアニメーションの元データを作ってもらう、
という方法もアリだと思います✨

準備

① VRChatでVR機器を使って自作アニメーションを作る
https://seironsyugi.fanbox.cc/posts/8599146

② clusterのベータ機能が使えるワールドを作成する

③ clusterのベータ機能でプレイヤーを躍らせる床を作る
(詳しくはvinsさんの記事をご確認ください)
https://zenn.dev/vins/articles/b31101aabe1180

現状の問題点

HUMRで作ったモーションを使い、
ベータ機能でアニメーションを再生すると、

踏み入った場所(アニメーションを再生してほしい位置)から、
前に移動してしまう

という現象が起きました。

試しに、別途購入したモーションを使ってみたところ、
こちらは問題なく板の上で再生されます。

ということは、
私が作ったモーション側に何か問題があるはず……?

アニメーションがずれてしまう原因を探ってみる


アニメーションの動きがおかしい時、
アニメーションクリップの以下のチェックが入っていない場合が多いです。

……でも、チェックは入っている。
うーん……💦


Animator の「Apply Root Motion」をOFFにすると直る、
という情報も見かけました。

……ただし、
clusterのベータ機能で使うのは Animator ではなく、
Humanoid Animation List。

該当する設定項目がありません……。


そもそも、
アニメーション自体がズレているのでは?

もしズレているなら、
中心位置を調整して対応できないのか?

でも、
再生画面を見る限り、特にズレていないようにも見える……。

問題個所の確認方法と対策

結論から言うと、
私の作ったアニメーションはズレていました。

VRChatや他の手段で使うと問題が出ないのは、
Animator や設定を介して位置補正が働いているためで、

clusterのベータ機能では、
アニメーションの「本来の位置情報」がそのまま使われてしまう
からだと思われます。

本来の位置情報がそのまま使われてしまうというより、位置補正などの項目の適用が指定されていないのかと思います。

位置情報はコレだよ。あとこの補正宜しくね←この後半の部分が指示されていない、ということ。

(※この認識が間違っていたら、詳しい方ぜひ教えてください🙏)

アニメーションのズレの確認方法

アニメーションクリップの設定で、

Root Transform Position (XZ) を
「Center of Mass」→「Original」に変更します。

すると……

ばっちりズレてますね。

なぜズレたアニメーションになったのか

おそらく原因は、
HUMRでアニメーションを撮影した位置です。

HUMRは、
ワールドに入ってからのアバターの動きをそのまま記録します。

私は、
ミラーのある位置まで前に移動してから撮影していたため、
スポーン位置から前にズレた状態のアニメーションになっていたようです。

HUMRで撮影する際は、
スポーン位置から動かず、その場で撮影する
方が後々楽そうですね……💦

アニメーションのズレの直し方

この場合は、

Animator.Root.z を
2.3138 → 0 に変更しました。

ズレ方によって数値は変わりますが、
アニメーションの再生画面を見ながら
Root の xyz を調整すれば大丈夫だと思います。

……

直りました!!

修正後のものが、
先ほどの画像でいう左側の状態です。

これで、
問題なくこのアニメーションが使えるようになりました。

🐱clusterのアニメーション再生ギミックについて補足

clusterのアニメーション再生ギミックでは、

・ループ間の補正に対応していない
・左右反転に対応していない

という事も起こりました。

これは、
clusterのギミックとしてアニメーションを呼び出す際の設定が、
これらを参照していないために起こっている
可能性が高いです。

(Humanoid Animation List自体に設定が出来るようになったら嬉しいなぁ)

理屈上は、
うまく設定すればループ補正や左右反転ができる余地はあるのだと思います。

……が、
私は色々試しましたが、正直よく分かりませんでした。4時間くらいやってダメでした。

※AIに聞きつつ全て試しましたが、AIはclusterギミックに嘘をつきがちで、よく時間を無駄にします……

現状の認識としては、

・使っているギミックでループ補正ができない
・開始位置がおかしい
・左右反転が効かない

という場合は、
そのギミック自体が位置の補正等に対応していない可能性がある
くらいの理解で良さそうです。

上記の解決方法(強引)

・使っているギミックでループ補正ができない→アニメーション自体が編集できるため、ループ前とループ後の位置を手修正する

・開始位置がおかしい→アニメーションの開始位置を正しい場所に編集する

・左右反転が効かない→左右反転した動きを撮りなおす

私は「マイクを持った動き」のモーションを作っていたのですが、気分で右手にマイクを持ったり左手に持ったりしてアニメーションを作っていたので、最終的に全て右手で撮りなおしました。
VRChatように撮影した場合は左右反転はチェックマーク一つなので油断してましたね。
左右反転出来るとはいえ、撮影時点で統一するべきでした……

Xからコメントをお待ちしています。
ブログ更新の励みになります!
記事URLをコピーしました