Questで髪を揺らす方法(昔話)
VR ChatのアップデートによりFinal IKが使えなくなったため、現在は以下のことは出来なくなりました。以前はこんなこともできた。という記録です。公式によるとQuest対応の揺れ物機構は将来的に導入予定らしいのでそれを待ちましょう。
Oculus QuestでVRChatをする場合Dynamic Boneが使用できない(表示できない)ためアバターの髪や服や胸を揺らすことができません。
ここではDynamic Boneを使わずにアバターの髪などを揺らす方法を解説します。
まず、Unityで新規プロジェクトを立ち上げた後、VRC SDK、揺らしたいところにボーンが設定されているアバター、Final IKをインポートします。Final IKはUnityの有料アセットで90ドルします。うまく、半額セールの時を狙って買いましょう。
今回はみんな大好きロポリこんを使います。表情豊かでかわいいQuest対応アバターです。
まずは、スフィアを作って(左のヒエラルキーの何もないところで右クリック→3D Object→Sphere)アバターの子に置きます。間違ってArmatureの子にしないようにしてください。ボーンと関係ないマテリアルというところがポイントです。(ボーンにウェイトのっていないメッシュは、VRCではアバターに遅れて追従するように表示されます。)
スフィアの大きさを適当に整えて、動かしたいボーンの先に移動させます。今回は耳を動かしたいので耳の先に置きます(ボーンに近いほうが動きが大きい、ここは調節してください)。スフィアの名前をわかりやすいようにL_ear_targetと変えます。ここはお好みで。
次にアバターのところでAdd ComponentからAim IKを選択。Targetに先ほどのL_ear_targetをAim Transformに動かしたいボーン(今回はEar.L_00)を設定。一番下のBonesってところの+ボタン押して、そこにまた動かしたいボーン(今回はEar.L_00)を設定。そうすると、動かしたいボーンのところに赤い丸ができます。(ボーンを複数選択すると赤い丸が複数線でつながったものが出てきます。)
つぎにAxisを設定します。これはターゲットの方向に矢印を向けてください。今回は真上にターゲットがあるのでX:0, Y:1, Z:0で設定しました。矢印がターゲットの方を向いていることを確認してください。
一応設定はこれで終了。次は動作確認です。真ん中一番上の三角の再生ボタン押します。
上のような画面になるので赤で丸しているSceneを押してください。
ターゲットの位置が微妙だと上記のように耳がまっすぐじゃなくなってます。なのでターゲットの位置を微調整します。ただ、再生中の変更は設定に反映されないので微調整後のPositionの値をメモしたあと、もう一度再生ボタンを押して、再生を中止。その後ターゲットのPositionに先ほどメモした値を入力します。
これで完成。しかし、このままでは、ターゲットが見えているのでカッコ悪い。ターゲットのSphere, Sphere Collider, Mesh Rendererを削除します。するとターゲットが消えます。このターゲットにはマテリアル、メッシュもないので負荷も減ります。アバターパフォーマンスもExcellent判定です。
あとは、動かしたいボーンの数だけ同じことをすればOK。
これでQuestでもロポリこんの耳が揺れるぞ!!
最後に
この揺れ機構にはもともと元怒さんという方が、QuestでDynamic boneを再現しようとして作られた”疑似Dynamic Bone”という元ネタがあります。私は、”疑似Dynamic Bone”を再現しようとして、できなくて、自分なりに作ったものです。
元怒さんの”疑似Dynamic Bone”も是非見てください。