骁龙 Spaces:开发头戴式 AR 体验的 OpenXR 实现
发表于 2022-09-15 11:48:26

 本文提及的 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 和生命周期

OpenXRKhronos Group 的行业标准 C API 规范,是一种快速将新硬件引入 XR 生态系统的方式。企业和组织可以为特定硬件创建 OpenXR 运行时实现。对于我们而言,骁龙 Spaces 运行时适用于支持头戴式 AR 显示器的兼容硬件产品。此运行时还可以通过 OpenXR 扩展实现其他功能,这样一来,就需要添加新的扩展,以方便用户利用这些功能。

OpenXR API 设计提供并支持多种编程结构和概念,其中包括:

  • 实例:启用应用程序和 OpenXR 运行时之间通信的对象。
  • 会话:涵盖 AR 应用生命周期(从创建到最终清除)的 AR 应用程序会话。
  • 动作:用户可以执行的移动和进程(例如,打开菜单)。
  • 交互配置文件:用于执行动作的物理输入源。交互配置文件使用交互配置文件绑定映射到相关动作。
  • 空间:映射和跟踪真实世界的参考框架(例如,用于映射虚拟对象的位置)。
  • 视图配置:渲染图像的视口。头戴式设备通常有两个视图(一只眼睛一个视图,有时使用焦点渲染),而智能手机一般只有一个显示屏。
  • 渲染:使用创建会话时提供的渲染引擎(如 Vulkan 或 OpenGL),支持交换链渲染和多层合成。
  • API 层:可以在应用程序和 API 之间插入的钩子(例如,用于日志记录、调试和验证)。

下图节选自OpenXR 参考指南,显示一个 AR 应用程序生命周期中这些构造和概念的程序化视图:

资料来源:Khronos Grouphttps://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 调用。

运行时(应用程序在用户设备上运行时)将涵盖以下生命周期:

  1. 用户在设备上安装一项或多项 OpenXR 服务,例如骁龙 Spaces Services、Oculus OpenXR Services 等。请注意,必须安装骁龙 Spaces Services(可以通过 Google Play Store 安装),骁龙 Spaces 应用程序才能正常运行。
  2. 应用程序请求相关 OpenXR 服务运行时进行通信。骁龙 Spaces 应用程序需要请求骁龙 Spaces Services。
  3. 应用程序请求一个OpenXR 实例,该实例具有相关 OpenXR 运行时支持的特定功能集。
  4. 创建一个实例,连接到服务,并将指针返回到应用程序。
  5. 然后,应用程序使用该指针启动实例,并在应用程序的整个生命周期与其通信。

游戏引擎的 OpenXR 基础层处理渲染工作,并将交互配置文件映射到应用程序输入代码。然后,应用程序可以请求具有其他功能的实例,例如控制器支持、手部跟踪等.

Unity 和 Unreal,结合骁龙 Spaces SDK,生成在目标设备上运行的游戏二进制文件。这些文件包含使用骁龙 Spaces Services所需的代码,因此不必担心相关的 OpenXR API 调用。

现在就使用骁龙 Spaces


骁龙 Spaces 提供了使用 OpenXR 兼容设备所需的一切(设计和运行时层面),避免直接面对 OpenXR API,可以专注于更高层面的开发任务。不过,了解实现细节总是有益处的,可以知道背后的工作原理。

在您准备开发下一个头戴式 AR 应用程序之前,请先访问骁龙 Spaces 开发者门户,浏览我们提供的文档,并注册下载骁龙 Spaces SDK for Unity 或 Unreal。如果您还没有 UnityUnreal,您可以下载并配置这两个引擎的免费版本。安装后,只需对照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.和/或其子公司的产品。

CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
微博关注
【免责声明:CSDN本栏目发布信息,目的在于传播更多信息,丰富网络文化,稿件仅代表作者个人观点,与CSDN无关。其原创性以及文中陈述文字和文字内容未经本网证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本网不做任何保证或者承诺,请读者仅作参考,并请自行核实相关内容。您若对该稿件有任何怀疑或质疑,请立即与CSDN联系,我们将迅速给您回应并做处理。】