ぐっちーの駄弁り部屋

個人的に制作しているものの進捗や日常について不定期投稿

VRMとVIVEFacialTrackerでVtuberごっこしてみた

f:id:gucchi512:20220409233259p:plain どうも皆さんこんばんは グッチーです

新年度になりましたね。実感がわかないですが社会人2年目に突入しました
去年よりはいろんな方面で成長はしているはずですがまだまだ知識・技術力不足だなぁと思う今日この頃です

今年(度)はあれこれインプット・アウトプット増やしてこうと思って事始めとしてだいぶ前に購入していたVIVEFacialTrackerを使ってみましたので導入手順とかをまとめておこうと思います

本題に入る前に

まずは何故今までこのFacialTrackerで遊んでこなかったのかというお話をしようと思います

この通りです。後述しますがVIVEFacialTrackerはVIVEProEyeと併せて使うことが前提になっているためトラッカーから伸びてるTypeCケーブルがべらぼうに短いです。
それはまだいいんですがTypeCをさすことのできるPCを当時持っていなかったというのが大きかったです。
そのためそもそもトラッカーを利用することができず今更遊んだというわけです

VIVEFacialTrackerとは

では本題に参りましょう。VIVEFacialTrackerとは顔(主に口回り)のトラッキングを行うことができるトラッカーです。
リップシンクのように発声に合わせて口が動くのではなく口回りの動きをトラッキングを可能にするのであくびなど発声を伴わない口の動きをとることもできますし、リアルの動きがアバターの顔にリンクするのでアバターがより人間らしい表情をしてくれます
ただこちらのFacialTrackerですが「フェイシャル」と言ってるのにかかわらず口元の動きしかトラッキングしてくれません。目の動きや瞬きなどはとることができません。そういったところまでトラッキングしたい場合はVIVEProEyeというトラッカーを出しているHTC社が発売しているHMDを利用する必要があります
そもそもこのVIVEFacialTrackerはVIVEProEyeと併せて使うことを前提に作られているようで本来の使い方としてはこのトラッカーから伸びているTypeCケーブルをHMDに接続し、付属のテープでHMDに固定して利用できるようになっていました。
とはいえPCに接続さえできれば単体でも動作するので興味のある方は購入してみてください
通販以外にもHMDが購入できるリアル店舗にも置いてあることがありますのでいろいろ探してみてください(私は購入を思いついた日にその足で日本橋ツクモに買いに行きました)

www.vive.com

今回やったこと

今住んでいる部屋はお世辞にもVRを、ましてやVIVE製品特有のベースステーションを配置してトラッキングエリアを構築できるような広さをしていないのと購入する資金がないのでVIVEProEyeを利用せずトラッカー単体での動作になりますのでご了承ください

動作環境

今回利用した環境です

  • Windows10 64-bit
  • Unity 2020.3.26f
  • SteamVR 1.21.12
  • SRanipalSDK 1.3.3.0
  • SRanipal Runtime 1.3.2.0
  • VRoidStudio v0.13.1 (必要な場合のみ 詳細は後述)

下準備

SDKとSR_Runtimeの入手

まずはこのトラッカーを使うための環境構築からです。
以下のサイトからこれらが入ったファイルをダウンロードしてきます

developer.vive.com

こちらのサイトに飛ぶとクイックスタートが書かれたPDFを閲覧ができますのでそれに従って設定していけばOKです

内容をざっくりまとめておくと
1. このサイトに飛んで
hub.vive.com
2. これらのファイルをダウンロード
f:id:gucchi512:20220409221620p:plain
3. VIVE_SRanipalInstaller_1.3.2.0.msiを実行してRuntimeをインストールSDKはZipファイルを展開する
4. SRRuntimeを起動
5. Unityプロジェクトを開く(もしくは作成)
6. SDK-v1.3.3.0\SDK\02_UnityにあるVive-SRanipal-Unity-Plugin.unitypackageをUnityプロジェクトにインポート

これでフェイシャルトラッカーを使ってトラッキングをする準備は整いました。

サンプルシーンで遊んでみる

では早速サンプルシーンで遊んでみましょう

Assets/ViveSR/Scenes/Lip/LipSample_v2.unity

前述の準備を行った後にこちらのシーンを再生するとトラッキングを試すことができます。シーンを再生したらトラッカーのセンサーがある方の面を口元に近づけていろいろ動かしてみましょう。

f:id:gucchi512:20220409223342p:plain

思っている以上に近づけないと反応しなかったりするので注意です。
顔のトラッキングがしたいだけならここまでで完了です。お疲れさまでした。
次の項からVroidStudioで作成した自分のアバターを操作していく方法を紹介していきます

VRM導入編

今回の記事ではVRMファイルのインポート方法などについては省略します
UniVRMを使っていい感じにするのが定番化と思います

やらなければならないことまとめ

先にやらなければならないことだけまとめておきます。こちらのフェイシャルトラッカーですがセンサーの値を用いてブレンドシェイプの値を操作しています。
対象となるブレンドシェイプは決まっているため自分の用意したモデルにそのブレンドシェイプが存在しない場合追加する必要があります。
逆に既に対象となるブレンドシェイプが用意できている場合には以下の操作は不要ですので飛ばしてください
対象となるブレンドシェイプは以下の画像の通りです f:id:gucchi512:20220409224154p:plain

VRoid製VRMファイルにブレンドシェイプを追加する

追加するにあたりいくつか注意事項があります

  • 今回専用ツールを使います。有料のツールになりますのでご了承ください
  • ラッキングを可能にするためにはVRoidStudio v0.11.3/v0.12.1/v0.13.1のいずれかで作成したVRMファイルが必要です 正式版のVRoidStudioでは頂点数の関係でツールを利用できません

以下のツールを使ってブレンドシェイプを追加していきます

booth.pm

方法は以下のサイトを参考にしてください

hinzka.hatenablog.com

サンプルシーンにVRMをインポートしたときにできるPrefabを配置しメニューバーからHANA_Tool/Readerを選択しReaderを起動します。

SkinnedMeshRendererにFaceオブジェクトをD&DしSRanipalから始まるファイルを選択します。この時に選択するファイルはVRMファイルをエクスポートしたVRoidStudioのバージョンによって切り替えてください

f:id:gucchi512:20220409230614p:plain

ReadBlendShapesをクリックすると実行されてブレンドシェイプが追加されます

私はこのあたりの知識が乏しいのでツールを購入し利用させていただきましたが、
ブレンドシェイプの追加に詳しい方はツールを使わなくても可能なのかなと思いました。

テスト用のコンポーネントをPrefabに刺してチェック

ブレンドシェイプが追加できたらそのアバターのPrefabにテスト用のコンポーネントをさしていきます
SDKに入っているコンポーネントを利用していきます。VRMMetaなどのコンポーネントが刺さっている親オブジェクトを選択しAddComponentからSRanipal_AvaterLipSample_v2というコンポーネントを追加します

f:id:gucchi512:20220409225548p:plain

そうしたらLipShapeTablesのElementを一つ増やします。
するとSkinnedMeshRendererを設定するよう促されますのでFaceという名前の子オブジェクトをD&Dします

f:id:gucchi512:20220409225957p:plain

するとブレンドシェイプの一覧が表示され割り当てが確認できます。VRM標準のブレンドシェイプが残っている場合それらも表示されますが何の値も入ってなくて大丈夫です必要なところが正しく入っていれば動作します。以下の画像のようになってればOK

f:id:gucchi512:20220409230147p:plain

SDKのサンプルシーンは再生するとMainCameraの正面に鏡が移動してくるようになってるみたいなのでそれを利用して動作確認を行います。
MainCamera/AvaterSample以下にあるサンプル用のオブジェクトを消して、配置したPrefabのGameObjectを代わりに置きます
カメラの位置に顔の真ん中が来るように位置を調整します(なぜがこのシーンのMainCameraは変な方向を向いています)

f:id:gucchi512:20220409231338p:plain
マニピュレータがMainCameraの位置
この時カメラより前にアバターがいるとMainCameraに映ってしまいますので注意してください。
そしてシーンを再生すると…

アバターが私の口に合わせて動いてくれました!
バストアップくらいで切り取ってゲーム画面やコメント欄(っぽいもの)を表示しておけば気分はVtuber

今後

いい感じに動かすことができたので後はカスタマイズするだけですね
記事執筆時点では何もしていませんがよりリアルにするならオートブリンクを実装するとかが手っ取り早そうな気がします。
あと今回はサンプルコードを使って顔の動きを実装していますのでそれを参考に独自実装をしたほうがいい気もしますね。軽く調べた感じだとセンサーの値をとってこれるようなのでそれを使えばいいのかな?
記事にはしていませんが実はFinalIKを使った首から下の挙動については検証済みなのでそれと組み合わせてお手軽全身Vtuberごっこができそうですね

私の持っているHMDはOculusRift でHMDと両手のコントローラを使った3点トラッキングなのでかなり動きがぎこちないです。

おしまい

というわけで結構前に購入したVIVEFacialTrackerで遊んでみたという記事でした。
VRChatとかは最近出来てないですがそういった自分だけのアバターを動かせる環境を自作するというのも面白いかもしれませんね。
というわけで超久々の技術紹介記事でした!
それでは今日はこの辺で(`・ω・´)

参考記事

developer.vive.com

hinzka.hatenablog.com

note.com

shitakami.hatenablog.com