はじめに
MetaQuest3 での DepthAPI を使ったオクルージョンのテストしたので、その方法をまとめます
上記の記事からの連続した実装になっているので、初期設定はこちらの記事を参考にしてください。
DepthAPI の環境構築
DepthAPI の 利用には MetaQuest3 と v60 以上のMeta の SDK が必要になります
要件(Metaのリファレンスは誤っているので修正)
- Unity 2022.3.1fまたはUnity 2023.2
- V60 Meta XRオールインワンSDK以降
- [Scene Support (シーンのサポート)]が[Required (必須)]に設定されていること(空間データアクセス許可をリクエストするため)
- グラフィックスAPIが[Vulkan]に設定されていること
- レンダリングモードが[Multiview (マルチビュー)]に設定されていること
警告
リファレンスでは以下のように記載されています
com.unity.xr.oculusパッケージをサポートするDepth API。Unityパッケージマネージャの[Add package by name (パッケージを追加(名前を指定))]で名前としてcom.unity.xr.oculus、バージョンとして4.2.0-exp-env-depth.2を指定
ですが、現在設定の必要はありません
DepthAPIの有効化
MetaQuest と PC が接続した状態で以下のコードを実行する
adb shell setprop debug.oculus.experimentalEnabled 1
OculusProjectConfig
の設定
Scene Support
→ Required
Passthough Support
→ Required
DepthAPI の説明
こちらが DepthAPI のレポジトリになります
DepthAPI は カメラから深度情報を取得して、端末から壁面や床面など現実の遮るオブジェクトまでの距離を測定する機能を提供します
今回はこの API を利用して オクルージョン を設定します
オクルージョンとは?
AR を利用する中で表示する対象の前に遮るものが横切ったときに、奥にあるオブジェクトを部分的に表示しないようにする機能を指す言葉です
Getting started with samples
を参照して サンプルコードをダウンロードしてテストしてみるのをお勧めします
サンプルコードでは DepthAPI のパッケージをローカルから読みんでいますが、これ以降の実装では Github を利用して読み込んでいます
DepthAPI パッケージの導入
Github の README に書かれている URL をコピーしてパッケージマネージャーから追加します
1. パッケージマネージャーを開く
2. Add Package from git URL
を選択
3. こちらのURL から git のURLをコピー
記事編集時のURLはこちらです
https://github.com/oculus-samples/Unity-DepthAPI.git?path=/Packages/com.meta.xr.depthapi
4. DepthAPI が Project に追加されているのを確認する
DepthAPI を使ったオクルージョンの設定
Material の作成
1. Assets の中に新しく Materials
フォルダを作成
2. フォルダの中で新しい Material
を作成
3. DepthDemo
と名前をつける
4. Shader
の設定を変える
変更後 Meta/Depth/BiRP/Occlusion Standard
シーンに EnvironmentDepthOcclusion
を追加
1. Project
で EnvironmentDepthOcclusion
を検索して、シーンにドラッグ
シーンに Cube
を追加
1. 現在開いている Scene
に新しい 3D Object > Cube
を作る
Cube
の設定を変更
1. Mesh Renderer
を変更
Mesh Renderer > Materials > Element
に先ほど作成した DepthDemo
を設定
2.1 Rigbody
を追加
2.2 Rigbody
を変更
Rigbody > isKinematic
にチェックをつける
3.1 OVR Grabbable
を追加
Add Component
を選択、OVR Grabbable
を追加
3.2 OVR Grabbable
を変更
OVR Grabbable > Grab Points > List is empty
の +
をクリック
今編集している Cube
を Scene
からドラッグ
4.1 Occlusion Controller
を追加
Add Component
を選択、Occlusion Controller
を追加
NullReferenceException が出た場合
NullReferenceException: SerializedObject of SerializedProperty has been Disposed.
が出た場合
Unityのプロジェクトをいったん閉じ、エクスプローラーから該当ディレクトリの Libraly
を削除し、再度 Unity で起動することでエラーが解消されます
4.2 Occlusion Controller
を変更
Occlusion Controller > Occlusion Type
に使いたいものを設定
- Hard Occlusion
ざっくりとしたオクルージョンの設定が可能 - Soft Occlusion
Hardより細かなオクルージョンの設定が可能
今回は Soft
を設定
Occlusion Controller > Renderer
に今編集している Cube
を Scene
からドラッグ
実行確認
以上の設定で DepthAPI
を利用した オクルージョン が可能になっていると思います
おわりに
DepthAPI はまだテスト段階の機能であり、MetaQuest3 がないと検証ができません。パッケージ関係もまだ十分に整っているとはいえず、今後の Meta の対応が待たれます。
MR 的なアプリを作るためには欠かせない オクルージョンが実装できました。
参考資料
MetaQuest DepthAPI Github レポジトリ
Meta Unity用 DepthAPI リファレンス
日本語
英語
Mesh API と Depth API による Meta Quest 3 のMRエクスペリエンスの構築