文章目錄
- 1 MR 介紹
- 1.1 透視
- 1.2 場景理解
- 1.3 空間設置
- 2 配置 MR 環境
- 2.1 場景配置
- 2.2 MR 配置
- 3 運行測試
配置環境:
- Windows 11
- Unity 6000.0.42f1
- Meta SDK v74.0.2
- Quest3
1 MR 介紹
1.1 透視
? 透視(Passthrough)是將應用的背景從虛擬的圖層替換成現實圖層,類似于 P 圖更換背景,虛擬物體相當于疊加在現實圖層之上的元素。
? 在單純的透視下,虛擬物體和現實物體二者之間并不會進行交互。

1.2 場景理解
? 場景理解(Scene Understanding,Meta 用 Scene API 實現)能用 2D 平面或 3D 立方體來代表現實物體的位置和范圍。在系統中,現實世界由不同的 2D 平面和 3D 立方體組成。
? 此外,場景理解用語義標簽來標識不同的 2D 平面或 3D 立方體,讓系統理解標識出的東西具體代表哪一種現實中的物體。

? 加上場景理解,設備能夠理解現實環境,分辨出現實物體在什么位置。通過場景理解,識別出的現實物體和虛擬物體均屬于 MR 世界中的一部分,因此能夠實現虛擬物體和現實物體之間的交互。
場景模型(Scene Model)
? Scene Model 由許多場景錨點(Scene Anchor)組成。每個 Scene Anchor 存儲數據組件(Component),這些數據組件可能存儲著不同種類的數據,用來表示幾何和語義信息。
? Scene Anchor 的內部結構類似于 ECS 結構
- C:Component。包含數據。
- E:Entity。是一系列 Component 組件的集合。相當于一個 ID 標識物體。
- S:System。用來處理 Component 的數據,執行邏輯(因為 ECS 使用面向數據的思想,所以最終處理的還是 Component 中的數據)。

場景錨點(Scene Anchor)
? 在 Scene Model 中,每個 Scene Anchor 相當于一個 Entity。一個 Scene Anchor 中包含不同種類的 Component 組件,不同種類的組件里存儲著不同類型的數據。
- 如果用于表示整個房間,Scene Anchor 需包含 RoomLayout 組件和 AnchorContainer 組件。
- RoomLayout:表示整個房間布局,包含天花板,地板,墻壁的布局(這三個元素可以構成一個房間)。
- AnchorContainer:包含房間內的所有Scene Anchor。
- 如果用于表示房間內單獨的物體,Scene Anchor 需包含 Locatable 組件,Bounded2D 或者 Bounded3D 組件(取決于物體是 2D 平面還是 3D 物體),Semantic Classification(語義分
類)組件。- Locatable:定位物體,表示物體在房間中的位置。
- Bounded2D/3D:表示物體的邊界框,一個 Scene Anchor 也可以同時擁有 2D 和 3D 組件(桌子,桌面可以用 2D,整個桌子可以用 3D)。
- Semantic Classification:用標簽來表示物體是哪一種。
空間錨點(Spatial Anchor)
? Scene Anchor 和 Spatial Anchor 的區別:
- Scene Anchor 由 Quest 系統創建,受系統管理。
- Spatial Anchor 由應用本身創建,受用戶管理。
1.3 空間設置
? 空間設置(Space Setup,以前稱為場景捕獲)是捕獲場景模型的過程,由 Quest 系統管理,因此在設備上運行的所有應用都可以訪問相同的環境數據。
? 空間設置是一個用戶引導的過程:
- 在設置之前,需要先允許應用訪問設備的空間數據。
- 開啟權限后,自動掃描環境,獲取空間網格,提取空間信息(如地板和天花板的高度,墻壁的位置)。
- 最后由用戶修正錯誤(校準墻壁位置)和添加缺失信息(房間物體)。
? 空間設置無法在串流模式下進行。在 Quest 中,依次點擊“設置”->“實際空間”->“空間設置”進行設置。

2 配置 MR 環境
? 前置條件:
- 配置 Meta SDK 開發環境。參考:2025-03-17 NO.1 Quest3 開發環境配置教程_quest3 unity 開發流程-CSDN博客。
- 熟悉 Quest3 抓取物體操作。參考:2025-04-06 NO.2 Quest3 基礎配置與打包-CSDN博客。
2.1 場景配置
? 創建新場景 MRDemo,刪除 Main Camera,并添加 OVRCameraRig,并更改 Gravity Factor 改為 0,防止玩家下墜。(具體操作參考條件 2)。

? 選擇菜單欄中的“Meta”,依次點擊“Tools”->“Building Blocks”。

? 找到 Passthrough 模塊,將其拖拽到 Hierarchy 窗口中。

? 拖拽這一步會自動將 OVRCameraRig 下 CenterEyeAnchor 的相機背景改為純黑色。

? 拖拽后會創建 Passthrough 物體,該物體的 OVR Passthrough Layer 腳本上定義了 Placement,用于將現實場景放于哪個圖層(相對于虛擬場景)。

? 最后,創建一個 Cube,并添加 Hand Grab 功能(具體操作參考條件 2)。

2.2 MR 配置
? 點擊 OVRCameraRig,設置 OVRManager.cs 腳本:
- Passthrough Support:Supported
- Boundary Visibility Support:Supported
- Enable Passthrough:勾選
- Should Boundary Visibility Be Suppressed:勾選
? Boundary Visibility 原本是為 VR 應用設計的,在 VR 中用戶看到的是完全虛擬環境,看不到現實環境,Boundary Visibility 能在一定程度上避免用戶與現實物體相撞。但在 MR 應用中,用戶大多數情況下能看到現實環境,所以安全邊界顯得有些多余,并且影響體驗感。
? 注意:只有開啟了 Passthrough 透視功能的 MR 應用才能關閉安全邊界,如果是純 VR 應用則無法關閉。

? 選擇菜單欄中的“Meta”,依次點擊“Tools”->“Update AndroidManifest.xml”,更新安卓配置信息。

3 運行測試
? 運行 Unity,可以看到現實世界中有一個立方體位于眼前。但是在 Unity 的 Game 窗口是看不到現實場景的。

? 可以借助 Meta Quest Developer Hub 進行投屏查看。安裝鏈接:Homepage | Meta Horizon OS Developers。

? 安裝后,進入 Device Manager,點擊 Cast 進行投屏。

? 在投屏界面中可看到現實場景。
