Unity+Oculus Go開発メモ

最終更新日:2018年11月25日

UnityでOculus Go対応アプリを開発する方法やTipsをまとめています。

更新履歴

(2018年11月25日)最初のビルド方法をOculus Integrationを使用するよう書き換え
(2018年11月18日)Oculus Integrationに簡単に対応
(2018年5月12日)とりあえずページを作成


UnityでOculus Go対応アプリを作るには

UnityのOculus Go対応の概要について

Unityは標準でOculus Goに対応しています。Oculus GoはAndroidベースですので、プラットフォームをAndroidにしてVRサポートを有効するとOculus Goで動作するアプリをビルドできます。

さらに、Oculus GoやOculusプラットフォーム固有の機能を使用したい場合や、Oculusストアにリリースできるアプリを作る場合は、Asset StoreにあるOculus IntegrationをインポートしてMain CameraをOVRCameraRigプレハブに入れ替えます。基本的にはOculus Integrationを使用するのがいいと思います。

Oculus Integrationは新しいバージョンのUnityに対応していないことがあります。Compatibility and Version RequirementsのページでサポートしているUnityのバージョン一覧を確認できます。

Oculus Goを開発者モードにする

Oculus Goで自作のアプリが動くようにするには、「開発者モード」にする必要があります。スマートフォンにインストールしたOculusアプリの右下の「設定」をタップし、接続されているOculus Goをタップで開いて「その他の設定」をタップすると「開発者モード」が出てきますのでオンにしてください。

PCにUSBケーブルで接続すると、Oculus Goの画面に「USBデバッグを許可しますか?」というダイアログが開きますので許可します。

Oculus Goアプリをビルドするには

Oculus GoはAndroidベースですので、UnityのAndroidビルドを使用します。

Unityで新規プロジェクトを作成したら、以下の手順を行います。

  • Build SettingsでプラットフォームをAndroidに変更する
  • Asset StoreにあるOculus Integrationをインポート
  • Build SettingsのTexture Compression(テクスチャの圧縮方式)をASTCに変更する
  • Player Settings…で、Minimum API Levelを「Android 4.4 ‘KitKat’ (API level 19)」以上に変更する
  • Package Nameの「com.Company.ProductName」のCompanyとProductNameを適当な組織名とプロダクト名で書き換える
  • XR Settingsにある「Virtual Reality Supported」をチェックして、右下の+ボタンを押してOculusを追加する

ProjectビューのOculus/VR/Scenes/Cubesシーンを開いて、Build Settingsを開き、プロジェクト初期状態のSample Sceneを削除してAdd Open ScenesでCubesシーンに入れ替えてください。

Oculus Goを接続して、Build SettingsウィンドウでBuild and Runボタンを押し、適当な.apkファイルを指定してビルド・実機に転送します。初回ビルド時にCompiling shader variantsでOVR Avatar関連の多数のシェーダーのビルドが走りますが、2度目以降はキャッシュされます。

実機に転送したアプリは、Oculus Goの ライブラリ>提供元不明のアプリ で選択実行できます。

動かない場合は

UnityのPlayer SettingsのXR Settingsにある「Virtual Reality Supported」がオンになっているか、またVirtual Reality SDKsでOculusが有効になっているか確認してください。


開発Tips

描画設定やアンチエイリアスについて

フォワードレンダリングにして、Quality SettingsでAnti Aliasingを2xか4xのMulti Samplingに設定するのが基本になりそうです。ほか、

  • Single-Pass Stereoレンダリングにする
  • Enable Adaptive Resolutionをオフにする
  • Dynamic BatchingとStatic Batchingをオンにする(Graphics Jobsは使わないこと)

が基本設定として推奨されています。

(要調査:リニアカラースペースが使用できるか)

Fixed Foveated Renderingを使用するには

Fixed Foveated Renderingは、視野の中心部のみを高解像度で描画し、ピクセル描画負荷を減らすOculus Go固有の機能です。設定の変更方法です。

OVRManager.tiledMultiResLevel = OVRManager.TiledMultiResLevel.Off/LMSLow/LMSMedium/LMSHigh;

Qualcomm 821 SoCのタイルレンダリングで視野の端の方のタイルの描画解像度を下げることによって、ピクセル描画負荷の重いアプリで描画が25%程度軽量化されるとのことです。シンプルなシェーダのアプリやGPUバウンドになっていないアプリでは恩恵を受けられないとのことです。詳細の解説がこちらにあります。

72Hzモードについて

以下のコードでリフレッシュレートを72Hzに変更できます。

OVRManager.display.displayFrequency = 72f;

24フレーム/秒の動画を再生する場合などに、リフレッシュレートが整数倍となるため再生がなめらかになるメリットがあるようです。

パフォーマンスについて

CPU・GPUの使用率を調べるには

Oculus GoをUSB接続すると、adb logcatコマンドでGPU・CPU使用率が1秒ごとに以下のような形式で報告されます。

05-12 22:54:04.287  1356 16647 I UtilPoller: GPU Util 0.254183 / CPU Util 0.473684 (avg 0.276316)

grepが使用できる場合はadp logcat | grep UtilPoller等でフィルタすると便利です。

CPUとGPUのスロットリングについて

以下のAPIでCPUとGPUのパフォーマンスレベルを設定できます。

OVRManager.cpuLevel = 2;
OVRManager.gpuLevel = 2;

パフォーマンスレベルはCPU、GPUそれぞれ0から3(Oculus GoはGear VRより放熱が良いためレベル4が存在するとのこと。未調査)の値で設定し、0が最も低クロックでバッテリー消費・発熱が低く、3が最も高クロックでバッテリー消費・発熱が高くなります。デフォルト値はCPU、GPUともに2です

なお、Gear VRではこの値をマニュアルで設定しましたが、Oculus Goではこの値をベースラインとしてフレームレートが落ちないようにCPU・GPUの動的なスロットリングが行われるようです。

パフォーマンスチェック等でこの動的なスロットリングが邪魔な場合は

adb shell setprop debug.oculus.adaclocks.force 0

でオフにします。再起動するか、debug.oculus.adaclocks.force 1で元に戻ります。

詳細の解説が下記ページにあります。

OVR Metrics Tool

OVR Metrics Toolを使用するとパフォーマンスグラフを表示でき、「adb shell setprop」でパフォーマンスグラフの表示や描画設定を変えるとパフォーマンス・チューニングに便利とのことです(詳細は下記ページの下のほうを参照してください)。

Oculusストアでのアプリ配信について

Oculus Developer Dashboard for Gear VRでサブミット。Gear VRとOculus Goどちら(あるいは両方)に配信するかを選択、Oculus Goで使用できない機能を使っていた場合、Oculus Goには配信できない(アプリをアップロードするときに自動的に通知される)とのことです。その他参考ページ。

Gear VRとの互換について

Oculus GoはGear VRとバイナリ互換となっています。ただし、

  • Google Play Servicesがない
  • カメラがない
  • ヘッドセット右側面のタッチパッドがない
  • Gear VRのコントローラと形状が違う(入力は同じ)

といった違いがあります。


参考リンク

書いた人:こりん(@korinVR
VR開発メモトップ