概要
Oculus QuestでビデオパススルーAPIが公開され、開発者でも利用できるようになったので試してみました。いくつか設定で(2021/08/13時点では)いくつかハマりポイントがあるのでメモしておこうと思います。これらについては@gtk2kさんと@korinVRさんのツイートを参考にさせていただきました。
実際にビルドして画面をキャプチャしてみたのが以下のツイート。
Oculus Questのビデオパススルーが使えるようになったみたいなので試してみた。 #Oculus #Unity #madewithunity pic.twitter.com/fIX75PFZaJ
— edom18@XR / MESON CTO (@edo_m18) 2021年8月13日
- 概要
確認するところとしては
— gtk2k (じぃてぃけぃ) (@gtk2k) 2021年8月12日
・Linear
・Vulkan消してOpenGLES3のみ
・ARM64
・IL2CPP
あとはAndroidManifest.xmlにあの2行と adb shell setprop ~
ですかね
Passthroughを有効化する
ドキュメントには以下のように記載があります。
※ 本記事の最後に書かれているサンプルシーンは設定済みになっているので、ここはあくまで既存プロジェクトを変更する際に必要になる処理です。
Implement Passthrough
Oculus Integration SDK for Unity contains the necessary APIs and settings to implement passthrough.
Prerequisites
- Download the latest Oculus Integration SDK from the Unity Asset Store or from the Oculus Integration SDK Archive page.
- Make sure the Oculus headset is using v31 or higher version. You can check this from Quick Settings > Settings > About and checking the Version number setting.
- Since Passthrough API is an experimental feature, put your device in Experimental Mode by using the following command: adb shell setprop debug.oculus.experimentalEnabled 1. This step needs to be executed after each reboot. Without this setting, passthrough will not show up in your app.
Enable Passthrough
An app needs to opt in to use passthrough. This is needed both for build-time steps (additions to the Android manifest) and to initialize system resources at runtime.
- From the Hierarchy tab, select OVRCameraRig to open the OVR Manager settings in the Inspector tab.
- Under the Experimental section, select Experimental Features Enabled and Passthrough Capability Enabled. These two options enable the build-time components for using passthrough.
- Under Insight Passthrough, select Enable Passthrough. This initializes passthrough during app startup. To initialize passthrough later, leave the checkbox unchecked and enable OVRManager::isInsightPassthroughEnabled from a script.
- Add an OVRPassthroughLayer script component to OVRCameraRig.
- The Projection Surface setting determines whether the passthrough rendering uses an automatic environment depth reconstruction or a user-defined surface.
- The controls in the Compositing section work the same as in OVRPassthroughLayer: depending on the Placement setting, passthrough will be composited as an overlay or as an underlay. If multiple layers are present including OVRPassthroughLayers, use the Composition Depth setting to define the ordering between the layers.
- Add multiple instances of OVRPassthroughLayer to your scene, each with its own configuration. A maximum of three instances can be active at any given time.
Player Settingを適切に設定する
Color SpaceをLinearに
Player Setting > Other Settings > Rendering > Color Space
を Linear
に変更します。
ArchitecturesをARM64に
Player Setting > Other Settings > Configuration > Target Architectures
を ARM64
に変更します。
Scripting BackendをIL2CPPに
Player Setting > Other Settings > Configuration > Scripting Backend
を IL2CPP
に変更します。
experimentalな設定を有効化する
adb
コマンドを利用して以下のフラグをオンにする必要があるようです。
$ adb shell setprop debug.oculus.experimentalEnabled 1
なお、ドキュメントに
This step needs to be executed after each reboot.
と書かれているように、リブートごとに実行する必要がある点に注意が必要です。
AndroidManifest.xmlに設定を追記する
ビデオパススルーを有効化するために、AndroidManifest.xmlに以下の2点を追加します。
<uses-feature android:name="com.oculus.experimental.enabled" android:required="true" /> <uses-feature android:name="com.oculus.feature.PASSTHROUGH" android:required="true" />
実際に自分がビルドした設定は以下です。これを Assets/Plugins/Android/AndroidManifest.xml
として保存します。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools"> <uses-feature android:name="com.oculus.experimental.enabled" android:required="true" /> <uses-feature android:name="com.oculus.feature.PASSTHROUGH" android:required="true" /> <application> <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application> </manifest>
Show Splash Screenをオンにする
どうも、この設定をオフにしているとパススルーAPIの初期化に失敗するよう。
あっ、解決しました! Project SettingsのShow Splash Screenがオフになってると初期化に失敗するみたいです。動作するapkファイルをいただいたので助かりました。ありがとうございます!
— こりん@VR (@korinVR) 2021年8月12日
Oculus Integrationをv31にupgrade
Oculus QuestのOSバージョンが31以上か確認
ビデオパススルーを利用するにはOSバージョンが31以上である必要があるので、使用しているQuestのOSがバージョンアップされているか確認します。
Passthroughシーンをビルド
Oculus Integrationが最新になっていれば、以下の場所にパススルー用のシーンが含まれているのでこれをビルドします。
これをビルドして実行すると、冒頭の動画のようなシーンを見ることができます。(もし初期化失敗している場合は3Dオブジェクトのみが見え、真っ暗な空間になってしまいます)
Oculus Questのビデオパススルーが使えるようになったみたいなので試してみた。 #Oculus #Unity #madewithunity pic.twitter.com/fIX75PFZaJ
— edom18@XR / MESON CTO (@edo_m18) 2021年8月13日