Unity Meta Quest 开发(一)导论:开发现状与主流 SDK

此教程相关的详细教案,文档,思维导图和工程文件会分享在 Spatial XR 社区。这是一个高质量 XR 开发者社区,博主目前在内担任 XR 开发的讲师。该社区提供专人答疑、完整进阶教程、从零到一项目孵化保姆服务(包含产品上架App lab)、投资|融资对接、工程文件下载等服务。

社区链接:
SpatialXR社区:完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子

在这里插入图片描述

本篇文章配套的视频链接:【2023 VR+MR全硬件开发教程】:一、开发导论(主讲:YY)

📕开发平台分类

VR(XR)头显的开发按照程序运行的平台分类主要可以分为一体机应用PCVR 应用。一体机应用就是直接运行在 VR 头显内的应用,它的算力由头显本身提供。PCVR 应用就是需要将头显和电脑进行串流,它的算力由电脑提供,头显只负责显示画面

因为目前来说电脑的芯片比一体机头显内置的芯片更加强大,所以通常来说 PCVR 应用相比一体机应用会有更好的画质,但是一体机应用也有它的优点,就是方便。因为玩 PCVR 需要有一个头显和电脑串流的步骤,串流分为有线串流无线串流。有线串流就是需要将头显和电脑通过一根串流线进行连接,那么我们玩 PCVR 可能经常会受到这根串流线的束缚。无线串流就是需要将头显和电脑通过 WiFi 进行连接,那么这就需要一个比较好的网络才能有流畅的体验。并且你的电脑配置也决定了是否能流畅地玩 PCVR 游戏。但是一体机应用就比较方便了,头显开机之后就能直接玩,没有什么束缚。那么以上就是 PCVR 应用和一体机应用的区别,大家需要根据自己的需求选择哪一种类型的开发。

📕Quest 一体机开发分类

那么我会先从 Meta Quest 一体机开发讲起。Quest 一体机开发按照输入类型分类可以分为手柄功能的开发(比如操作手柄按键去控制人物)和手势追踪(用自己的双手去与虚拟物体进行交互)。

然后按照应用中的背景环境分类的话可以分为 VRMR 。VR 就是完全虚拟的环境。MR 就是能在现实场景中看到虚拟的物体,并且能和虚拟物体交互,虚拟物体也能和现实物体交互,比如虚拟物体与现实物体产生遮挡关系、虚拟物体能够与现实物体发生碰撞。 Quest 头显能够通过它的视频透视技术(Video See-Through)看到现实中的环境,但是透视只是将原来虚拟世界的游戏背景替换成现实世界的图层,然后将虚拟物体叠加在现实世界的图层上。如果想要实现虚拟物体和现实物体的碰撞和遮挡,就要用上一些 MR 的技术。这方面 Meta 已经在不断完善它的 API 了。因为最近 Quest3 出了嘛,它有两个 RGB 彩色摄像头和一个深度传感器,透视的清晰度更高,并且能对周围场景进行扫描,对 MR 的支持肯定会更好,并且 Meta 在 Quest3 发布会上也着重强调了 Quest3 的 MR 体验,这说明 MR 在未来可能会是一个非常值得研究的方向。包括明年会出的Apple Vision Pro,也是注重MR体验。身为开发者,我们也可以提前做一些技术积累,应对未来快速发展的时代。

在这里插入图片描述

📕Quest 一体机开发主流 SDK

要想开发 XR 应用,我们需要使用一些 XR 开发的 SDK,也就是软件开发工具包。那么我们先来看一看目前市面上有哪些主流的用于开发 Quest 一体机应用的 SDK。本系列教程使用的是 Unity 引擎进行开发,因此我会列出一些 Unity 版本的 SDK。

在这里插入图片描述

首先是 OpenXR+XR Interaction Toolkit(XRI)的方案。这个 OpenXR 是什么东西呢?在 OpenXR 还没出现之前,XR行业发展的早期,不同的 XR 设备都维护着它们各自的 SDK,供开发人员制作出能在相应设备上运行的程序,因此开发者需要根据不同的 XR 设备厂商选择不同的 SDK 进行开发。但是如果在不同设备上移植同一套程序就比较麻烦了,因为可能会出现 A 厂商的 SDK 无法兼容到 B 厂商的设备上。这就会导致如果我想要使用不同设备的人都能体验到我开发的程序,就需要为每一种设备开发一个特定的程序版本。那么这显然是巨大的负担。而开发者希望 XR 行业能有一套统一的标准,只要编写一次代码,就能兼容所有的设备。这样开发者只要专注于程序开发本身,而不用在意设备间的差异。

而 OpenXR 就是为了简化 XR 开发而制定的一套标准。相当于在编写的 XR 应用程序和不同的硬件设备间新增了一个中间层,最上层是 XR 应用程序,最底层是硬件设备,而这两个层的中间夹了一个 OpenXR 层,它向上提供一套统一的开发 API,不同的开发引擎对该 API 进行二次封装,提供给 XR 应用开发者使用。而不同的设备厂商为硬件编写支持 OpenXR 标准的接口,使得中间层能够向下兼容对应的硬件设备。如今,越来越多的 XR 设备开始支持 OpenXR 标准,这意味着选用 OpenXR 进行 XR 设备的开发可以成为一种通用的方案。

在这里插入图片描述

而 XR Interaction Toolkit 是 Unity 官方提供的开发 VR/AR 程序的工具包。结合 Unity 中的 OpenXR 插件,就能开发 XR 应用了,并且理论上适用于所有支持 OpenXR 标准的头显。那么这套方案适用于开发 VR 手柄相关功能,比如移动,传送,转向,抓取,射线交互,点触交互,点触交互就比如直接用手去点击一个 UI 按钮。那么 XR Interaction Toolkit 的优点就是跨平台,易上手。但是目前来说一些复杂的功能需要自己实现,比如手部物理,抓取手势等功能。不过这个XR Interaction Toolkit 目前也是在不断更新,每次更新都会新加一些功能,也许在未来它会内置更多复杂的功能。

OpenXR+XR Hands 的方案是用来实现手势追踪的,OpenXR+Meta OpenXR Feature 的方案是用来实现 MR 的。但是 XR Hands 和 Meta OpenXR Feature 目前还处于早期开发阶段,提供的功能不是很多。

接下来是 Oculus Integration:

在这里插入图片描述

它是 Meta 自家的SDK。能够用于手柄功能的开发,手势追踪(包括抓取,点击,射线交互,识别手势,比如我摆出一个剪刀手,能被Quest识别出来),然后还有 MR 的开发。这款 SDK 提供的功能是挺多的,但是它也有一个缺点,就是 SDK 迭代速度很快,可能前一个版本中的一个组件到了下一个新版本,使用方法就发生了很大的改变。并且我感觉它的官方文档某些地方写的挺乱的,可能不易看懂。

除此之外,还有 UltimateXR,它也是一款比较好用的 XR 开发框架。(https://www.ultimatexr.io/)

还有这个 AutoHand,它是一款付费插件,具有非常优秀的手部物理交互系统。

📕Quest PCVR 开发主流 SDK

那么既然讲了 Quest 一体机开发的 SDK,我也顺带讲一下 PCVR 的一些主流的 SDK。首先这个 OpenXR+XR Interaction Toolkit 的方案也是适用的,然后还有像SteamVR,VRTK,
UltimateXR, Auto Hand,VR Interaction Framework,HurricaneVR,都是比较不错的选择。

在这里插入图片描述

📕新手入门开发的 SDK 推荐

最后总结一下,如果要开发 Quest 一体机应用,手柄功能的开发我推荐用 OpenXR+XR Interaction Toolkit 的方案,对于新手来说容易上手,并且它的相关教程目前是最多的。如果你想开发手势追踪或者 MR 的内容,目前我推荐用 Meta 自家的 Oculus Integration。如果要开发 PCVR,然后用 Quest 串流。我也推荐新手从 OpenXR+XR Interaction Toolkit 入手,如果想要实现更复杂的功能也可以尝试其他插件。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在使用Quest开发无缝场景加载时,需要注意以下几点技巧: 1. 避免资源过度消耗:在场景切换过程中,需要加载新的资源,如果过度消耗资源会导致卡顿和延迟,因此需要在设计场景时尽可能减少资源的使用。 2. 合理布局场景:当一个大型场景需要分成多个区域进行加载时,需要考虑不同区域之间的联系,尽量设计成相邻的区域,以提高场景切换的稳定性。 3. 异步加载:使用异步加载可以避免长时间等待资源加载完成,提高场景加载的效率和稳定性。 4. 懒加载:将场景的资源按需加载,只有在实际需要用到的时候才进行加载,这样可以避免不必要的资源浪费,提高场景的加载速度。 5. 预处理场景:在场景运行前,对场景进行预处理和优化,尽量减少在场景运行时的资源消耗和运行开销,以提高场景的流畅性和稳定性。 综上所述,无缝场景加载需要综合考虑资源的使用、场景的设计、异步加载、懒加载和预处理等因素,以实现流畅稳定的场景加载效果。 ### 回答2: 在进行Quest Unity开发的过程中,保持场景流畅稳定的无缝加载是非常重要的。以下是一些技巧,可以帮助你实现这一目标。 首先,你应该正确地管理场景对象。在每个场景中,只加载必要的对象。这样可以减少内存使用量,并且加快场景加载速度。 其次,你可以尝试使用场景剪辑来帮助实现流畅的加载。使用场景剪辑可以使你的场景在加载时只显示其中的部分,而不是全部加载。这样减少了渲染负载,可以提高场景的性能。 第三,你可以采用异步加载来减少场景加载时间。使用异步加载可以在主线程之外加载场景资源,这可以减少在场景加载期间的延迟和画面卡顿。 最后,你还可以优化场景的渲染和材质,从而减少场景的复杂度。这可以使场景更快地渲染,从而加快场景的加载速度。 综上所述,使用正确的管理和加载技巧,以及良好的渲染优化,可以实现流畅稳定的无缝场景加载。这些技巧可以帮助你打造出更好的Quest Unity应用程序,提供更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YY-nb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值