Oculus IntegrationからQuest Proの新機能を触ってみる(視線追従)

はじめに

エンジニアの松原です。運よくQuestProの発売日の直後(10/26)に届き、Quest2で積みっぱなしになっていた釣りゲームを週末やっていました。
ふと、最近Unity上でHMDを使った開発をしていないことに気づき、この機会にQuest Proの新機能に触れる目的で、久しぶりにOculus Integrationを利用しました。Unityの空のプロジェクトファイルから、視線追従機能を利用するまでの手続きを記事にしてみました。
今回利用した環境(+パッケージ)は以下の通りです。

  • Unity 2022.1.21f1
  • XR Plugin Management 4.2.1
  • Oculus XR Plugin 3.2.1
  • Oculus Integration 46
  • Windows Platformで実行

Quest Proを開発者モードにする

今回は直接UnityEditor上で動作しているアプリをQuestLink(旧OculusLink)経由でQuest Proの機能を利用することになるのですが、 Quest Proを開発者モードにしておく必要があります。開発者モードが有効になっていない場合、実行時にQuest Pro本体側に「com.oculus.bodyapiservice が停止しました」などのダイアログが出て、正常にQusetProの機能が利用できません。

Quest Proの端末自体を開発者モードにする方法として、スマホの「Meta Quest」アプリからQuest Proを登録しておき、開発者モードに切り替えます。

アプリのメニューから、デバイスをタップします。

ヘッドセットの設定の項目から、開発者モードの箇所をタップします。

開発者モードのトグルをONにします。

これでQuest Pro本体側の開発者モードは有効になりましたが、引き続き以下のQuestのアプリの設定を変更する必要があります。

PC側のOculusアプリでQuestLink(旧OculusLink)の設定を変更する

WindowsPC用のQuestアプリから設定を変更します。

設定 > ベータ のタブから、「開発者ランタイム機能」と「Oculus Link経由でのアイトラッキング」のトグルをONにします。

その他の項目は任意ですが、Quest Proの開発をしたい場合は周囲確認や自然な表情機能のトグルをONにしていても良いかもしれません。

QuestLinkを有効にする

QuestLinkに関してはQuest Pro本体側で操作する必要があるため、以下のURLを参考にしてQuestLinkを有効にしてください。 リンク先の内容は最新のものではないですが、QuestProの操作参考にはなると思います。

www.meta.com

以上でUnity以外のアプリ関係の設定は完了です。

必要なパッケージを追加する

ここからはUnityの作業になります。空のUnityプロジェクトを作成し、Package Managerから Oculus Integrationをダウンロード、インポートします。

続いてXR Plugin ManagementとOculus XR Pluginをダウンロードします。

Project SettingsのXR Plug-in ManagementからOculusのPluginを有効にします。

パッケージ関連の設定は以上で大丈夫です。

HMDを利用できるようにする

ここから最低限、HMDを動作させるための作業を行います。

OVRCameraRigをHierarcyにセットする

Oculus Integrationを使う場合、あらかじめ用意されているHMDのPrefabを利用することで簡単にHMDとして動作させることができます。 Assets > Oculus > VR > Prefabs 配下の OVRCameraRigをHierarchyにコピーします。

Unityを実行する

Unity Editor上で再生ボタンを押します。UnityのGame画面がHMDに追従していて、OVRCameraRig内のCenterEyeAnchorの数値が変わっていれば初期セットアップは成功しています。

確認が終わったらUnity Editor上での再生を止めます。

視線追従のスクリプトを追加する

Oculus Integration(version 46)にはOVR Eye Gazeというスクリプトが入っており、これを眼球として動かしたいGameObjectにアタッチすることで、Quest Proで取得した眼球運動をモデルにアタッチできます。

詳しくはMetaの公式サイトにこのスクリプトについて解説が載っています。

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

実際にはこのスクリプトだけだと制御が難しいため、フィルター処理を掛ける必要があるのと、まばたきの情報は取れないので、もう一つのフェーストラッキングの機能と組み合わせる必要が出てきそうです。 ここに関しては利用するモデルに大きく影響するため、具体的なフィルター処理の内容に関しては今回割愛させていただきます。

できたもの

今回キャラクターにSDユニティちゃん © UTJ/UCLを利用させていただきました。

取得した眼球運動そのものをアニメ長のモデルに直接あてはめてしまうとモデルが破綻してしまうため、今回はかなり強めにフィルタ処理を掛けています。そのため眼球運動の変化が分かりづらくなっていますね。 他、目蓋の開き具合が変わらないため、不自然さが残っているため、次回やるとしたら綺麗に見えるようにフェーストラッキングによる調整も掛けることを検討したいです。

さいごに

Quest Pro単体でアイトラッキングや表情検出、またはボディトラッキングなどできるようになることが増える反面、細かい調整に関してはやはりエンジニアが行っていく必要がありそうです。
引き続きQuest Proのキャッチアップを続けていきたいです。