VRCのマイ妖精アバター完全解説

VRChatで妖精アバターを使ってなんやかんやしてる者です。新しく人と話すと、浮遊していることや見た目について興味・関心を持ってくれることが時々あります。とても嬉しいのですが、音声だけだと説明が難しく大変だったので、紹介も兼ねてNoteにまとめてみます。
(完全解説といいつつアニメーションとか一般的な部分は省略しています。機構的な話でキャラデザの話はないです)

◆浮遊ミニアバター (※)

 妖精アバターの核となる機能です。浮遊アバター設定機能という名前ですが、スケールの調整も一緒にできます。他の浮かせる手法と違って、浮いたまま移動できたり、足も動かせたり、アニメーションと干渉しないなどのメリットがあります。妖精に限らずどんなキャラクターにも使えて、設定も楽なのでぜひ(宣伝)。

※追記: 浮いたまま移動する方法が見つかったので現在はフルトラ時には使わなくなりました。一番下まで読んでね

◆脚ぷらモーション

 浮遊アバターを使うと自分の足が他人の視界に入るため、棒立ち感がとても目立つという問題がありました。フルトラ化ももちろんとても良いのですが、常時足を動かし続けるのも辛いのでアニメーションで解決しました。足の動きにプラスして付くのでフルトラと併用できます。Avatars 3.0になってメニューから大きさや速度も調整可能になりました (ツールには入ってないです)。

◆移動時パーティクル

 いわゆる妖精の粉です。見失われづらいように実装しましたw 移動中は空間に残るように、しかし話してる間は邪魔にならないように、動いている間のみたくさん出るような機構を、上のリンクを参考にして実装しました。上のリンクからの変更として、体との相対移動ではなくグローバルな移動で出るようにDynamicBoneにしたのと、横移動のみで出るように縦に長いコライダーにしたのがあります(ConfigurableJointでもできるかもしれません)。

◆リアルスケール

 身長設定を低くすることで相対的に腕を大きく動かせるようにする設定です。腕を大きく動かしたいミニアバター勢には特に有用です。

◆上下移動アニメーション

 PlaySpaceMoverSpaceDrag のような、コントローラーの位置を仮想的に変更するツールを作り、上下移動するアニメーションを流し込んでいます。一応 ここ で公開しているのですが、自分用に作ったツールであり、他人にはオススメしません…… フルトラやOpenVRInputEmulatorの準備が必要なだけでなく、 実際に視界が上下しており、非常に酔いやすい ためです(自分は慣れてしまいましたが)。

◆BoneMorph(表情アニメで動きを変える) (※)

VRChatの表情アニメーションでは長さのあるアニメーションをうまく扱えないのですが、Constraintを使って擬似的にボーンを付け替えることで表情から動き(今回は羽根)を切り替えることができるようになりました。
羽根のダミーボーンを3種類用意し、アイドルモーションからそれぞれを違う速度で動かし、表情アニメーションから実際の見た目に反映されるボーンがどこに追従されるかを切り替えています。その際、自分自身のウェイトも混ぜることでなめらかにつなぎ替えています。

ちなみにこれも(全く同じではないですが)ツールを作りました。

※追記: Avatars3.0になって、普通に実装できるようになったので上の機構は不要になりました。

◆GravityBreaker

 InputEmulatorでの上下移動は、VRChatでの(コントローラーによる)移動中は反映されない(もとの高さに体が戻ってしまう)という問題があるのですが、それを打ち消す機構を開発しました。もともとツール化できない予定だったのですが、構造を改善してツール化しました!

これにより、自分がフルトラで使うアバターには浮遊アバター機構を使わなくなってしまいました (ただし、仕組みとしては浮遊アバター機構の上に乗っています)

◆DynamicBoneの誇張

小さいアバターでは移動速度が体の大きさに対して相対的に大きくなるので、揺れものを体の動きに対して自然に揺れるように調整すると、移動した時に荒ぶってしまいます(高速で振動する)。それを避けるため、体のボーンを数倍に大きくした不可視のボーンをConstraintで作り、それにDynamicBoneを入れ、その回転をRotationConstraintで実際のアバターに適用しています。
あまり大きくするとパフォーマンスランクに影響してしまうので注意。(回避は出来るだろうけど)

◆回転しない脚のInsideCollider

脚がスカートを貫通しないようにする方法としてInsideのDynamicBoneColliderを使っているのですが、コライダーの中心が脚の軸からズレているため、脚を回転させるとそれにつられてコライダーの位置も変わってしまうという問題があります。脚のボーンではなく、脚の方向に対してAimConstraintで動く(かつ、Upを自身の子にする)ボーンを用意して、それにコライダーをつけています。
この方法だと残念ながら三次元的な動きによってねじれが発生してしまう(手を前に出して上→外→前と戻すと90度回ってるやつ、の多分1フレーム版)ので、少しずつ元に戻るようにConstraintで補正を入れています。

(が、これはたぶんもっといい方法がありそうです)

◆終わりに

 これらの機構等々は自分の持つ「こうなりたい」という思いから作ったり使ったりしているもので、他の人にとって有用なものでは無いかもしれません。しかし、VRの世界に来るものは皆多かれ少なかれ「こうなりたい」というものがあるはずで、それを追い求める人が増えてほしいと思っています。アバターはもっと自由になれる、その手伝いができればいいなと思います。

◆おまけ(宣伝)

 アバターに小物つけるやつを作るやつ、というツールを公開しました。これもまた誰か、特に自分の作った小物を多くの人に使って欲しい人や、あまりUnityに詳しくないけどアバターはカスタマイズしたい、という人の助けになればいいなと思います。


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