はじめに
2020/10/13にOculus Quest2が発売されました。
値段が手ごろでスペックも高く、面倒なケーブルの接続も無いので、
これを気にHMD所持者が増えたのではないかと思います。
ちなみに、社内では結構増えました。
そんなQuest2ですが、最近の開発環境はどうなっているのか、
まとめてみました。
※Quest2の詳しいスペックについては、他記事でたくさん紹介されてますので省略します。
画面キャプチャー
開発者としてはまず実機を手に入れたら、
どうやってスクリーンショットや録画を出来るのか気になると思います。
やり方がいろいろあるのでまとめてみました。
ホーム画面
主にシェアから各操作を行うことが出来ます。
スクリーンショット
PC/Quest 2/内部共有ストレージ/Oculus/Screenshots
スクリーンショットはここに保存されます。
録画
PC/Quest 2/内部共有ストレージ/Oculus/VideoShots
録画はここに保存されます。
ミラーリング
Quest実機でミラーリングを選択後、Oculusアプリを入れているモバイル端末側で 上記のような設定で可能です。
なるべく標準機能で大画面に映したい時は、下記のようなやり方で行えます。
- Android × Windows
- iPhone × Mac
Oculus Link
Oculus Linkの事に関しては、この記事では省略します。
スクリーンショット
メニューバーの右端の方にポインターを当てると、シェアメニューが表示されます。
PC/ピクチャ/スクリーンショット
PCに保存され、通常はここに保存されます。
C:/Users/<ユーザー名>/OneDrive/%E7%94%BB%E5%83%8F/スクリーンショット
OneDriveの設定がされていると、ここに保存されるみたいです。
録画とミラーリング
まだ、Oculus Linkがベータ版のためか出来ないです。
後述する Oculus Developer Hub を使ってなら出来ます。
Oculus Developer Hub
2020/09/16に公開されたばかりの開発者ツールです。詳細は後述します。
このツールでも、スクショや録画、キャストが行えます。
C:/Users/<ユーザー名>/AppData/Roaming/odh/captures
PCのここに保存されます。
このツールでキャプチャーすると、複眼の画像になります。
キャストの場合は単眼です。
Oculus Integration
言わずと知れた、Oculus開発の定番ライブラリですね。
開発方法はこの方のサイトがとても詳しいので省略します。
今回はQuest2向けに何か増えたのかちょっと見ていきます。
今のところはQuest2にしか出来ないという機能はなさそうです。
ちなみに、要望が多そうなパススルーAPIはまだ提供されていませんでした。
開発環境
- OculusIntegration 20.1.0
- リリース日:2020/10/05
- 20.1.0からQuest2正式サポートです。
- Unity2020.1.6f1
- 確認ハード:Oculus Quest2
この組み合わせでおおむねのサンプルは動きました。
OVR Manager
TargetDeviesにQuest2の表示があるのが確認できます。
Rift S が消えているような気がするのですが、2021年に販売が終了するからかもしれないですね。
public enum SystemHeadsetType
{
None = OVRPlugin.SystemHeadset.None,
// Standalone headsets
Oculus_Quest = OVRPlugin.SystemHeadset.Oculus_Quest,
Oculus_Quest_2 = OVRPlugin.SystemHeadset.Oculus_Quest_2,
Placeholder_10 = OVRPlugin.SystemHeadset.Placeholder_10,
Placeholder_11 = OVRPlugin.SystemHeadset.Placeholder_11,
Placeholder_12 = OVRPlugin.SystemHeadset.Placeholder_12,
Placeholder_13 = OVRPlugin.SystemHeadset.Placeholder_13,
Placeholder_14 = OVRPlugin.SystemHeadset.Placeholder_14,
// PC headsets
Rift_DK1 = OVRPlugin.SystemHeadset.Rift_DK1,
Rift_DK2 = OVRPlugin.SystemHeadset.Rift_DK2,
Rift_CV1 = OVRPlugin.SystemHeadset.Rift_CV1,
Rift_CB = OVRPlugin.SystemHeadset.Rift_CB,
Rift_S = OVRPlugin.SystemHeadset.Rift_S,
Oculus_Link_Quest = OVRPlugin.SystemHeadset.Oculus_Link_Quest,
PC_Placeholder_4102 = OVRPlugin.SystemHeadset.PC_Placeholder_4102,
PC_Placeholder_4103 = OVRPlugin.SystemHeadset.PC_Placeholder_4103,
PC_Placeholder_4104 = OVRPlugin.SystemHeadset.PC_Placeholder_4104,
PC_Placeholder_4105 = OVRPlugin.SystemHeadset.PC_Placeholder_4105,
PC_Placeholder_4106 = OVRPlugin.SystemHeadset.PC_Placeholder_4106,
PC_Placeholder_4107 = OVRPlugin.SystemHeadset.PC_Placeholder_4107
}
同じくOVRManagerより、SystemHeadsetTypeから、Quest2か? OculuLinkか?の条件分岐が可能です。
コントローラーのモデル
Quest2用のコントローラーモデルも用意されています。
Assets/Oculus/VR/Meshes/OculusTouchForQuest2
にあります。
後述するMRTK2.5でコントローラーを表示したい時はこれを使用します。
ハンドのモデル
ハンド用のモデルも用意されています。
Assets/Oculus/VR/Meshes/HandTracking
にあります。
こちらも、後述するMRTK2.5でハンドを表示したい時はこれを使用します。
Oculus Developer Hub
先述した画面キャプチャーにも少し登場しましたが、
PC上で開発者向けに便利なことが行えるツールです。
Hololens開発に慣れている人なら、デバイスポータルみたいな感じです。
- 主に以下のことが出来ます。
- 画面キャプチャー(スクショ、録画、ミラーリング)
- ADB無線化(画面キャプチャーも無線で出来ます。)
- 近接センサー On/Off
- OVRメトリクス On/Off
- apkのインストールや起動。
- SDKや開発アプリの管理
- 開発者ブログや各マニュアルの外部リンク
個人的には、無線で画面のキャストが出来たり、
近接センサーをOffにすることによって、スリープを防げたり出来るのが 重宝しています。
- 詳細は以下の方たちが詳しいので省略します。
注意事項
ログインアカウント
こちらのトラブルシューティングより、
Quest実機とOculus Develper Hubのアカウントは共通 でないと使えない
ので注意してください。
なお自分の時はなぜか、パスワードを一度変更しないとログイン出来なった
です。
Questアカウントを持っていなくて、Facebookアカウントで直接作成した場合そうなる可能性があると思います。
OVRメトリクス
実機でパフォーマンスを確認できる便利ツールですが、
この開発者によって、スクショや画面キャストが出来なくされています。
パフォーマンスの状態をそのまま画像で保存が出来ず、
スクショを撮った場合は、綺麗にこのOVRメトリクスの部分が表示されないです。
※直接スマホで撮影とかは出来ます。
PC/Quest 2/内部共有ストレージ/OVRMonitorMetricsService/CapturedMetrics
OVRメトリクスツールを実機で起動して、csvを吐き出す設定をすることで、 このディレクトリで確認は可能です。
MRTK 2.5
Microsoftが提供しているMixedRealityToolkitという、
Hololens開発者なら馴染みのライブラリです。
実は、スマホ開発や他HMDの開発もこれで出来たりします。
今回は、2.5からMRTK-Questを使わずとも、Oculus Questに
正式対応になったのでそこを見ていきたいと思います。
ちなみに、2.5からPackageManagerからインポート出来るようになりました。
開発環境
- Unity 2020.1.6f1
- OculusIntegration 20.1.0
- MRTK 2.5.1
- 確認ハード:Oculus Quest2
ドキュメントに漏れがある?
こちらの公式ドキュメント 通りにやれば大体できますが、
- 以下のissueの用に
OculusXRSDKDeviceManager
のOvrCameraRigPrefab
とLocal Avater Prefab
がNoneのままでエラーが出て、この説明がされていないと言われています。
問題はMixed Reality Toolkit -> Utilites -> Oculus -> Integrate Oculus Integration Unity Mocules
を実行した時に起きてまして、
一度目はたくさんのWaringが出て、ここがNoneのままの可能性が高いです。
このIntegrate Oculus Integration Unity Mocules
を2回目?実行すると、Waringが出ずに設定されます。Unity2020のバグかもしれないと言われています。
上手くいかない方は確認してみて下さい。
オブジェクトの位置が低い時の対処
- 先ほどの、”Integrate Oculus Integration Unity Mocules”で生成された”MRTK-Quest_OVRCameraRig”をそのままでは設定変えられないので、Prefab化します。
- Tracking Origin Type がデフォルトで強制的に”Floor Level”にされて、ガーディアンで設定した床を基準にされるので、”Eye Level”に変更します。
コントローラーの表示を変える
MixedRealityTookit -> Input -> Controllers -> Add A New Controller Definition より基本的に設定出来ます。
- Quest2のコントローラーを表示する。
- Contoller Type -> OculusXRSDKTouchContoroller
- Override Model -> OculusTouchForQuest2<Left or RIght>Model
- HandednessをLeft , Right それぞれ設定
コントローラのモデルは先述したOculus Integrationに入っています。
- 手を表示する。(※ハンドトラッキング中の手では無いです。)
- Controller Type -> OculusHand
- Override Model -> OculusHand_<L or R>
ハンドのモデルは先述したOculus Integrationに入っています。
※ここのOculusHandは設定しても変化が無かったです。
まとめ
Quest2を基準に調べてみて、
開発方法自体はそんなに変わらずに、選択肢が増えたという感じかなと思いました。
個人的には、Oculus Developer Hubが出たのが一番大きかったです。
今後の開発の必須ツールになると思います。
このまとめが少しでも誰かの参考になったら幸いです。