先日、フルカラーのパススルー機能が話題の Meta Quest Pro が発表されました。
そこで今回は、Meta Quest の複合現実 (Mixed Reality / MR) 機能である パススルー と シーン を試してみたいとおもいます。
※ (2023-10-12 追記) こちらの記事に記載されている設定手順ですがすでに古い情報となっています。最新版 (v57) の Oculus Integration ではこのあたりの設定がとても簡単にできるようになっています。詳細については Meta Quest 3 の Global Mesh を試す をご参照ください。
Meta Quest の Mixed Reality の仕組み
Meta Quest は「パススルー」と「シーン」という仕組みにより、「あたかも現実世界にバーチャルなオブジェクトが存在する」という複合現実 (MR) の体験をもたらします。
パススルー
パススルーは、ヘッドセットの中から現実世界を見るための機能です。これにより、現実世界上にバーチャル空間を重ねて表示することができます。Meta Quest 2 では白黒表示ですが、Meta Quest Pro ではカラー表示になります。
シーン
シーンは現実世界に存在する壁・床・天井・机などの家具に関する情報をバーチャル空間に取り込んでバーチャル空間上で表現する機能です。これにより、バーチャルなオブジェクトを現実世界の机の上に置いたり、バーチャルなキャラクターを現実世界の床の上で歩かせたりといったことができます。
なお現時点(2022年10月)ではまだ現実世界の情報を自動で取り込む機能はありません。ユーザーが明示的に「壁はここからここまで、机はこの範囲…」という形でルーム設定を行う必要があります。この設定は現在のバージョン (Meta Quest v46) では「設定 - 試験中 - ルーム設定」で行います。
「とりあえずどんなものか試してみたい」という場合は、The World Beyond というデモアプリで体験できます。このアプリが具体的にどんなつくりになっているかを知りたい場合は、GitHubでソースコードが公開されているのですぐに確認できます。
DIYしてみる
今回は、以下の動作をするシンプルなアプリケーションをUnityで作ってみたいと思います。
- パススルー機能で現実世界が見える。
- (未設定の場合)アプリケーションの中からルーム設定機能を呼び出す。
- 現実世界のオブジェクト(机や壁)をUnityのオブジェクトとして表示させる。
スクリプトは一行も書かずにできるので、結構お手軽です。
セットアップ
最初に Meta Quest 用のプロジェクトを作成して Meta Quest 用にプロジェクトを設定します。やることは以下3つです。
- Oculus Integration の最新版をプロジェクトにインポートする。
- 途中いくつかダイアログで質問されますが、全部左側のボタンクリックしておけば大体オッケーなはず…
- 公式ドキュメントの「Unity設定を構成する」の内容に従って Meta Quest 用のプロジェクト設定を行う。
- とりあえず試してみるだけならば、「Androidマニフェストファイルを生成する」はスキップ可能のはず。
- Project Settings - Player の Configuration - Scripting Backend で IL2CPP を選択し、Target Architectures は ARM64 だけ をチェックする。
OVRCameraRigの設定 (パススルー設定)
以下の手順で OVRCameraRig を設定します。
- シーンに存在する Main Camera を削除します。
- Project タブで OVRCameraRig プレハブを検索してシーンに追加します。
- OVRCameraRig をインスペクタで開いて以下の設定を行います。
- OVRManagerコンポーネントで以下の設定を行います
- Anchor Support を Enabled に設定
- Passthrough Capability Enabled にチェックを入れる
- Insight Passthrough - Enable Passthrough にチェックを入れる
- Add Component をクリックして、OVRPassthroughLayer コンポーネントを追加し、以下の設定を行います。
- Placement を underlay に変更
- OVRManagerコンポーネントで以下の設定を行います
- OVRCameraRig - TrackingSpace - CenterEyeAnchor をインスペクタで開いて、Camera コンポーネントに対して以下の設定を行います。
- Clear Flags を Solid Color に
- Background を黒色に
OVRSceneManager の設定 (シーン設定)
- Project タブで OVRSceneManager プレハブを検索してシーンに追加します。
- OVRSceneManager をインスペクタで開いて以下の設定を行います。
- Project タブで Plane プレハブを検索して、Plane Prefab に設定(ドラッグ&ドロップ)します。
- Project タブで Volume プレハブを検索して、Volume Prefab に設定(ドラッグ&ドロップ)します。
この設定で実行すると、壁・天井・床など平面として表現できるオブジェクト Plane プレハブが貼り付けられ、机などは Volume プレハブとして表示されます。
ビルドと実行
Build Settings に現在のシーンを追加してビルドし、Quest にインストールして起動します。
アプリを起動した際に、それまで一度もルーム設定をやっていない場合は、以下のようにまずルーム設定機能が自動的に呼び出されます。
ルーム設定が終わると Plane プレハブや Volume プレハブから作成されたオブジェクトが壁等に張り付けられていることが確認できます。
OVRSceneManager に設定するプレハブ
Assets/Oculus/SampleFramework/Usage/SceneManager/Prefabs
には、
Plane, Volume プレハブ以外に、InvisiblePlane, InvisibleVolume という名前のプレハブも存在します。こちらを OVRSceneManager に設定すると「コライダーをもつ見えないオブジェクト」を壁や机に張り付けることができます。
これにより、「現実世界のオブジェクトの上にバーチャルなオブジェクトを置く」といったことが簡単にできるようになります。
今回作成したプロジェクトはこちら。
参考資料
- https://developer.oculus.com/documentation/unity/unity-passthrough/
- https://developer.oculus.com/documentation/unity/unity-scene-overview/