Meta Questパススルー：机の上にバーチャルなリンゴを表示する

# Meta Questパススルー：机の上にバーチャルなリンゴを表示する

Meta Questのパススルー機能を使用すると、現実世界に仮想オブジェクトをシームレスに重ね合わせることができます。今回は、現実の机の上にバーチャルなリンゴを自然に表示させる方法を解説します。これは、OVRSceneManagerのPrefab Override機能を活用し、特定の現実世界のオブジェクト（机）の上に仮想オブジェクトを配置することで実現します。


目次

1. 机の上にバーチャルオブジェクトを表示するとは？
1. 環境光（Lighting）の設定
1. OVRSceneManagerの設定とPrefabの準備
1. OcculudingApple Prefabの作成
1. OVRCameraRigとCameraの設定

## 1. 机の上にバーチャルオブジェクトを表示するとは？
Meta Questのパススルー体験では、現実世界の物理的な表面（壁、床、机など）を認識し、その上に仮想オブジェクトを配置することが可能です。これにより、仮想のリンゴがまるで本当に机の上に乗っているかのように見え、よりリアルに感じられます。

この設定では、OVRSceneManagerが検出した「机」の領域に、あらかじめ仮想のリンゴとオクルージョン用のメッシュを組み合わせたPrefabを配置することで、現実世界の机とバーチャルリンゴの自然な融合を実現します。

## 2. 環境光（Lighting）の設定
パススルー映像を最適化し、仮想オブジェクトに余計な光の影響を与えないように設定します。

Lightingウィンドウを開く：
Window > Rendering > Lighting を選択し、Lightingウィンドウを開きます。

SceneタブのEnvironment設定:

Lighting Settings Asset: Noneに設定します。
![スクリーンショット 2025-05-25 18.08.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/394b3afa-82ee-4750-a4b1-c07398771a3b.png)


Skybox Material: Noneに設定します。
Sun Source: Noneに設定します。
Source: Colorに設定します。
Color: カラーピッカーでR:0, G:0, B:0, A:0（完全に透明な黒）に設定します。
![スクリーンショット 2025-05-25 18.08.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/4a528091-018b-4b65-addc-3cd717afb1b8.png)


## 3. OVRSceneManagerの設定とPrefabの準備

現実世界の「机」を認識し、その位置にカスタムPrefabを配置するようにOVRSceneManagerを設定します。

OVRSceneManagerの追加と設定:

シーン内の任意のGameObject（例: 空のGameObject）に、OVRSceneManager.csスクリプトをアタッチします。
同じGameObjectにOVRSceneModelLoader.csスクリプトもアタッチします。
OVRSceneManagerのインスペクターで、Occluding PlaneとOccluding Volumeのチェックボックスにチェックを入れます。

特定の平面（DESK）のみにカスタムPrefabを適用（Override機能）：
OVRSceneManagerコンポーネントのOverridesセクションを展開します。

+ボタンをクリックして新しいOverrideを追加します。
Target: DESK を選択します。
Prefab: ここに、後述するOcculudingAppleのPrefabを設定します。
![スクリーンショット 2025-05-31 10.28.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/70242207-fb04-4aaa-9ca7-cfb5b5d2ee6c.png)


Prefab Overrideを設定する理由:
OVRSceneManagerのOverrides機能は、Meta QuestのScene APIが検出した特定の現実世界のラベル（DESK、FLOOR、WALL_FACEなど）に対して、UnityでどのPrefabをインスタンス化するかを細かく制御するために使用します。今回は、現実世界の「机」と認識された場所に、オクルージョンと仮想のリンゴを含んだカスタムPrefabを配置したいので、DESKラベルにOcculudingApplePrefabを割り当てます。これにより、アプリ実行時に現実世界の机が検出されると、その位置にOcculudingApplePrefabが自動的に配置されます。


## 4. OcculudingApple Prefabの作成
リンゴのオクルージョンとリンゴ自体を内包するPrefabを作成します。

1. 新しい空のGameObjectを作成:
Hierarchyビューで右クリック > Create Emptyを選択し、GameObjectを作成します。名前をOcculudingAppleとします。これが今回のPrefabのルートオブジェクトになります。

2. OVRSceneAnchorの追加:
OcculudingAppleオブジェクトにOVRSceneAnchor.csスクリプトをアタッチします。これは、このPrefabがScene APIによって生成されたアンカーであることを示すために必要です。
![スクリーンショット 2025-05-31 10.30.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/41e4b2c2-8ad0-4ba4-8d89-558976c28a43.png)

3. オクルージョン用Cubeの作成と設定:

OcculudingAppleの子オブジェクトとしてCubeを作成します。（OcculudingAppleを選択した状態で右クリック > 3D Object > Cube）
このCubeの名前を例えばOcclusionCubeとします。

OcclusionCubeのMaterialに、DepthOnlyMaterial（前回の記事で作成したQueue:1999に設定されているもの）を設定します。
OcclusionCubeにBox Colliderコンポーネントをアタッチします。これにより、このCubeが現実世界の机のオクルージョンとして機能し、そのデプス情報が仮想オブジェクトの描画に影響を与えます。
![スクリーンショット 2025-05-31 10.32.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/24444d58-e143-464a-8cca-478a581656fc.png)



4.　仮想リンゴの追加と設定:

OcculudingAppleの子オブジェクトとして、リンゴの3Dモデル（Appleオブジェクト）を追加します。これはご自身のプロジェクトにあるリンゴのモデルを使用してください。
リンゴオブジェクトのPositionを調整し、OcclusionCubeの上に乗るように配置します。これにより、リンゴが机の上にあるように見えます。
![スクリーンショット 2025-05-31 10.33.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/3fcf38e9-c19e-4a48-b8c6-b3660558cbdc.png)



![スクリーンショット 2025-05-31 10.34.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/7d923a75-c416-4c15-9081-c287a22ed06b.png)


5.　Prefab化:

Hierarchyビューで作成したOcculudingAppleオブジェクトをProjectビューの任意のフォルダにドラッグ＆ドロップし、Prefabとして保存します。

## 5.  OVRCameraRigとCameraの設定
パススルー映像と仮想オブジェクトが適切に合成されるように、カメラとパススルーレイヤーを設定します。

OVRCameraRigの設定:

シーン内のOVRCameraRigを選択します。
OVRCameraRigにOVR PassThroughLayer.csスクリプトがアタッチされていることを確認します。
OVR PassThroughLayerコンポーネントのPlacementをUnderlayに設定します。これにより、パススルー映像が仮想オブジェクトの下に描画されます。
![スクリーンショット 2025-05-25 18.12.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/ca519b7c-68e8-46c3-9f6c-6d1191e88ed1.png)


CenterEyeAnchor内のCameraコンポーネントの設定:

OVRCameraRigの子オブジェクトであるCenterEyeAnchorを選択し、その中のCameraコンポーネントを選択します。
Clear FlagsをSolid Colorに設定します。（またはSkyboxでも可能ですが、今回の目的ではSolid Colorで背景を透明にするのが一般的です。）
Backgroundの色をR:0, G:0, B:0, A:0（完全に透明な黒）に設定します。これにより、パススルー映像と仮想オブジェクトが適切に合成されます。
![スクリーンショット 2025-05-25 18.13.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4031200/f1472f48-7825-4724-9f69-e7eff30c5b0e.png)

以上の設定を行うことで、Meta Questが現実世界の机を検出した際に、その位置にバーチャルなリンゴが自然に配置され、まるで本当に机の上にあるかのようなMR体験を実現できます。