在 Unite Shanghai 2024 游戏专场演讲中,Rokid 高级产品技术总监赵维奇带来了《最佳实践:优化 AR 眼镜中的游戏性能和用户体验》演讲,介绍了在 AR 眼镜上优化游戏性能和用户体验的最佳实践,包括系统层面的优化策略、提升 SDK 渲染效率的方法、以及应用层面的交互设计建议。

本文为演讲内容全文实录。

大家好,欢迎和感谢大家的到来,我今天要分享的主题是最佳实践优化 AR 眼镜中的游戏性能与用户体验,我们接下来会从系统 SDK 以及应用端用户体验 两部分来阐述的优化建议。

先自我介绍下,我叫赵维奇来自 Rokid。主要负责新场景和新产品的探索,以及全球开发者生态。

如何在系统和 SDK 端优化游戏性能

我们可先从系统 OS 和 SDK 端来分析,Rokid 是一家成立于 2014 年的专注于人机交互技术的软硬件平台产品公司,我们持续在 AR 眼镜端做了快十年的深耕,对于 AR 产品,我们当前主要的两个 AR 眼镜产品是 Rokid AR Lite 以及 Rokid AR Studio,这两款产品都属于中端芯片的产品。

AR Lite 搭载的芯片是高通骁龙 6 Gen1,这里有个对比,左边是 8 Gen3, 安兔兔跑分 220 万分,中间是 XR2 Gen1 也就是 Rokid AR Studio 中 Station Pro 搭载的版本,跑分 80 万分,最后就是我们 AR Lite 套装里的 Station 2,跑分 40 万分。从这个分数上可以明显看出三个芯片算力的差异。所以对于应用来说算力渲染资源是寸土寸金。

如果创建一个空间计算的应用可能要包括以下多个方面,包括感知和理解空间,数字内容渲染和展现以及交互融合的应用,这样的应用才是空间计算技术的应用。而这样的空间应用往往需要高性能实时渲染,我们自研的操作系统 YodaOS-Master 本身就为空间而生。

这是 YodaOS-Master 的架构图,大家可以看到从系统到服务,到 SDK 给开发者全栈全方位的服务。那如何在这样中低端芯片和实时高性能渲染中寻找平衡点,当我们需要创作这么一个空间计算的游戏应用的时候,如何来提升他的性能呢?

提到性能优化,从系统层面必须要做到以下三个方面,首先是降低负载,第二个是启动高性能模式,第三是 PTW 线程优先,让渲染更高效。

我们先说说看第一个降低负载。

我们来看看 CPU 和 GPU 上不同的优化措施。CPU 的话例如 Single Pass Rendering. 单通道渲染,Multiple Threaded Rendering 多线程渲染,如果用到数字人的话 可以对数字人骨骼动画优化,去除 GPU Skinning,以及角色合批减少 drawcall。在 GPU 的部分,首先可以降低渲染分辨率,但是这样的话可能会带来副作用就是画面变模糊,所以渲染分辨率的选择是一个最终需要权衡的设置,其次,优化 shader 复杂度,通过简化对窗口的毛玻璃的效果,以及对背景框的一些 shader 的操作进行一些简化,来实现优化,还包括减少无效的 Pass,例如有一些深度的 Pass 我们没有用到,就可以移除。另外,可以把大纹理拆解成小纹理,例如在 Station Pro 上的三联屏效果是一个曲面屏的形式,将三个应用整合在一个大纹理中显示,那么在我们资源较少的 Station 2 上,我们设计三联屏由曲面屏变成了直面屏,按需分配了小纹理,这样对于 GPU 的占用有明显减少;最后是减少中间纹理,减少渲染目标切换和 Blit,这里涉及到抗锯齿 MSA 的处理。

接下来我们以 Single Pass Rendering 为例,看我们如何完成 CPU 优化,这里是三种渲染方式。

第一种是双目立体渲染,第二种是多通道渲染,第三种是单通道渲染。

大家可以看到第一种是通过两个虚拟相机完成左右眼的渲染,整个 pipeline 都是独立完整的,这种方式最简单暴力,但他的效率也是最低的。

第二种的是将与左右眼无关的操作独立出来,比如这个 culi 和 shadows,也就是剔除和阴影;这个过程左右眼来说,只做一次来实现嫌少 CPU 负载的效果。

最后这种可以看到渲染通道少了一个,变成了单通道,这是通过纹理数组和双宽渲染来实现的,简单来看,就是最后这组流程更简单,操作更少,所以效率是最高的。

目前现在我们已经从原来的立体渲染直接升级到了单通道渲染。

而对于开发者来说,我们的 UXR2.0 SDK 使用 Rokid URP 后,开启 Single Pass 较 Multi Pass,CPU 明显性能提升;Single Pass 下的 FPS 比 Multi Pass 更加稳定。像 Single Pass 和多线程渲染,目前在 Unity 里都有做开关,开发者只要选择就可以实现优化。这个优化会随着我们的 SDK 释放给到大家。

第二个性能优化策略,就是启用高性能模式,通过 GPU 策略,最大限度利用 GPU 算力,而 CPU 也在高主频工作,从而降低各种操作耗时的目的。

最后第三个就是 PTW 线程优先,让渲染更高效。我们通过独占专用 CPU,设置 Unity 线程为 Binning mode,让 PTW 渲染线程能及时抢占 GPU,预处理后一帧的位姿并计算等方式,让渲染更高效。

所有这些性能优化的能力,我们会以系统优化以及 Unity SDK UXR 优化的形式把能力释放给到大家。我们已经做了很多工作 大家需要做的就是更好的使用系统和 SDK。

如何在应用端提高性能和优化用户体验

我们会以一下几个大家关心的主要的 AR 应用能力来举例。

平面检测

广泛应用于需要在现实世界的平面上放置虚拟物体的应用和游戏设计中。平面检测主要依靠摄像头和传感器的数据,通过计算和识别图像中的特征点,来确定现实世界中的平面位置和方向。常见的平面包括桌面、地面、墙面等。

首先,如何提升平面识别的效率。

我们从算法层面,为了我们的算法加速,我们这里引进了一个图像掩膜的概念。例如第一个例子中,已经生成平面的区域没有必要再次进行平面检测,通过这样的蒙版,对于已经存在的平面的区域,不再进行平面检测。第二个,我们可以结合语义分割,仅在我需要的区域进行平面检测。也就是说,仅在针对桌面进行平面检测,进一步的提高算法效率,以及找到更精准的平面边界。

其次,依赖平面检测的应用,没有平面怎么办。

对于一个依赖于平面的应用,如果没有平面是怎么办,这也是在可能经常会遇到的问题,我们会引入一个增强现实平面的概念,也就是我们人工提供一段轨迹,或者是一组点云,在空间中生成一个人工增强现实的平面,这个平面的角色上的其实是与我们真实的平面是一致的,并且也能够与真实平面交互。这样的话就让有一些需要强依赖平面的应用或者游戏,能够在任何地方都满足用户体验。这点上大家可以举一反三做出很多有趣的体验。

最后,平面检测精度不足怎么办。

例如我们检测一个桌面,但是检测出来的平面距离桌面总有几厘米的误差,而且还有浮动,这应该是经常发生吧。要解决这个问题,于是我们引入了虚拟平面矫正而这个方案,其实可以用在任何的需要矫正平面位置的应用中,大家也可以作为参考。简单地说就是,先要用户用摄像头正常的扫描桌面来识别平面,如果识别的结果是准确的话,那就确认这个平面结果,直接开始游戏或者应用。如果识别存在误差的话,用户可以通过手的位姿识别来校准平面的机会,此时用户可用手放置在桌面上,通过摄像头识别手的位置来生成游戏的平面。我们可以看一下这个例子。

我们这个例子就是会提示用户左右看来完成扫描桌面,扫描结束以后就会形成一个平面,大家可以看到这个平面跟桌面其实是有定偏差距离的。此时用户就可以把手放在桌面上,通过摄像头基于手的位置来重新生成平面,以这个平面为基准来开始这个游戏。这时候用户就可以玩到一个更贴合真实桌面的游戏了。

 Unite 2024 游戏专场 | 优化 AR 眼镜中的游戏性能和用户体验
打开网易新闻 查看更多视频
Unite 2024 游戏专场 | 优化 AR 眼镜中的游戏性能和用户体验

定位与跟踪

定位和跟踪是 AR 应用中常用的技术能力,SLAM (Simultaneous Localization and Mapping) 点云和 Marker 图像识别与跟踪 是两种不同的定位跟踪技术。在工作原理、应用场景,优缺点上都不同。SLAM 与点云的方案,计算复杂,实时性要求高,对环境光线、表面特征有一定要求,容易受到环境影响,对传感器以及例如相机有依赖,依赖一定精度要求。

Marker 图像识别,使用预先定义好的图像标记(Marker)作为参照,通过摄像头捕捉这些标记图像,并进行图像处理和识别,以确定设备或虚拟对象的位置和姿态。可识别我们预设好的一个模版,并且可以算出这个模版在 SLAM 下的具体位置。

首先,分享下 Marker 识别的算法特点,这个算法有什么特点,即使识别,即使触发。

其次,支持多人互动,对齐世界坐标系。

举例说,大家设计了一款游戏,玩家在同样物理的空间里面在玩这个游戏,我们如何快速地增加彼此之间空间中的互动呢?我们可以通过 Marker 来实现,例如我们都扫描了 Marker,就可以通过计算 Marker 在各自 SLAM 下的位置,实现虚拟坐标对齐,就可以把多人眼镜中的虚拟世界进行融合和同步,这样我们就可以在同一个空间中玩互动的游戏。

最后再次强调下 Marker 定位方案的技术特点:轻量级,容易落地。

无需提前部署服务器,也无需提前构建地图,是一个非常的容易落地的技术。

我这里有个例子,大家可以看到通过眼睛可以非常快速的,在 Marker 上重现数字化内容,识别快,跟踪稳,贴合好。

手势识别

手势作为自然交互的一种方式在空间计算的应用中发挥很大的作用,Rokid 应该行业内仅用单个摄像头来做 SLAM 和 3D 手势识别的公司,大家可以看到我们的手势可以做到识别 Skeleton 和完成 Meshing,达到 99% 召回率,并且能够做到延迟在 10 毫秒以内,误差在 5 厘米以内,CPU 的单占比也只有 30%,并支持多平台的应用。

现在演示的就是一个实时 Meshing 的效果,大家可以看到双手模型虚实重合,而每个指环节都被识别出来,并且带深度信息,可以做到 3D 手势。所以在做 AR 眼镜的游戏过程中手势是个非常重要的交互方式,大家可以看看下面几个游戏。

可以看到上面这个游戏中有些用了基础的手势能力以及自定义的手势能力,很多时候使用手势这种交互的方式本身就是极大的优化了体验用户体验,因为手势是自然交互,学习成本低,也更容易理解。

空间输入法

输入文字也是部分游戏设计中很重要的一部分,不管是跟 NPC 交流,还是跟其他玩家的社交需求,输入法在重交互的 XR 设备中显得至关重要。因此,我们也做了空间系统的输入法方案,来提升整个用户体验。

空间系统需要的输入法,首先得适应多种不同的场景,不管是 2D 还是 3D 用都要支持实体的键盘输入和虚拟的键盘输入,而且还要支持 UXR Unity SDK 的自定义软键盘。针对 AR 设备交互方式的多样化,键盘也要支持多样化的输入选择,例如键盘,手势,射线,Touch 板等。我们也做了让操作更简便和更方便在场景下应用的功能,例如联想词库,语音输入等。

我们先来看看,实体键盘表现,这是 2D 应用的输入,这是英文。这里有个亮点,因为空间应用的关系, 我们的推荐联想文字会随着我们光标跟随,这样的话一眼就可以看到。

接下来我们一个 3D 应用的表现,键盘输入切换成中文,可以明显看到有层次感。我们在看一下虚拟键盘的表现,我们主要对操作面板做了定制,因为我们 Rokid AR Lite 的触控比较小,这里对键盘做了缩小,方便滑动选择。这里是切换到中文输入。

现在是通过射线来选择,移动的范围会更大,大家可以看到针对不同的交互方式,键盘大小也会做响应的调整。

看一下其他功能的表现,这里是语音的输入,反应很快。我们支持多窗口切换。从 Chrome 浏览器切换到钉钉窗口,丝滑没问题。

 Unite 2024 游戏专场 | 优化 AR 眼镜中的游戏性能和用户体验
打开网易新闻 查看更多视频
Unite 2024 游戏专场 | 优化 AR 眼镜中的游戏性能和用户体验

所以不管是 2D 应用 3D 应用,只要在这个空间的应用的设计中,针对不同的场景,可以用不同的空间输入方式,来优化用户体验。

AI 多模态交互

大家最近可能关心的能力就是 AI,AR 是 AI 多模态能力实现的最佳平台。AR 眼镜本身具有语音和视觉输入,通过 AI 大模型的能力,大家可以相对容易的创造一个 AI 形象,作为 AR 眼镜里的陪伴,助手,宠物等,也可以作为游戏中的一个功能,来提升整个用户体验。

我这里先举个例子,这是我们制作的上的小宠物小鸟飞飞。

 Unite 2024 游戏专场 | 优化 AR 眼镜中的游戏性能和用户体验
打开网易新闻 查看更多视频
Unite 2024 游戏专场 | 优化 AR 眼镜中的游戏性能和用户体验

接下来,我们来剖析一下飞飞背后的技术原理,底座呢,可以接任何的开源大模型或其他服务,提供了基础的语音识别和理解能力,其次呢,我们还通过了常识记忆,自我认知和其他技能系统一些来满足的基本能力。听的部分语音输入处理,可以用任何一家的 ASR 的服务,语音输出的部分,同样可以用任何一个 TTS 服务。

这个基础功能,其实还可以做很多用户体验的提升,例如,首先,在语音输入的部分可以支持多语言,抗噪以及模拟语气,其次,基于大模型语音技术,可以实现嗯啊的口语化和自然的停顿等,另外,针对用户数据的记忆和学习,可以做到千人千面每个人的AI都完全不同。

我今天我们主要分享的一些 Rokid 在游戏和应用性能上,以及用户体验上优化的一部分经验。其中有部分底层的能力,我们会陆续集成到我们的 SDK 中,释放给所有的游戏的开发者和应用的开发者们。大家也可以非常方便的,在我们的开放平台和开发者社区里,挖掘更多游戏和应用优化的分享。我们非常欢迎大家来体验我们的产品,并在我们的产品上进行开发,大家一起来玩。

 Unite 2024 游戏专场 | 优化 AR 眼镜中的游戏性能和用户体验
打开网易新闻 查看更多视频
Unite 2024 游戏专场 | 优化 AR 眼镜中的游戏性能和用户体验

下面就是我们社区联系方式以及公众号的二维码,大家可以非常方便的获得到我们的 SDK 文档以及技术团队的支持。

Unity 官方微信

第一时间了解Unity引擎动向,学习进阶开发技能

每一个“在看”,都是我们前进的动力