LoginSignup
1
1

MetaQuest3 で DepthAPI を利用した オクルージョン の設定

Last updated at Posted at 2024-03-05

はじめに

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 SupportRequired
Passthough SupportRequired
image.png (10.0 kB)

DepthAPI の説明

こちらが DepthAPI のレポジトリになります

DepthAPI は カメラから深度情報を取得して、端末から壁面や床面など現実の遮るオブジェクトまでの距離を測定する機能を提供します
今回はこの API を利用して オクルージョン を設定します

オクルージョンとは?
AR を利用する中で表示する対象の前に遮るものが横切ったときに、奥にあるオブジェクトを部分的に表示しないようにする機能を指す言葉です

Getting started with samples を参照して サンプルコードをダウンロードしてテストしてみるのをお勧めします

サンプルコードでは DepthAPI のパッケージをローカルから読みんでいますが、これ以降の実装では Github を利用して読み込んでいます

DepthAPI パッケージの導入

Github の README に書かれている URL をコピーしてパッケージマネージャーから追加します

1. パッケージマネージャーを開く

2. Add Package from git URLを選択

image.png (8.1 kB)

3. こちらのURL から git のURLをコピー

記事編集時のURLはこちらです

https://github.com/oculus-samples/Unity-DepthAPI.git?path=/Packages/com.meta.xr.depthapi

4. DepthAPI が Project に追加されているのを確認する

image.png (12.5 kB)

DepthAPI を使ったオクルージョンの設定

Material の作成

1. Assets の中に新しく Materials フォルダを作成

2. フォルダの中で新しい Material を作成

image.png (25.7 kB)

3. DepthDemoと名前をつける

image.png (51.4 kB)

4. Shader の設定を変える

変更前 Standard
image.png (8.0 kB)

変更後 Meta/Depth/BiRP/Occlusion Standard
image.png (20.9 kB)

シーンに EnvironmentDepthOcclusion を追加

1. ProjectEnvironmentDepthOcclusion を検索して、シーンにドラッグ

image.png (29.2 kB) image.png (36.8 kB)

シーンに Cube を追加

1. 現在開いている Scene に新しい 3D Object > Cube を作る

image.png (5.7 kB)

Cube の設定を変更

1. Mesh Rendererを変更

Mesh Renderer > Materials > Element に先ほど作成した DepthDemo を設定
image.png (6.7 kB)

2.1 Rigbody を追加

Add Componentを選択、 Rigbodyを追加
image.png (3.0 kB)

image.png (26.8 kB)

2.2 Rigbody を変更

Rigbody > isKinematic にチェックをつける
image.png (12.5 kB)

3.1 OVR Grabbable を追加

Add Componentを選択、OVR Grabbableを追加
image.png (5.3 kB)

image.png (17.6 kB)

3.2 OVR Grabbable を変更

OVR Grabbable > Grab Points > List is empty+ をクリック
今編集している CubeScene からドラッグ
image.png (19.0 kB)

4.1 Occlusion Controller を追加

Add Componentを選択、Occlusion Controllerを追加
image.png (8.9 kB)

image.png (11.1 kB)
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 に今編集している CubeScene からドラッグ

2つの操作を行うとこんな感じ
image.png (12.4 kB)

実行確認

以上の設定で DepthAPI を利用した オクルージョン が可能になっていると思います

おわりに

DepthAPI はまだテスト段階の機能であり、MetaQuest3 がないと検証ができません。パッケージ関係もまだ十分に整っているとはいえず、今後の Meta の対応が待たれます。
MR 的なアプリを作るためには欠かせない オクルージョンが実装できました。

参考資料

MetaQuest DepthAPI Github レポジトリ

Meta Unity用 DepthAPI リファレンス
日本語

英語

Mesh API と Depth API による Meta Quest 3 のMRエクスペリエンスの構築

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1