【NeosVR】QuestProでフェイシャル＆アイトラッキングする方法

><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/34398cbe-f7e6-0cdc-498b-73591d1680ba.gif">
QuestProユーザーのみなさん！[NeosVR](https://neosvrjp.memo.wiki/d/%BB%CF%A4%E1%CA%FD#content_1)でもアバターの目\:eyes:や口\:tongue:を動かしたいですよね？


今回はその方法をまとめてみました！

この記事はNeos VR Advent Calendar 2022（一枚目）の23日目です。
昨日のmp/月光原澪さんの「[髪などボーンを切れるハサミ改造してみた](https://nz.hateblo.jp/entry/AdCr2022)」でした。
明日はlitalitaさんの「[NeosVRでの音楽関係活動振り返り2022](https://note.com/litalita9764/n/nf5f9e3fc6c99)」です。

https://adventar.org/calendars/7623


# ALXRを導入する

ALXRを導入すると(Air)Link経由でフェイシャルやアイトラッキングの情報をPCに送れるようになります。
以下は[VRCFTというDiscordサーバー](https://discord.gg/vrcft)に記載されていたものを参考にしています。

１．スマートフォン側でMeta Quest を開発者モードに設定します。
>- Meta アカウントが Oculus 開発者アカウントであることを確認します。お使いのアカウントが Oculus 開発者アカウントでない場合は、https://developer.oculus.com/sign-up/ でサインアップしてください。
>- iOS または Android で Oculus アプリを開きます。 [メニュー]、[デバイス] の順に移動し、Quest Pro を選択して [開発者モード] をクリックします。オンになっていることを確認します。
<img width="300![Inkedexplainquestpro1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/27947584-2b68-a464-ec76-8796b21d6a82.jpeg)
" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/27947584-2b68-a464-ec76-8796b21d6a82.jpeg">



２．PC側で設定の変更をします。

>- PC で Oculus アプリケーションを開き、[設定]、[一般] の順に移動します。提供源不明なソースをオンにします。現在の OpenXR ランタイムが Oculus に設定されていることを確認します。<img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/2ab9f8ea-91aa-f9d5-a8e6-69c3da478224.jpeg">



３．QuestPro側でアイトラッキングと自然な表情をONにします。
>- [設定] から[ベータ版]に移動します。開発者ランタイム機能をオンにしてから、Oculus Link でアイトラッキングをオンにし、Oculus Link で自然な表情をオンにします。
 >:::note warn
>アップデートでベータ版の機能ではなくなった可能性があります。
その場合、[設定] から[動きのトラッキング]へ移動し、各種設定をオンにします。
>:::
><img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/9c8f04a7-4a21-a2c9-d97e-de2c98c8abfa.jpeg">
><img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/856a0221-44b5-d876-419d-1b1531efd5ec.jpeg">




４.PC側でALXRのダウンロードと設定をします。
>- 最新の alxr-client-win-x64.zip をダウンロードして解凍します: https://github.com/korejan/ALXR-experimental/releases
><img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/0351512f-e371-b036-ca81-eea2fb317cd0.jpeg">
>
>※ダウンロード時に警告が出ますが継続してください。![スクリーンショット (227).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/38986f5e-f4b8-7f78-2b5c-2e7b5adee546.png)
>※zipファイルは右クリックしてすべて展開で解凍できます。![スクリーンショット (228).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/2cb07262-7c3a-8337-3221-7063c5359e0a.png)
>
>- alxr-client を右クリックして、ショートカットを作成します。ショートカットを使いやすい場所に移動してください。
><img width="700" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/dc5f56a4-fb39-d90c-36a8-33412aa866d3.jpeg">
>
>- 作成したalxr-client ショートカットを右クリックし、[プロパティ] をクリックします。 [リンク先] の最後にフラグ「 --no-alvr-server --no-bindings」 を追加し、適用します。コピー&ペースト推奨。
>![スクリーンショット (226).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/6186eaab-9ad0-c431-9ce5-788e2e5073ef.jpeg)




# Mod「QuestPro4Neos」を導入する
Modを導入するのが初めての方は[こちら](https://neosvrjp.memo.wiki/d/Neos%20Mod#content_2)。もしくは[こちら](https://youtu.be/mX-zYeaAUAc)（Steam版の設定のみ）。
そして、↓のModの最新版を既存のnml_modsフォルダに入れてください。
※2022/12/23現在、眼球の左右の動きが取れないです。

https://github.com/dfgHiatus/QuestPro4Neos/releases


# 起動手順
>1.SteamVRを起動します。

>2.作成したalxr-client ショートカットからalxr-clientを起動します。初回は警告が出るので許可しましょう。
><img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/50cebef6-c938-7ce0-90c3-20c8670ad0ee.jpeg"><img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/bde48737-9dc9-e4bd-1826-ed25b5a9ba69.jpeg">
><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/1cfda015-41fa-4ca9-3103-8f4e23e73855.jpeg">

>3.QuestProの画面が緑がかったネズミ色になるので、Questメニューを開いてデスクトップ画面に切り替えましょう。
メニューのリングに画像のようにSteamVRとalxr-clientのアイコンの両方が表示されていれば大丈夫です。
![OculusScreenshot1671721537.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/6c65333e-99b6-1b4c-a02a-7fdda2ab2322.jpeg)
>※alxr-clientがSteamVRで起動されてしまう場合は、上記の「ALXRを導入する」の2.のOpenXRランタイムのアクティブに設定がされていないと思われます。時々解除される人もいるらしいです。その都度押してください。

>4.Modを導入したNeosVRをショートカットから起動。
>※SteamVRで起動しなかったらこのツイートを参考にしてください。

https://twitter.com/linki_biotro9s7/status/1587343278835650560?s=20&t=Sq4E9BmXsT1O_i4bTu-veQ

> 5.まぶたが動けば成功です。
><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/1d9ef8bc-86a0-8cfc-4173-558cdff6b21e.jpeg">

# アバター側の設定
DevToolTipの使い方が分からない人には厳しいです。
>１．口を動かす。
>大体のアバターはCenteredRoot -> RootNode -> Bodyに表情のシェイプキーと、DirectVisemeDriverというコンポーネントが付いています。
>DirectVisemeDriverは喋った声をタイプ分けして、それに合った口の形のシェイプキーを動かしてくれるコンポーネントです。
>すでにフェイシャルトラッキングで口の動きは取れているので、DirectVisemeDriverのSourceをnullにしてください。(話した声に口を反応させたい人は消さなくて大丈夫です。)<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/de4a6382-0f63-cb91-f2cb-907aeced8726.jpeg">
>そして二つのコンポーネントをアタッチします。
/Users/Common Avatar System/Face/AvatarExpressionDriver
/Users/Common Avatar System/Face/AvatarMouthDataSourceAssigner
>
>アタッチできたら、
>AvatarMouthDataSourceAssignerのTargrtReferenceにDirectVisemeDriverのMouthTrackingSourceを掴んで入れます。
><img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/b1c7ac8d-1d28-b6bb-63ea-de70f83e7fbd.gif">
>また、AvatarExpressionDriverのブレンドシェイプを自動割り当てを押します。
><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/b1af0de6-beb3-9b8a-19fb-5854e579f474.jpeg">
>ほかのアバターをインベントリから出すなどして、設定したアバターを着替えなおせば口が動くようになります。

>2.目の動きを設定する。
人によっては、目を開いている状態でまぶたがぴくぴく動くと思います。これを直すために、目のCloseに閾値を設定しましょう。
![2022-12-23_02-14-49_AdobeExpress.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/c8f72e83-5c7d-8407-c4e5-db3a55ba1c88.gif)
>Headの下の階層(頭にGizmo当てて開くと早いです)にEye ManagerというSlotがあるので開きます。
>EyeLinearDriverというコンポーネントの、MinInputClosenessが目を閉じる最小の閾値で、MaxInputCloseness目を閉じる最大の閾値です。写真の赤枠の上が左目、下が右目です。自分は右目がぴくぴくしやすかったので閾値を高めに設定しました。
><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/87b1ef42-d3d0-4481-6abe-13a93df33807.jpeg">
>
>また、まぶたを閉じる速度が速すぎるので少し遅くします。
><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/34398cbe-f7e6-0cdc-498b-73591d1680ba.gif">
>EyeLinearDriverのOpenCloseTargetに入っているシェイプキーが、目の開閉に使われているものです。
>これを一度SmoothValueを経由させて数値の変更を滑らかにします。
>コンポーネントを一つアタッチします。
>/Transform/Drivers/SmoothValue<float>
>コンポーネント名の右横の「D」を押して複製します。
>二つSmoothValueが付いたので、Valueに右目と左目の瞬きのシェイプキーを掴んで入れます。(BodyのSlotにあるシェイプキーです。)
>Speedを設定します。高ければ高いほど瞬きの速度が上がります。自分は14です。
>TargetValueの文字を掴んで、右目は右の、左目は左のOpenCloseTargetに入れます。
><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/9c79d057-d62e-7711-c4bd-0de1150202d4.jpeg">
>これでまばたきが滑らかになります。

>3.その他の調整方法
>口の開閉などの閾値を設定したい場合はValueGradientDriverを使いましょう。
>/Transform/Drivers/ValueGradientDriver<float>
><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/9055ae15-ef83-9e5a-63e3-807099d3a5f9.jpeg">
>AvatarExpressionDriverのjawOpenに入っているものがあればそれをnullにした後に、ValueGradientDriverのTargetに入れましょう。
>そして、Pointsを追加して画像のようにした後に、Progressを掴んでjawOpenのTargetに入れましょう。
>これで口を開くのが段階的になりました。
>また、AvatarExpressionDriverのjawOpenとDirectVisemeDriverのaaは競合するので、口の大きく開けたときに、シェイプキー二つ分開い>てしまうことがあります。どちらかをnullにするか、ValueGradientDriverを二つ使って、下画像のようにしましょう。
><img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626996/bcad1bb5-070d-7df1-5193-f900f44c4171.jpeg">

# おわり
今回はQuestProでフェイシャル＆アイトラッキングする方法をまとめてみました。
本記事が誰かの役に立てば嬉しいです。
DeskTopFacialのやり方も記事にしてほしいと言われたのでそのうち書くかもしれません。
最後まで読んでいただきありがとうございました。

[りんき](https://twitter.com/linki_biotro9s7)