hibitの技術系メモ

数学とか3Dとか翻訳とか

(主にBeat Saberを想定した)バーチャルモーションキャプチャーを調整するための方法

www.youtube.com

 バーチャルモーションキャプチャー(以下:VMC)を用いると、上に貼った動画のように、あたかもアバターがBeat Saber(以下:ビートセイバー)をプレイしているかのような動画が撮れます。詳しくは以下の手順を参照。

sh-akira.github.io

 しかし何も調整を加えないと、

  • 目を見開きっぱなし
  • 手の平ひらきっぱなし
  • 手が捻じれる

 という問題が発生するのでそれぞれ対策を解説していきたいと思います。

目を見開きっぱなし

 fbxから変換したままのVRMでは、VMCで表示されるアバターはまばたきをしません。目を見開きっぱなしです。別に気にならないと言えば気にならないレベルですが、まばたきがあると一気に「生きてる感」が出るので設定していきましょう。

 正確には、VMCにはデフォルトでまばたきの設定が入っているのですが、素のVRMデータにはそれに対応する「BLINK」というブレンドシェイプが設定されていないので、まばたきの命令は出していてもその動かし方がわからないという状態です。

 では、「BLINK」の設定をしていきましょう。VRMを出力したということはUnityに以下のようなアセットが設定されているはずです。(既存のVRMをいじる場合でも、UniVRMを読み込んだUnityにVRMファイルを読み込んだ時点で生成されます)

f:id:hibit_at:20190321215519p:plain

 その中の「VRM名.BlendShapes」フォルダにある「BlendShapes」を選択すると、インスペクタに色々な表情に対応するブレンドシェイプの一覧が表示されます。

f:id:hibit_at:20190321215827p:plain

 その中の「BLINK」を選択します。

 売り物のアバターだったら普通、対応するシェイプキーを作っているので、その値を「100」にします。

f:id:hibit_at:20190321215937p:plain

 シェイプキーは対応するメッシュに格納されています。三角を押して展開しないとシェイプキーの一覧が表示されないので注意。大体のモデルは「face」とか「body」とかそんな名前になっているはず。

f:id:hibit_at:20190321220042p:plain

 これで設定完了。もちろん、シェイプキー(頂点の変形)が作られていることが前提で、何もシェイプキーを設定していないモデルが魔法のようにいきなり瞬き出したりはしないですからそこは注意です。

f:id:hibit_at:20190321230415p:plain
図にするとこんな感じ

 …という流れですね。この流れは瞬きに限らずあらゆる表情付けに共通なので覚えておくとよいかもしれません。また1つのブレンドシェイプに複数のシェイプキーを組み合わせることもできます(なので「ブレンド」シェイプな訳ですね)。

手の平ひらきっぱなし

 VMCで読み込んだモデルは、手を開いた状態で持ち込まれます。コントローラーのタッチパッドを触ると色々手の形が変わりますが(VRChatと同じ制御です)

f:id:hibit_at:20181220024849p:plain
VRChatの表情制御の図

 まあ普通にビートセイバーをやっていればここはまず触らないので、多くの場合は手の平を開きっぱなしにしながらセイバーを振り回す訳です。

f:id:hibit_at:20190321220412p:plain
手が開いている様子

 これはこれで超能力者みたいな趣がありますが、やはりセイバーを握りしめていた方が自然でしょう。

 なのでVMC側で握りっぱなしにするようにします。

f:id:hibit_at:20190321220551p:plain

 ここの「ショートカットキー」をクリック

f:id:hibit_at:20190321220706p:plain

 色々と手の形を動かす命令があります。もったいないですが、すべて削除しましょう。

f:id:hibit_at:20190321220835p:plain

 そして新たに命令を作りましょう。上の図の「カスタム」が新しく作った命令になります。「ハンドジェスチェー追加」を押して、以下のようなセッティング。初期設定からいじった部分をすべて赤丸つけています。

f:id:hibit_at:20190321221055p:plain

 発動するキーは何でもいいのですが、私はキーボードの「S」にしてます。一度Sを押したら最後、この手は二度と開かれませんがまあビートセイバーをする上でならそれぐらいがちょうどいいです。この設定を一回してしまえば、「ショートカットキー」の右下にある「カスタム名称(保存でプリセットへ追加)」という所でこのセットをまるごと保存・呼び出しできるので、以降はワンクリックで出来るようになります。

手が捻じれる

 これは一部の人向けの問題になります。アバターの手の向きについては、VMC側である程度補正が入るっぽく、コントローラーを自然に持っている限りはいいのですが、それ以外の角度で持つ場合、手首が不自然に捻じれてしまいます(あらかじめコントローラを通常じゃない角度で持ってキャリブレーションしてもこの現象は発生します)。

f:id:hibit_at:20190321231142p:plain

 これは私が逆手で構えた時のポーズ。

f:id:hibit_at:20190321231436p:plain

 現実はこんな感じになっています。VMCの機能や(もしくはポリゴン自体をいじることにより)「手の角度」自体は補正できますが、問題はこれ。IK(インバースキネマティクス、手の角度から肘の動きを計算すること)が狂ってしまうため、ポーズが狂ってしまうのです。

 え? 逆手でプレイするのなんてお前だけだろって?

 確かに逆手でプレイするのは世界で私含めごく一部(最近は片手逆手の人が増えてきました)ですが、実はランカー勢は通常プレイにおいても、コントローラーを特殊な方法で持っているのです。

 それがこれだ!

f:id:hibit_at:20190321221307p:plain (元画像はBeat Saber界隈のDiscordに出回っているものです。作者を存じ上げない、というか特定不可能なため無断転載させていただきますが、問題があることが発覚した時点ですぐに対応させていただきます)

 名付けてB-Grip!

 実は、VIVEコントローラーを普通に持つと先端が大きすぎてアンバランスであるため、とても振り回しづらいです。これは難曲を攻略する上では死活問題です*1。そのためランカー勢(のうちVIVE勢)はほぼこのグリップでプレイしています。しかしこれだとVMCでは手首が裏返ってしまいます。これは全世界共通の問題なのです!

 ではどう直すかについて。

 トラッカーを追加して手の甲にはめましょう。

 今のところこの問題はマネーでしか解決できないのだ。いや、なんかIKをいじれるすごい技術があれば解決できるかもしれんけど……。

f:id:hibit_at:20190321221928p:plain

 ちなみにトラッカーを手の甲にわりあてる場合はVMCのここで割当設定を決める必要があります。自動割当だとコントローラを手だと認識してしまうので……。まあ、これは動画の見栄えにどうしてもこだわるなら、というレベルですね。

 皆様もよき動画撮影ライフを。

*1:ちなみにこれは冗談ではなく、世界のトップランカーの大半はOculusです