高通 OpenXR SDK 使用指南(4)

高通 OpenXR SDK 使用指南(4)

    • 6.2 应用程序从 SXR SDK 迁移到 OpenXR SDK
      • 6.2.1 原生应用迁移
      • 6.2.2 Unity应用迁移
      • 6.2.3 UE4应用迁移

6.2 应用程序从 SXR SDK 迁移到 OpenXR SDK

6.2.1 原生应用迁移

应用模板

  • Common
    • SXR 原生应用程序和 OpenXR 原生应用程序都使用类似的 Android 原生活动示例(参见 https://github.com/android/ndk-samples/tree/main/native-activity)
  • Differences
    • SXR原生应用继承SvrApplication,实现Initialize、AllocateEyeBuffers、Update、Render、Shutdown,创建SXR应用实例。
    • OpenXR 本机应用程序没有任何基类。 反而。 它在 Android 原生活动之上使用 OpenXR API。
  • 迁移提示:
    • 保留原生活动模板
    • 删除 SvrApplication 依赖
    • 删除 SvrApplication 接口的实现。 对于 SXR SDK 相关部分,迁移到 OpenXR API。 对于非 SXR SDK 相关部分,请根据原生 Activity 生命周期移动到正确位置。

SXR API vs. OpenXR API

  • SvrApplication::Initialize
    • SXR原生应用可以在SvrApplication::Initialize的实现中做初始化工作。 例如,它可以为渲染准备模型数据。
    • OpenXR 没有初始化接口。 相反,OpenXR 应用程序应该在初始化阶段执行以下操作:
      • 先调用 xrCreateInstance
      • 调用 xrGetSystemProperties 获取系统属性
      • 调用 xrEnumerateViewConfigurations 和 xrEnumerateViewConfigurationViews 获取视图配置

SvrApplication::AllocateEyeBuffers

  • SXR 本机应用程序可以在子类的实现中分配眼缓冲区存储,或者只使用基类 SvrApplication 的实现
  • 在 OpenXR 中,眼睛缓冲区存储不是由应用程序分配的。 相反,这是由运行时管理的。 运行时提供组织在交换链中的图像,应用程序可以将其渲染到其中。 OpenXR 应用程序调用 xrCreateSwapchain 和 xrEnumerateSwapchainImages 以获取用于渲染的眼睛缓冲区存储。

SvrApplication::Update

  • 在渲染之前,在渲染循环中调用此 API。 SXR 本机应用程序使用 sxrGetPredictedDisplayTime 获取当前帧的下一个预测显示时间。 接下来,它使用 sxrGetPredictedHeadPose 获取预测显示时间的预测姿势。 有了预测的姿势,应用程序可以为预测的姿势计算视图矩阵和投影矩阵,并在渲染中应用视图和投影矩阵。
  • 在 OpenXR 中,帧同步和预测显示时间由 xrWaitFrame 提供。 有了预测的显示时间,OpenXR 应用程序可以调用 xrLocateViews 来获取预测的视图和投影矩阵以进行渲染。

SvrApplication::Render

  • 该 API 在渲染循环中被调用以执行渲染。 在此 API 中,SXR 本机应用程序直接绑定到眼睛缓冲区并渲染到其中。 眼睛缓冲区是 SvrApplication 的受保护成员,因此子类可以直接访问它。 SXR 本机应用程序调用 sxrSubmitFrame 来提交呈现的帧。
  • 在 OpenXR 中,应用调用 xrWaitFrame 等待合适的时间开始渲染。 它在帧渲染开始前调用xrBeginFrame,然后调用xrAcquireSwapchainImage获取交换链图像进行渲染。 接下来,它调用 xrWaitSwapchainImage 以确保交换链图像处于正确的访问状态,渲染到交换链图像,并调用 xrReleaseSwapchainImage 以释放交换链图像。 最后调用xrEndFrame提交帧信息。

6.2.2 Unity应用迁移

以下是从 SXR 应用程序迁移到 OpenXR 应用程序的一般步骤:

  1. 将所有项目更新到 Unity 版本 2020 LTS+。
  • Unity OpenXR 仅适用于 2020 LTS+ 版本,因此请先将 Unity 编辑器更新到合适的版本
  • 过程中,解决Unity API和结构变化导致的脚本错误
  1. 完全删除 SXR SDK
  • Assets/SVR 文件夹可以直接删除。 对这些文件的任何直接引用也应删除。
  • 所有依赖SXR SDK的脚本、素材、预制件都应该去掉依赖,改成对OpenXR或相关Unity方案的依赖
  1. 启用 Unity 官方 OpenXR 插件
  • 按照Unity文档中的步骤,对Unity OpenXR方案有一个大概的了解
  • 一般在包管理窗口导入OpenXR插件,修改一些配置等。
  1. 导入并启用 SnapdragonOpenXR 包
  • 此包扩展了 Unity OpenXR 以支持 Snapdragon OpenXR 平台
  • 软件包中有详细的自述文件,描述了启用 Snapdragon OpenXR 的过程
  • 基本上,所需要的只是更改一些配置
  • 对于控制器和输入,目前可以使用 Unity 新的 InputSystem 将输入事件绑定到 Khronos Simple Controller

完成此过程后,应用程序应与 OpenXR 一起使用以实现渲染和输入等基本功能。 查看 Unity OpenXR 插件文档。

6.2.3 UE4应用迁移

  1. 将引擎版本至少更新到 4.26。
  2. 启用 OpenXR 插件。
  3. 禁用所有其他 VR 插件。
  4. 删除所有与 SVR 相关的脚本和资源。
  5. 将 OpenXR 插件添加到项目并启用它。 参考UE4官方VR Template项目设置和初始化OpenXR。
  6. 对于 OpenXR 输入,使用 KHRSimpleController 绑定操作。

你可能感兴趣的:(笔记,sdk,xr)