4.2 SDK 与 API:OpenXR / ARKit / ARCore


4.2 SDK 与 API:OpenXR / ARKit / ARCore

本节摘要:XR 项目接入硬件的方式有三条:OpenXR(跨平台标准 API)、ARKit(Apple iOS/macOS)、ARCore(Google Android)。本节拆开三条 API 的能力边界、用 XR 项目怎么选;再用 Unity 的 XR Plugin Management 做"一份代码,多端部署"的演示。

学习目标

阅读完本节,你应当能够:

  1. 解释 OpenXR Runtime 的架构(App ↔ OpenXR Runtime ↔ Headset)。
  2. 比较 ARKit、ARCore、OpenXR 三者的能力差异。
  3. 在 Unity 里配置 XR Plugin Management 实现多端打包。
  4. 解释 Vision Pro 的"PolySpatial" 模式如何映射到 OpenXR。

一、问题与直觉

XR 项目接硬件的 API 选型之所以复杂,是因为它分三层:

  • 设备厂商 SDK:Meta Quest 用 Oculus Integration,Valve Index 用 OpenVR/SteamVR,Pico 用 Pico SDK。
  • 平台 SDK:Apple 用 ARKit/RealityKit,Google 用 ARCore,Microsoft 用 MRTK。
  • 行业标准 API:OpenXR 是 Khronos Group 主导的跨平台标准。

直觉上:OpenXR 是"行业标准"那一层,往上是平台 SDK,往下是设备 SDK。一个 XR 项目要么直接接 OpenXR(跨平台),要么接平台 SDK(拿到平台独占能力)。

二、OpenXR:跨平台 XR 抽象层

OpenXR 由 Khronos Group 2017 年发起,2019 年发布 1.0,目前是 1.1 版本。它的架构分三层:

  • App(应用程序):通过 OpenXR API 调用。
  • OpenXR Runtime(运行时):每家头显厂商提供一个 Runtime——Meta 提供 Oculus Runtime,Pico 提供 Pico Runtime,Valve 提供 SteamVR Runtime。
  • Headset(头显):Runtime 与硬件通信。

App 不直接调厂商 SDK——它调 OpenXR,OpenXR 加载到对应 Runtime,由 Runtime 完成硬件适配。这就是为什么同一份 OpenXR 代码能跑在 Quest 3、Vive Pro 2、Pico 4 上。

三、ARKit:Apple 平台的 XR 抽象

ARKit 是 Apple 2017 年发布的 iOS AR 框架,2024 年发布 ARKit 6。当前能力:

  • 平面检测:水平/垂直平面。
  • 图像追踪:识别并跟踪 2D 图像(海报、卡片)。
  • 物体追踪:识别 3D 物体(玩具、家具)。
  • 环境纹理:自动给环境上色(基于摄像头)。
  • 场景重建(SceneReconstruction):把环境重建为 3D 网格。
  • 房间捕捉(RoomPlan):扫描整个房间并输出 USDZ 模型。
  • RealityKit 2:高级 3D 渲染、物理、动画。

ARKit 是 iOS 唯一支持的 AR 框架。Vision Pro 在 visionOS 1.0 阶段用 ARKit 的子集(去掉部分 API)作为底层;visionOS 2.0 后增加"PolySpatial"模式,把 Unity/Unreal 的标准 3D 渲染管线桥接到 ARKit 的空间渲染上。

四、ARCore:Google 平台的 XR 抽象

ARCore 是 Google 2018 年发布的 Android AR 框架。当前能力:

  • 平面检测:水平/垂直平面。
  • 深度 API(Depth API):用 ToF 摄像头或运动视差得到环境深度。
  • 运动追踪(Motion Tracking):6DoF 视觉惯性里程计。
  • 锚点(Anchors):本地锚点。
  • 云锚点(Cloud Anchors):跨设备共享锚点。
  • 增强图像(Augmented Images):识别 2D 图像。
  • 场景语义(Scene Semantics):每像素"地板概率"。
  • 录屏(Recording):录制 AR 体验。

ARCore 在 Android 8.0+ 设备上可用,覆盖 1.32+ 设备。Google 在 2024 年发布的 ARCore 1.42 增加了"地理空间 API(Geospatial API)"——把 AR 内容钉到真实地理坐标上。

五、Vision Pro 的"PolySpatial"模式

visionOS 1.0 不支持 OpenXR。Apple 走了另一条路:让 Unity/Unreal 渲染出标准 3D 画面,然后通过"PolySpatial"桥接到 visionOS 的空间渲染。

PolySpatial 模式的关键能力:

  • Shared Space:多个应用共享同一空间坐标系。
  • RealityKit Pro:高保真材质(金属、布料、玻璃)。
  • Portal:把 Unity 场景"开窗"嵌入 visionOS 桌面。
  • Volume:把 Unity 场景作为 3D 体块呈现。

visionOS 2.0 起部分支持 OpenXR 子集(XR_EXT_eye_gaze_interaction、XR_EXT_hand_interaction),但 PolySpatial 仍是 Apple 推荐的主路径。

六、三者的能力对比

能力 OpenXR 1.1 ARKit 6 ARCore 1.42
6DoF 头手
平面检测 间接(厂商扩展)
场景网格 间接 ✓ (SceneReconstruction) ✓ (Depth API)
房间捕捉 间接 ✓ (RoomPlan)
云锚点 间接 ✓ (Cloud Anchors)
眼动
手势
注视点渲染
跨设备 极强 iOS/macOS 限定 Android 限定
跨平台 Runtime

💡 关键直觉:选 SDK 的判断很简单——"项目只跑 iOS/macOS"→ ARKit,"只跑 Android"→ ARCore,"跨平台"→ OpenXR。"Vision Pro 专属"→ PolySpatial。

七、动手演示:用 XR Plugin Management 配置多端

// 1. 安装 XR Plugin Management(Unity Package Manager) // 2. 在 Project Settings → XR Plugin Management 勾选: // - OpenXR(PC、Quest、Pico) // - ARKit(iOS) // - ARCore(Android) // 3. 用条件编译区分平台 #if UNITY_IOS using UnityEngine.XR.ARKit; #elif UNITY_ANDROID using UnityEngine.XR.ARCore; #else using UnityEngine.XR.OpenXR; #endif public class CrossPlatformAR : MonoBehaviour { void Start() { #if UNITY_IOS var session = ARKitSessionSubsystem.s_SubsystemInstance; session.Start(); #elif UNITY_ANDROID ArCoreApk.CheckAvailability(); // 简化示例 #else XRGeneralSettings.Instance.Manager.InitializeLoaderSync(); #endif } }

打包成 iOS→AR 走 ARKit;Android→AR 走 ARCore;Windows→VR 走 OpenXR。同一份代码。

本节要点回顾

  • OpenXR 是 XR 的"行业标准 API",App 不直接调厂商 SDK。
  • ARKit 是 iOS/macOS 独占,ARCore 是 Android 独占,能力各有强弱。
  • Vision Pro 走"PolySpatial"模式——Unity/Unreal 通过桥接接入 visionOS。
  • Unity 的 XR Plugin Management 让"一份代码多端部署"成为可能。
  • SDK 选型的判断:跨平台 → OpenXR;单平台 → 用平台 SDK。

下一节我们看一条 XR 项目的完整流水线。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U