Quest3でのDepth API ver.0.1.0を用いたDynamicOcclusionアプリのセットアップ

# Quest3でのDepth API ver.0.1.0を用いたDynamicOcclusionアプリのセットアップ

この記事では2023年10月15日現在、UnityにてDepth APIを利用したDynamic Occlusionを行うアプリの作成セットアップ方法を解説します。

できるだけ初心者の方でもわかるように画像多めで解説します。

初期のパススルーアプリ制作の際と同様に、
**DepthAPIの動作確認には毎回ビルドしてQuest3でRunする必要があります**
(UnityのPlayモードでデバッグできません　(もしかしたら私が間違っているだけかもです　有識者の方々教えてください))

環境
- UnityHub 3.5.2
- Unity 2022.3.11f1
- Oculus Integration SDK v57

## 0. Unityプロジェクトのセットアップ
### 1. UnityHubで新たなUnityプロジェクトを作成
通常の「3D Core」テンプレートでプロジェクトをCreateします。
![スクリーンショット 2023-10-18 210119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/c71f5442-5963-ea2c-097e-8d2c2d532d4b.png)

### 2. ヒエラルキーの初期オブジェクトを削除
- mainCamera
- Directional Light
を削除します。
![スクリーンショット 2023-10-15 181120.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/fdf23f5b-f388-04e4-9b8f-349ca72c3f19.png)
↓
![スクリーンショット 2023-10-15 181128.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/6e1df518-0a2c-6fd0-1820-e1eeeadd1a56.png)

### 3. プラットフォームをAndroidに変更
左上のFile -> BuildSettingsを開き、画像のように「Android」で、
- Texture CompressopnをASTC
- RunDeviceを All Compatible device
- Development Builにチェック(これは正式版では外す)
のように設定して, 「Switch Platform」を実行する
![スクリーンショット 2023-10-18 214944.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/f954f0c8-3895-4527-2c74-0d05eb0dd89f.png)
![スクリーンショット 2023-10-15 173634.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/44d47819-75b9-d74b-8dd3-85131b711ab5.png)


ここまでで最低限の準備は完了

## 1. Depth API 0.1.0とOculus Integration v57のインストール
### 1. Oculus XR Pluginのインストール
Window -> PackageManagerを開く
![スクリーンショット 2023-10-18 210341.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/9f5455d8-315c-3937-f4e4-bba2b134939a.png)
左上の「＋」ボタンを押し、
"Add package by name..."を選択
![スクリーンショット 2023-10-18 210421.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/ce71887c-e2a4-5c72-15df-f0e206149239.png)
画像のように
name              -> com.unity.xr.oculus
version(optional) -> 4.2.0-exp-env-depth.1
と入力して Add を押す
![スクリーンショット 2023-10-18 210719.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/52f5bd20-6943-3d77-854a-9702e9762010.png)

するとPackagesに
Oculus XR Plugin
が追加され、Assetsに
XR
が追加されている
![スクリーンショット 2023-10-18 210806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/011d0c92-7993-48a7-cd52-5adde7cae283.png)

### 2. Depth API ver.0.1.0のインストール
ここでDepthAPIをインストールするが、ついでにOculusIntegration ver.57の一部もインストールされる

Window -> PackageManagerを開く
![スクリーンショット 2023-10-18 210341.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/2af714ad-f33b-60d9-57ff-71b7b020e814.png)

左上の「＋」ボタンを押し、
今度は"Add package from git URL..."を選択
![スクリーンショット 2023-10-18 210840.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/4a5c75db-28aa-ced4-7e31-abeb0c13ba64.png)

URL欄には
https://github.com/oculus-samples/Unity-DepthAPI.git?path=/Packages/com.meta.xr.depthapi
を入力し Add
![スクリーンショット 2023-10-18 210912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/5ec43bf5-a386-da69-87ac-5c85e93bdb2d.png)

*ここでもしURPでプロジェクトを作成している場合は同様の手順で
https://github.com/oculus-samples/Unity-DepthAPI.git?path=/Packages/com.meta.xr.depthapi.urp
もAddする
(初心者の方は飛ばして大丈夫です)

いろいろポップアップが出てくるので言われるがままにボタン押していく![スクリーンショット 2023-10-18 210957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/43bd49fd-5fd6-df49-a976-5cc47725db65.png)
(↑これはどっちでもOK)
![スクリーンショット 2023-10-18 211001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/e04d2986-44e5-bea2-5b12-cf5286673209.png)

すると
PackageにMeta XR Utilitis SDKが追加され、AssetsにOculusとResoursesが追加される（↓の画像参照）
![スクリーンショット 2023-10-18 211037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/2dd7afa9-1adc-1185-ff3e-bc957b875ae9.png)

### 3. Oculus Integration SDKの残りをインストール
ここのパートは必要に応じてだが、初心者のうちは一通りインストールしておくのが無難です

windows -> PackageManagerを選択
![スクリーンショット 2023-10-18 211123.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/92aeb28a-758a-4477-2a0f-cc92a5bc9ab4.png)
左上の「＋」ボタンを押し、MyAssetsを選択
![スクリーンショット 2023-10-18 211142.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/200c75e0-88bf-8a8f-cbc9-c8305de3cfb0.png)
OculusIntegrationを選択し、「Import」

もしここでOculusIntegrationが見つからなかった場合下記詳細参照<details>
https://assetstore.unity.com/packages/tools/integration/oculus-integration-82022?locale=ja-JP
からマイアセットにOculusIntegrationSDKを追加してください
![スクリーンショット 2023-10-18 221235.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/500e935b-40ab-2574-4d0a-2ef0f7e40fab.png)
</details>

![スクリーンショット 2023-10-18 211209.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/2a37b429-b090-2e3f-f204-c5fe32be8c93.png)

ここで**OculusProjectConfig.assets**のチェックを外してインポート
(こいつを2重で上書きインポートするとうまく動かない。。。気がする)
![スクリーンショット 2023-10-18 211352.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/23dbfd85-78ea-f13e-c47a-b4c1de6cc859.png)

いろいろポップアップ出てくるので言われるがままボタン押す
![スクリーンショット 2023-10-18 211425.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/9bc24b64-6b8a-6de5-f6e3-60e433388ca3.png)
![スクリーンショット 2023-10-18 211542.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/c5b72b82-8061-2bf3-587d-42b24321ac16.png)
![スクリーンショット 2023-10-18 211553.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/2211b12e-4723-fa39-9ec9-f570d3afbd93.png)
![スクリーンショット 2023-10-18 211607.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/4bcbb155-d68d-615d-5e2e-bdaa2d294a6f.png)
![スクリーンショット 2023-10-18 211618.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/fbabe7d8-321a-d78e-307a-f665935b5e92.png)

以上で必要なアセット系統のインストールが完了

## 2. Oculus Project SetUp Toolを使って細かい部分の設定
OculusIntegration v57からこれまで面倒だった細かい設定を一挙にやってくれるセットアップツールが実装されました。これを使います
### 1. 右下のオキュラスマークを押し、Project SetUp Toolを選択します
![スクリーンショット 2023-10-18 211710.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/30c91618-1bc0-a6d1-894d-f1b1a8ba00aa.png)
![スクリーンショット 2023-10-18 211730.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/64fdcfc9-a924-defa-50b9-0610d2d8a0f9.png)

### 2. Androidタブを選択し、FixAllとApplyAllをクリック
![スクリーンショット 2023-10-18 211747.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/4d3d13c2-4d7c-b81e-ee6b-c414972fcb63.png)

### 3. PCタブを選択し、FixAllを選択
![スクリーンショット 2023-10-18 211852.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/57ce4b2a-7b2e-9171-32b1-bca773211ea0.png)

### 4. XR Plug-in Managementの設定
同じ"Project Setting"画面の、
左下の「XR Plug-in Management」を選択し
画像のようにPCタブのOculusチェックボックスにチェックが入っていることを確認
**もしここにチェックが入っていないとUnityのPlayで直接デバックできません**
![スクリーンショット 2023-10-18 211948.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/67ab1c7e-f2a5-d5b0-ceab-22c8b337469f.png)

### 5. 追加の細かい確認
同じ"Project Setting"画面の
左下の「XR Plug-in Management->Oculus」を選択し
AndroidタブとPCタブでそれぞれ画像の設定になっているか確認
![スクリーンショット 2023-10-18 212049.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/aa3942f2-735c-c532-e131-f9e6e2547f02.png)
![スクリーンショット 2023-10-18 212124.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/d90e0f36-a3d4-5c63-5035-2de6d0af18a1.png)

以上でDepthAPIを用いた開発のセットアップは完了です。

## 3. サンプルデモアプリの作成
Oculus Integration v.57より追加された「Building Blocks」を用いて簡単なDynamic Oculusionを用いたアプリを実装します。

### 1. Building Blocksの起動
右下のオキュラスマークを押して、Building Blocksを選択
![スクリーンショット 2023-10-18 223245.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/261de7c2-f8be-b7c6-3511-59f9aa8e953d.png)
![スクリーンショット 2023-10-18 223302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/581fc8df-1cc6-17be-68e3-4036a08a8e35.png)

### 2. パススルーのハンドトラッキングアプリを構築
- Background Passthrough
- Grabable Item
をAddする
![スクリーンショット 2023-10-18 223329.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/cfc074cc-5695-90cf-9cc4-23a915773605.png)
すると下記の画像のように
- [BB] Camera Rig
- [BB] BackGround Passthrough
- [BB] Grabable Item
がヒエラルキーに追加されている
![スクリーンショット 2023-10-18 223413.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/1d7f66c4-c23e-f758-8ff2-497ebcd77d7f.png)

ここでCameraRigの「OVR Manager(Script)」コンポーネントの設定が画像のようになっているか確認
![スクリーンショット 2023-10-18 223447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/87a02028-54d8-eb86-ba6f-f891f49463ca.png)
![スクリーンショット 2023-10-18 223538.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/6a1ae1fd-99e8-611f-64cd-959cf8e7d522.png)
![スクリーンショット 2023-10-18 223611.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/f25e0823-f85f-8ef3-2ac0-11a756af8d8a.png)


ここまでで「パススルーのハンドトラッキングアプリ」が実装できている
Quest３をUSB CケーブルでPCに接続しQuestLinkでPCVRモードにした状態でUnityのPlayモード（再生ボタン）を押すことで動作確認できる
**Unity上でのこの動作確認ではパススルーはカクカクの非常に重いです**

もしパススルーができない場合はOculusアプリの設定を確認してください<details>
![スクリーンショット 2023-10-18 224713.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/c61c75c8-a746-3606-cf38-ea0fe15d06e1.png)
</details>

### 3. DynamicOcclusionの実装
Packages(Assetsじゃないので注意) -> DepthAPI -> Core -> Prefabs
内の
「EnvironmentDepthOcclusion」
をヒエラルキーへドラッグドロップ
![スクリーンショット 2023-10-18 224912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/47a76aa8-08fc-d2ae-0e04-086e2c048a19.png)
ヒエラルキーへ追加される↓
![スクリーンショット 2023-10-18 224923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/47912227-d60e-9724-bcd0-47fd49773b12.png)

「EnvironmentDepthOcclusion」の「Environment Depth Occlusion Controller(Script)」コンポーネントでオクルージョンの種類を選択（SoftOcclusionは処理重め）
![スクリーンショット 2023-10-18 225117.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/03760ccb-b502-28cb-0ae6-90c7eef0c2a1.png)

DynamicOcclusion用の新たなマテリアルを作成
![スクリーンショット 2023-10-18 225409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/90fa0ab6-2ab4-f9e9-8029-eb84d6a4fb27.png)
マテリアルのシェーダーを
「Meta/Depth/BiRP/Occlusion Standard」に変更
![スクリーンショット 2023-10-18 225532.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/79de3abe-f09d-60d1-ae3b-bc282b0dc628.png)

作成した新規マテリアルをヒエラルキーにある「[BB]Grababble Item」にドラッグ＆ドロップして適用する
![スクリーンショット 2023-10-18 225805.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/16746508-9d53-3df8-5342-e24ccc603f93.png)
[BB]Grabbable Itemのマテリアルが作成した新規マテリアルに変わっていることを確認
![スクリーンショット 2023-10-18 225922.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/fc1c96ae-fae6-e7a5-ea8d-149cf592841a.png)

以上でデモアプリの作成が終了！

## 4. デモアプリのビルドと動作確認
再度Quest3をUSB CケーブルでＰＣに接続し、
File -> Build Settingsを開き、
![スクリーンショット 2023-10-18 230417.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/c7c90def-bb48-b400-9f2e-0c01e8422462.png)
Build And Runを実行
![スクリーンショット 2023-10-18 230444.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/51cbc845-26dc-f7f6-13e8-f7390b976998.png)
ファイル名を設定してapkファイルを保存
![スクリーンショット 2023-10-18 231227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/01897e61-0b1d-eba2-671e-d8414da100d1.png)
Depth APIはExmentalのため、Experimental featureを実行可能にするか聞かれるのでYesを選択
![スクリーンショット 2023-10-18 231317.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/9ee15b37-269a-1ddb-8a73-c2d56a9d912a.png)

すると自動的に作成したアプリが実行される
![スクリーンショット 2023-10-18 234151.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/dd301916-4acf-ab78-4549-b602a94d5a87.png)
![スクリーンショット 2023-10-18 234207.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/67eca659-826f-bffc-721a-bb015741f972.png)
![スクリーンショット 2023-10-18 234214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/42dbb964-e824-2848-74c2-eb2c19f4ee6b.png)

ちなみに作成したアプリはアプリ検索->提供元不明　のところにある
![スクリーンショット 2023-10-18 233150.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323030/89ab9a69-838e-a20e-930e-b4a1fe46a70a.png)


ちなみにExperimental featureはQuest3の電源を切るたびに実行できなくなるので、以後は毎回
adb shell setprop debug.oculus.experimentalEnabled 1
コマンドでテスト機能を有効にする必要があります
https://developer.oculus.com/experimental/experimental-overview


以上、DepthAPIによるDynamicOcclusionはMixedRealityの新たな世界を切り開く大きな機能ですので、正式リリースを楽しみに待ちましょう