本文提及的 Qualcomm 产品由 Qualcomm Technologies, Inc. 和/或其子公司提供。
我们在最近的博客文章《骁龙 Spaces 架构》中,讨论了使用骁龙 Spaces XR 开发平台开发头戴式 AR 体验的功能和优点。此外,还谈到了骁龙 Spaces 的底层基础:OpenXR。
我们推出了面向 Unity 和 Unreal 的 SDK,以及骁龙 Spaces Services 运行时 APK(包含在我们的 SDK 软件包中),可以将 OpenXR 绝大部分细节抽象化。这样,您可以集中精力开发头戴式 AR 体验的业务逻辑。不过,了解一些背后的原理总是有益的。本文就将深入探讨 OpenXR 以及在开发 AR 应用程序时骁龙 Spaces 是如何配合 Unity 和 Unreal 工作的。
OpenXR API 和生命周期
OpenXR 是 Khronos Group 的行业标准 C API 规范,是一种快速将新硬件引入 XR 生态系统的方式。企业和组织可以为特定硬件创建 OpenXR 运行时实现。对于我们而言,骁龙 Spaces 运行时适用于支持头戴式 AR 显示器的兼容硬件产品。此运行时还可以通过 OpenXR 扩展实现其他功能,这样一来,就需要添加新的扩展,以方便用户利用这些功能。
OpenXR API 设计提供并支持多种编程结构和概念,其中包括:
- 实例:启用应用程序和 OpenXR 运行时之间通信的对象。
- 会话:涵盖 AR 应用生命周期(从创建到最终清除)的 AR 应用程序会话。
- 动作:用户可以执行的移动和进程(例如,打开菜单)。
- 交互配置文件:用于执行动作的物理输入源。交互配置文件使用交互配置文件绑定映射到相关动作。
- 空间:映射和跟踪真实世界的参考框架(例如,用于映射虚拟对象的位置)。
- 视图配置:渲染图像的视口。头戴式设备通常有两个视图(一只眼睛一个视图,有时使用焦点渲染),而智能手机一般只有一个显示屏。
- 渲染:使用创建会话时提供的渲染引擎(如 Vulkan 或 OpenGL),支持交换链渲染和多层合成。
- API 层:可以在应用程序和 API 之间插入的钩子(例如,用于日志记录、调试和验证)。
下图节选自OpenXR 参考指南,显示一个 AR 应用程序生命周期中这些构造和概念的程序化视图:
资料来源:Khronos Group。https://www.khronos.org/files/openxr-10-reference-guide.pdf
左侧紫色区域显示应用程序使用 API 查询现有扩展和图层,创建了一个实例与 OpenXR 运行时进行通信并打开会话。
中间的蓝色区域显示会话处于活动状态时执行的主要功能。在初始化过程中,将请求系统(例如手持设备和/或头戴式设备),应用程序查询现有渲染混合模式、视图配置和随后用于创建会话的交互配置文件。会话启动运行后,将查询和创建空间、配置动作,并设置交换链用于渲染。
然后,会话开始执行主循环,如右侧浅绿色区域所示。最右侧的深绿色框显示了主循环期间调用的各种 API 的详细信息。与一般游戏循环类似,主要阶段包括收集输入(动作)、执行更新以及渲染最终帧。
在循环过程中,应用程序会监视空闲会话(例如,当应用程序不在焦点或不可见时),减少或避免执行资源密集型任务,如收集输入和渲染。此外,应用程序还会监视会话即将结束的事件(例如,用户想要关闭应用程序),此时会话将被销毁。
有关 OpenXR 的其它信息,请查看 Khronos Group 的 OpenXR 规范。
骁龙 Spaces 如何在 SDK 和运行时工作
我们的骁龙 Spaces SDK 是 Unity 和 Unreal 的 OpenXR 插件提供方,因此是必需的依赖项。这些框架中的 OpenXR 插件具备基本的功能,如渲染和头部跟踪,并提供与 OpenXR 运行时通信的接口。在 Unity 中,AR Foundation 的管理器组件接入骁龙 Spaces 子系统(例如锚点、平面检测、图像检测等),而在 Unreal 中,则没有进一步的依赖项。配置完成后,您就可以在内容驱动的框架中工作了,不必担心具体的 OpenXR API 调用。
运行时(应用程序在用户设备上运行时)将涵盖以下生命周期:
- 用户在设备上安装一项或多项 OpenXR 服务,例如骁龙 Spaces Services、Oculus OpenXR Services 等。请注意,必须安装骁龙 Spaces Services(可以通过 Google Play Store 安装),骁龙 Spaces 应用程序才能正常运行。
- 应用程序请求相关 OpenXR 服务运行时进行通信。骁龙 Spaces 应用程序需要请求骁龙 Spaces Services。
- 应用程序请求一个OpenXR 实例,该实例具有相关 OpenXR 运行时支持的特定功能集。
- 创建一个实例,连接到服务,并将指针返回到应用程序。
- 然后,应用程序使用该指针启动实例,并在应用程序的整个生命周期与其通信。
游戏引擎的 OpenXR 基础层处理渲染工作,并将交互配置文件映射到应用程序输入代码。然后,应用程序可以请求具有其他功能的实例,例如控制器支持、手部跟踪等.
Unity 和 Unreal,结合骁龙 Spaces SDK,生成在目标设备上运行的游戏二进制文件。这些文件包含使用骁龙 Spaces Services所需的代码,因此不必担心相关的 OpenXR API 调用。
现在就使用骁龙 Spaces!
骁龙 Spaces 提供了使用 OpenXR 兼容设备所需的一切(设计和运行时层面),避免直接面对 OpenXR API,可以专注于更高层面的开发任务。不过,了解实现细节总是有益处的,可以知道背后的工作原理。
在您准备开发下一个头戴式 AR 应用程序之前,请先访问骁龙 Spaces 开发者门户,浏览我们提供的文档,并注册下载骁龙 Spaces SDK for Unity 或 Unreal。如果您还没有 Unity 或 Unreal,您可以下载并配置这两个引擎的免费版本。安装后,只需对照Unity 配置指南或Unreal Engine 配置指南,集成相应版本的骁龙 Spaces SDK。然后,使用 OpenXR 兼容硬件,比如我们的骁龙 Spaces 硬件开发套件,即可开发头戴式 AR 项目!
请务必订阅我们的骁龙 Spaces 新闻简报,通过我们的平台了解最新新闻和更新。
如需了解有关 AR 开发的更多信息,请浏览以下资源:
Snapdragon Spaces is a product of Qualcomm Technologies, Inc. and/or its subsidiaries.
骁龙 Spaces 是 Qualcomm Technologies, Inc.和/或其子公司的产品。