VRデモ編は完全仮想世界を作りましたが,ここからは現実空間と融合したツール(MR:Mixed Reality)を作ります.
MRでは以下の機能を使うので,まずそれを解説しつつ,MetaQuest3でVRデモ 1. VRゴーグルでUnity初期画面を映すから追加で必要な環境構築について説明します.
Passthrough
Metaquest3のカメラが現実空間を撮影してそれをVR空間に投影する機能.これだけでは映しているだけなので奥行等の判定はない.
また,Unityを介してマーカー認識等の画像処理を行うためにはまた別の処理がいるため後述する.
BuildingBlocksのPassthroughを使えば追加できる.CameraRigがすでにあれば自動的にそれに紐づき,無い場合は自動生成される.

Scene
屋内をMetaquest3の深度カメラを使ってメッシュ計測し,壁・床・天井・テーブルなどに自動認識・変換する機能
事前にMetaquest3で設定 > 環境設定 > スペースの設定 > スペースの設定で,対象の部屋のSceneをスキャンして取得する必要がある.
余談として,屋外では上手くスキャンができず現状屋内が対象.1度スキャンすればMetaquest3が現在どの部屋にいるか判定してくれる.
そして,https://assetstore.unity.com/packages/tools/integration/meta-mr-utility-kit-272450からMeta MR Utility Kitをダウンロードし,Unityのプロジェクトにインストールする.
Camera RigのInspectorを開き,OVR Managerを展開し,Quest Features > General内の「Scene Support」を「Required」にする.
同じくOVR Managerの一番下にある「Permission Requests On Startup」を展開し,一番下の「Scene」にチェックを入れる.


BuildingBlockのEffect Meshを追加すれば使える.Scene Meshもあるが,こちらだとSceneの読み込み等の制御に関わるMR Utility Kit (MRUK)が含まれないため,Effect Meshのほうを追加すること.
Effect Meshでは3Dモデルの表示方法(マテリアル)を変えたり,コライダーを設定できたりする.一番下のLabelsで壁や机だけに限定した適用も可能.Effect Meshは同一オブジェクトに複数つけられるので,壁や机で表示を変えることも可能.



Passthroughを追加した状態でビルドすると,現実空間に青白く透過した壁や床,家具の3Dモデルが位置合わせされた空間が映し出される.SF映画の世界観満載.
空間アンカー(Spatial Anchor)
現実空間と融合するとなると,VR空間の座標系を理解する必要がある.詳しくはUnity+MetaQuestのTips 1. 座標系についてを参照.
Metaquest3の座標系は,アプリ起動時のヘッドセットの位置と地面の位置を基準にローカル座標が定義される.
つまり,CubeのTransformをX=0,Y=1.5,Z=0.5と設定していたら,テーブルの前で起動しようがドアの前で起動しようが常に地面から1.5m,プレイヤーの目の前から0.5mにCubeが表示される.もし,部屋のどこで起動しても決まった位置(机に貼っているシールの位置など)にCubeを読み込みたい場合は別途処理をしないといけない.
そのようなときに空間アンカーを使用する.空間アンカーを保存するとUUID(Universally Unique Identifier)としてPlayer Settingに保存され,アプリを再起動してもUUIDを読み込むことで保存した際の位置に再配置が可能.
ただし,空間アンカーはSceneを読み込んだ空間でないと使用できない.
Camera RigのInspectorを開き,OVR Managerを展開し,Quest Features > General内の「Anchor Support」が「Enabled」になっている確認.
空間アンカーは主にスクリプトで処理されるため,詳しくは実例を示したMetaQuest3でMRデモ 1. 空間アンカーを使った位置情報の保存と読み込みで.