MRが楽しい

MRやVRについて学習したことを書き残す

MetaQuestProでMRTKを使って物理空間のシーンモデルを利用して仮想オブジェクトを床や壁に干渉させる

本日は MetaQuestPro の技術調査枠です。
MetaQuestProでMRTKを使って物理空間のシーンモデルを利用して仮想オブジェクトを床や壁に干渉させる手順を記事にします。

前提条件

以下の記事と同様の手順でプロジェクトの基本設定を実施します。
bluebirdofoz.hatenablog.com

シーンモデル

シーンモデルは MetaQuestPro で利用できる物理空間のモデルです。
ユーザが手動で床、天井、壁、机などのシーンアンカーを作成することで物理空間のオブジェクトを仮想空間に取り込むことができます。
シーンモデルの構築はルームの設定を利用することで実施することができます。
Unity Scene Overview | Oculus Developers

シーンモデルを利用する

シーンモデルをアプリで利用するには以下の作業が必要になります。
・シーン内に OVRSceneManager を設定する
・OVRProjectConfig でアンカーサポートを有効化する

背景のパススルーの設定を行う

シーンモデルをする際、実際の物理空間の映像を合わせて見たいので以下の記事を参考にパススルーの設定も実施してください。
bluebirdofoz.hatenablog.com

今回は上記の記事で作成したハンドインタラクションのサンプルシーンにパススルー設定したプロジェクトをベースに利用しました。

シーン内に OVRSceneManager を設定する

MetaQuestPro アプリでコンポーネントが呼び出されるように OVRCameraRigPrefab に OVRSceneManager を設定します。

Assets/Oculus/VR/Prefabs 配下にある OVRSceneManager.prefab を本プレハブに追加します。
これで起動時に OVRSceneManager.prefab に設定された OVRSceneManager コンポーネントが起動します。

今回は壁や床に当たり判定を設定するため、以下の通り OVRSceneManager コンポーネントを設定します。
・[Plane Prefab]に Assets/Oculus/SampleFramework/Usage/Scenemanager/Prefabs/InvisiblePlane.prefab を設定する
・[Volume Prefab]に Assets/Oculus/SampleFramework/Usage/Scenemanager/Prefabs/InvisibleVolume.prefab を設定する

OVRProjectConfig でアンカーサポートを有効化する

トップオブジェクトに設定されている OVRManager コンポーネント内の Quest Features を開きます。
[Anchor Support]を[Enabled]に設定します。

Profile設定の確認

変更した prefab が Profile の[OVRCameraRigPrefab]に設定されていることを確認します。

ビルドと動作確認

これで設定は完了です。
[File -> BuildSettings...]からビルドとデプロイを実行します。

自作アプリのデプロイと実行に関する手順は以下の記事を参照ください。
bluebirdofoz.hatenablog.com

MetaQuestPro でデプロイしたアプリを起動します。
シーンモデルが設定されていない場合、以下のルーム設定のダイアログが表示されます。

[次へ]をタップすると初めに壁の設定を求められます。

案内に従い、部屋全体の壁の輪郭を設定します。

壁の設定が終わると更に追加で机、ドア、窓などの設定を行うこともできます。
今回は壁と床の当たり判定が取れれば十分なのでこれで[終了]しました。

ルームの設定が完了すると、アプリが起動します。

これで物理空間が認識できるため、仮想オブジェクトが床や壁に干渉するようになります。

なお、既にシーンモデルの構築を実施済みの場合は特にルームの設定を要求されることなくアプリが起動します。