Unity+Oculus Quest 開発メモ

最終更新日:2019年06月09日

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

更新履歴

(2019年6月9日)とりあえずページを作成


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

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

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

さらに、Oculus Quest や Oculusプラットフォーム固有の機能を使用する場合は、Asset StoreにあるOculus IntegrationをインポートしてMain CameraをOVRCameraRigプレハブに入れ替えます。基本的にはOculus Integrationを使用します。

Compatibility and Version Requirements のページでサポートしている Unityのバージョンを確認できます。

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

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

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

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

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

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

  • Build SettingsでプラットフォームをAndroidに変更する
  • Player Settings… で Graphics APIs の Vulkan を削除する
  • Asset StoreにあるOculus Integrationをインポート(OVRPlugin をアップデートするダイヤログが出たら従う)
  • 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/Room シーンを開いて、Build Settingsを開き、プロジェクト初期状態のSample Sceneを削除してAdd Open Scenesで入れ替えてください。

Oculus Questを接続して、Build SettingsウィンドウでBuild and Runボタンを押し、適当な.apkファイルを指定してビルド・実機に転送します。初回ビルド時にCompiling shader variantsでOVR Avatar関連の多数のシェーダーのビルドが走りますが、2度目以降はキャッシュされます。成功するとアプリが起動し、コントローラーのサムスティックで移動や回転ができます。

実機に転送したアプリは、Oculus Questの ライブラリ>提供元不明のアプリ に格納され、いつでも実行できます。

動かない場合は

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

エディタで簡単に開発するには

Oculus Rift がある場合は Rift を使って Editor でプレビューするのが簡単です。Platform を Android にしたままで Editor を再生すれば Rift で動きます。


開発Tips

位置トラッキングをリセットするには

コントローラーのトリガーを引くと位置トラッキングをリセットするサンプルスクリプトです(Oculus Quest では Oculus ボタンを長押しするとリセンターされるので Rift と比べて使う機会は少ないかもしれません)。OVRInput を使っているので、OVRCameraRig が必要です。

using UnityEngine;

public class Recenterer : MonoBehaviour
{
    void Update()
    {
        if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger))
        {
            OVRManager.display.RecenterPose();
        }
    }
}

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

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

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

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

ほかこちらのページがとても参考になります。

Fixed Foveated Renderingを使用するには

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

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

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

パフォーマンスについて

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

Oculus Questを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 のようにしてフィルタすると便利です。

OVR Metrics Tool

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

運用 Tips

Guardian の表示を切るには

Settings > See All > Developer > Guardian でガーディアンの表示を切ることができます。安全のため警告メッセージが表示されます。

ビルド・転送したアプリをアンインストールするには

Oculus Quest の「提供元不明のアプリ」でリストされているパッケージ名を確認して、

adb uninstall [パッケージ名]

を実行してください。


参考リンク

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