トマシープが学ぶ

Unity/VR/AR/デザイン好きのミーハー 記事内容は自分用のメモです

【Unity】QuestProでVRoidのモデルにフェイストラッキング。パーフェクトシンクも添えて【v60】

Unityで、Vroid製のVRMモデルをQuestProのフェイストラッキングに合わせて動かす!

QuestのデフォアバターとかWorkroomで試すのはやった。

bibinbaleo.hatenablog.com

パーフェクトシンク

できればパーフェクトシンクにも対応したい。

Vroidモデルにパーフェクトシンク対応させるのは、以前はHanaToolでやった

bibinbaleo.hatenablog.com

 

Hanatool以外にいいツールないかTwitterでみたら今はUnityを使わないHana_Appが主流っぽい

booth.pm

今回は以前作ったパーフェクトシンク対応のモデルを使う

Quest開発の環境設定

Questの開発100年ぶり・・・

最近OculusIntegrationじゃなくて Meta XR UPM packages に変わったらしい 

https://developer.oculus.com/downloads/package/meta-xr-sdk-all-in-one-upm/?locale=ja_JP

Minimal Unity Version: 2021.3.26f1

UnityAssetStoreから入れられる。えっUPMじゃないのか?

assetstore.unity.com

インストールを押したら、Oculus独自のライセンス画面が出た!

公式のガイドページはこちらかな?ちょっと古い気がするが

Get Started with Meta Quest Development in Unity | Oculus Developers

このページが分かりやすい。このページに沿ってやった

https://developer.oculus.com/documentation/unity/unity-tutorial-hello-vr/

 

Meta Quest Developer Hub(旧Oculus Developer Hub)も事前に準備しておけって書いてあったので一応インストールしたけど、いらなかった気もする。

https://developer.oculus.com/downloads/native-android/

 

Unityでプロジェクト作って、AndroidにSwitchして、questを開発者モードにしてPCにつないで、RunDeviceにQuestを出す。Refreshしたら出た

そしてOculus>setupみたいなメニューからこの画面を出してFixAllやAllpyをこれらがすべて消えるまでやる。そしたらもろもろの設定を勝手にやってくれる!便利!

あとはシーンを用意する。

ミニマムだとOVRCameraRigを追加するだけ。名前で検索する際PackagesのほうにあるのでAllにしたほうがいい

今回は適当なMetaXRのパッケージのsampleをインポートしてそれをビルドした

いずれの場合も対象の機材にチェックが入っているか確認。

そしてBuild&Run!

ちゃんとビルドされた!

このあとBuild&Runしたら失敗することがあったけど、Buildだけして、MetaDeveloperHubソフトからapkをドラックで入れたら動いた。

ちなみにMeta XRのサンプルはいろいろ面白いものがあるってTwitterで見かけた気がするので、それは別記事で試そう~

VRM表示

uniVRM入れて、VRMモデルを入れて、OVRCameraを置いたシーンにVRMモデルを置いたら普通に表示された。

最初の設定だと、カメラがUnityの0の高さにあって、上のほうにVRMモデルがあったのでTracking Origin TypeをFloorLevelにしたら目の前に表示された

フェイストラッキング

こちらを参考にやっていく!

note.com

OVRFaceExpressionsと、↑の記事内のFaceExpressionsControllerをVRMモデルのfaceにつける。

OVRCameraRigで以下のFaceTrackingの設定をする

 

するとQuestProでビルドすると無事自分のまばたきが反映された!

コードの内容的にOVRでの目を開く閉じるのパラメーターの値を、Vroidの13,14番目のBlendeshape(=目を開く閉じる)の値に入れている

パーフェクトシンク対応

追記:HanaToolのOVR用パーフェクトシンク

HanaToolでOVR用のブレンドシェイプを作れる!これでこの苦労はいらない

bibinbaleo.hatenablog.com

--

 

パーフェクトシンクはiOSのFaceIDの規格に対応するためのもの。

QuestProのフェイストラッキングとはデータの種類や名前は違うので置き換えないといけない

hinzka.hatenablog.com

パーフェクトシンクで設定した名前をOVR用に置き換えるのは、BlendShapeのインスペクターで置き換えればいい

はいぬっかさんの記事の表を元にひとつずつやっていった。

そしてこちらの方のFaceExpressionsControllerVRMをfaceに付ける。

github.com

こうやって全部置き換えたのだが、1、2個パラメーターを置き換えたときはその部分と瞬きは反応していたのに、全部置き換えたら瞬きしか反応しなくなった;;

なんでかわからないので、別のキャラで4つずつぐらいパラメーターを置き換えて行ったら、半分ぐらい置き換えたけど今のところちゃんと動く。

JawOpen(OVRではJawDrop)が口の閉じ開きなので、それは優先的にやったほうがいい。

あとは頬をプクーってやるのが可愛くて楽しい。

ちなみにOVRの最新版のv60では舌も追加されている。

www.moguravr.com

v60(現時点での最新版)のo_v_r_face_expressionsのリファレンス。

https://developer.oculus.com/reference/unity/v60/class_o_v_r_face_expressions/

本当だ。舌がある。

パーフェクトシンクの方も舌はあるので、これもパラメーター置き換えて、さっきのスクリプトにパラメーター追加したら良いかな?

ちなみに多分舌を出すパラメーター名は両方同じ「TangueOut」っぽい

追加したら瞬き以外が反応しなくなった;;

視線

視線はパーフェクトシンク(=ARkit)には入ってたかな・・・?

OVRのフェイストラッキングの方のパラメーターにはなさそう

 

アイトラッキング自体はできるので、別途対応方法を考えないといけないかな?軽くググってもVRMモデルでやっている人はいなさそう

note.com

 

waidayoでやったら目線動いた。

youtube.com

VRMではBlendeShapeでやる方法とボーンで目線を動かす方法がある。

qiita.com

いずれにしてもVRMの公式の機能を使うならLookAtという形式でしか動かせないのかな?

vrm.dev

ここでできた

bibinbaleo.hatenablog.com

 

VRMアバターをQuestの動きに沿って動かすのは別途VRIK使わないといけないかな~

こちらの記事に紹介されているボディトラッキングも試したら、上半身はちゃんと取得できた!

note.com

ここでできた

 

追記 ARKitFace

Unity-Movementというフェイストラッキングなどのサンプルが入っている公式のアセットの中に、ARKitのBlendShapeをOVR用に変換するスクリプトが入っていた!

github.com

https://developer.oculus.com/documentation/unity/move-body-tracking/

bibinbaleo.hatenablog.com

これはVRMでも使えて、VroidのFaceにOVRFaceExpressionsと共につけて、AutoGenerateを押すとある程度は変換されたが、いろいろ間違っている部分もあった

これを一つ一つ手作業で置き換えていくのめんどくさいな・・・

コピペもできないし・・・

置き換えないで動かしたら、結構変な表情になった

追記:音声のリップシンク

あとでuLipSyncで音声からの口パクをやったが、uLipsyncのスクリプトをオフにしても口を動かしてなくてもしゃべったら口が動くな~と思ったら、フェイストラッキングがAudioからも口を動かしていたせいっぽい