Quest2上で動作するパススルーモードを試す

f:id:fb8r5jymw6fd:20210815173323j:plain

はじめに

エンジニアの松原です。先日社内でVarjo XR-3が導入され、今後はハイエンドなXRコンテンツが作っていけそうです。最近はAR/MR関連も業界で活発化しているのを見かけており、さらに楽しみが増えました。

それに関連して、先日Oculus Integration SDKがアップグレードされたのですが、ついに実験的機能としてパススルーモードが追加されました!

早速試してみたのですが、ビルドの際に気を付ける箇所があったので、備忘録的に記事としてまとめました。

Oculus Integration v31について

2021/08/12にリリースされたOculus Integration SDK v31には大きな変更がありました。

  • Passthrough APIが実験的機能に追加された
  • (Quest/Quest2のOSに)Vulkan検証レイヤが利用できるようになり、今後のアプリケーション開発にVulkanでの開発が推奨される
  • Unity上で動作するOVRPluginがOpenXR backendがデフォルトで有効になったこと

OVRPluginのバックエンドがOpenXRベースのものに変わったものも含め、以下にUnityでのQuest2向けのパススルーモードを有効にする設定までの手順をまとめてみました。

XR Plug-in ManagementとOculus XR Pluginをインストール

OpenXR backendを利用する場合、XR Plug-in ManagementOculus XR PluginをPackage Managerに追加する必要があります。

Unity2019~2021ではProject SettingsのGUIから追加することができます。一番下の項目にXR Plugin Managementの項目から、下図のボタンを押します。

f:id:fb8r5jymw6fd:20210814150634p:plain
XR Plugin Managementの項目から追加できる

しばらく待つと自動的にXR Plug-in Managementが利用できるようになります。続けてOculus XR Pluginも追加します。下図のようにXR Plugin ManagementのPlug-in Providersのリストのうち、Oculusにチェックを入れます。チェックを入れたら自動的にプラグインが追加されます。

f:id:fb8r5jymw6fd:20210814151736p:plain
Oculus XR PluginのチェックボックスをONに

Oculus Integrationをインストール

これらのパッケージが追加できたら、Oculus Integrationの最新版のv31をPackage Managerからアセットをダウンロード、インポートします。

f:id:fb8r5jymw6fd:20210814145634p:plain
Oculus Integrationのインポート

Unity2019をお使いの場合、バックエンドがOpenXRベースのものになっていないので、メニューバーの Oculus > Tools > OpenXR > Switch to OVRPlugin with OpenXR backend を選択し忘れないよう注意してください。 (Unity2020や2021ではデフォルトでOVRPluginがOpenXR backendを使うように変更されましたので、そのままで大丈夫です。)

f:id:fb8r5jymw6fd:20210814153303p:plain
Switch to OVRPlugin with OpenXR backend を選択する

ビルド設定を変更する

Project SettingsのPlayerのOther Settingsの設定を変更していきます。

Color SpaceLinear に変更します。

f:id:fb8r5jymw6fd:20210814153642p:plain
Color SpaceをLinearに変更

Graphics APIはOpenGLES3、VulkanいずれかでもPassthrough APIは動作するようですが、v31ではVulkan APIの利用が推奨されているようなので、せっかくなので Auto Graphics API のチェックを外し、Vulkan を利用するように変更します。

f:id:fb8r5jymw6fd:20210814154534p:plain
Vulkan APIを使うように変更

v31のパッケージではPassthrough APIではARM64ビルドでないと動作しないようで、そのためには Scripting BackendIL2CPP に変更したうえ、ARMv7 のチェックを外し、 ARM64 の箇所にチェックを入れます。

f:id:fb8r5jymw6fd:20210814153836p:plain
IL2CPPに変更、Target ArchitectureをARM64に変更

シーン中にあるOVRCameraRigのパススルーモードを有効にする

パススルーモードを利用するにはUnityのScene中にあるOVRCameraRigの設定を変更する必要があります。今回は Assets/Oculus/SampleFramework/Usage/Passthrough/Scenes 配下にある AugmentedObjects のシーンをサンプルとして利用します。

f:id:fb8r5jymw6fd:20210814155006p:plain
AugmentedObjectのシーンを開く

Hierarchyにある OVRCameraRig を選択します。

f:id:fb8r5jymw6fd:20210814155145p:plain
OVRCameraRigを選択

インスペクタにある OVR Manager (Script)Experiment Features EnabledPassthrough Capability Enabled にチェックを入れ、Enable Paththrough にもチェックを入れます。

f:id:fb8r5jymw6fd:20210814155302p:plain
Passthrough関連の項目にチェックを入れる

他、サンプルからでなく、一から自分のアプリをパススルーにする方法に関しては追加で以下の記事を参考にしてください。 https://developer.oculus.com/experimental/passthrough-api/

設定後、シーンを保存アプリをビルドして実機に転送します。

ADBコマンドからQuest2実機側のパススルーモードを有効にする

2021/08/13日時点だと、パススルーモードの有効/無効設定はADBコマンドからしか変更できないようです。

PCとQuest2をUSBケーブルを使って接続した状態で、ADBコマンドが利用できるPC環境で、以下のコマンドを実行します。

adb shell setprop debug.oculus.experimentalEnabled 1

※Quest2を再起動するたびに上記コマンドが必要になるようです(パススルーモードが無効になるようにリセットがかかるみたいです)。

実行画面例

f:id:fb8r5jymw6fd:20210814160352p:plain
実機での実行画面
※Quest2の本体のセキュリティで静止画や動画キャプチャをすると真っ暗になるようなので、実機のレンズにスマホを押し当てて撮影しています。

試した所感など

パススルーモードは現在実験的機能で、まだ本機能として実装されるか不明ですが、Quest2があればAR/MRコンテンツが体験できるようになりそうで嬉しいです。

また、Graphics API が 本格的にVulkanに移行されることも期待され、パフォーマンスの向上が期待でき、今後の開発が楽しみです!

お知らせ

Synamonでは現在Unityエンジニアやサーバーサイドの採用を積極的に行っております!Unityの開発経験がある方をお待ちしております!

ご自身のキャリアプランに合わせて役職を選べます!詳しくは以下の求人を見ていただけると嬉しいです!

herp.careers