解决Laser Matrix中的技术和性能问题

ADAM AXLER / UNITYSenior Content Marketing Manager
Sep 23, 2025
突破 | 激光矩阵
为方便起见,此网页已进行机器翻译。我们无法保证翻译内容的准确性或可靠性。如果您对翻译内容的准确性有疑问,请参阅此网页的官方英文版本。

Marius Thorvaldsen、Martin Sivertsen 和 Sindre Askim Gronvoll 于 2016 年创立 Breach,旨在创造沉浸式游戏、XR 体验和 3D 模拟。在过去的九年里,这家外包工作室提供了 XR 解决方案,同时也开发了自己的游戏。在 2024 年,他们集思广益,开始原型设计,寻找新的内部项目。一个游戏概念迅速进入生产,成为 激光矩阵

该标题是一个混合现实益智动作游戏,健身、乐趣和未来挑战在这里碰撞。玩家可以解决基于光的难题,躲避移动的激光,并利用他们的敏捷和智慧解锁关卡。

今天,团队已经在 Meta Quest安卓 XR 上发布了 激光矩阵。我们与 Breach 的工程总监 Andreas Weibye 和游戏开发者之一 Jonathan Jørgensen 坐下来讨论为两个平台构建游戏的过程,以及他们如何克服技术和性能挑战。

什么是 激光矩阵?

Andreas激光矩阵 是一款 VR 中的运动动作益智游戏。它非常像街机游戏,可以将你的客厅变成一个危险的迷宫,你必须快速而灵巧地移动。

为 Meta Quest 和安卓 XR 的实施过程是如何工作的?

Andreas:我们并没有在项目开始时同时实施 Meta Quest 和安卓 XR。原型最初仅为 Meta Quest 开发。我们与该平台进行了广泛的合作,因此我们迅速使其运行起来。当我们开始这个原型时,安卓 XR 也并不存在,因此我们在开发过程中进行了移植。

乔纳森:我们开始使用Meta的“构建块”工具进行快速原型设计。这使得验证概念变得更加方便。我们最终意识到我们想要瞄准跨平台XR,并确保以更平台无关的方式构建游戏。核心游戏玩法并不依赖于特定平台的功能,因此跨平台的过渡很容易。

突破 | 激光矩阵
突破 | 激光矩阵

在实现OpenXR中的手部追踪时,你采取了哪些步骤?

乔纳森:我们从OpenXR运行时读取实时追踪数据。然后通过抽象层处理这些数据,将原始数据转换为位置和旋转,然后应用于手部网格。这些手部网格与Unity中内置的交互系统接口,这些系统提供了常见操作的工具,比如用手指触摸某物。然后,最后,我们自己的游戏玩法层叠加在其上。

这完全是关于从原始数据中进行多层抽象。许多XR游戏通常有类似的需求,因此我们尽量使用稳定的现有解决方案,并将它们整齐地结合在一起。对于激光矩阵,手部追踪没有很多非标准的方面。

突破 | 激光矩阵
突破 | 激光矩阵

团队遇到了哪些技术挑战?

Andreas:在场景和使用的组件方面,这是一个相当开箱即用的OpenXR设置。我们必须解决与手部失去或获得追踪相关的问题,这会导致在该帧中出现在不同的位置。在某个时刻,玩家开始失去手部追踪,这导致他们失去生命。

乔纳森:围绕手部追踪设计是一个更大的挑战之一。手上的不同接触点造成了一些问题。对于正常、慢节奏的用户界面交互,比如按按钮,这更直接。然而,在激光矩阵中,你的身体和头部不断移动,这可能会降低基于摄像头的手部追踪的准确性。

Andreas:在游戏外的用户界面中,我们实现了需要用手指触摸的按钮,而不是使用射线投射。根据我们的经验,使用手部追踪的射线投射不够精确,无法提供良好的游戏体验,因此这有所帮助。

乔纳森:对于“平面屏幕”游戏,开发者可以限制鼠标、键盘和控制器等输入的使用。XR是不同的,因为游戏永远无法真正停止你的物理手。例如,激光矩阵菜单中的按钮相当平坦,你可以将手穿过按钮。这是一个你不一定会设计的交互,实际上应该发生什么并不清楚。这是有效的按钮按压吗?一般来说,当你将更传统的用户界面模式转化为XR时,会有一些有趣的影响。

突破 | 激光矩阵
突破 | 激光矩阵

团队遇到了什么与性能相关的问题?

Andreas:我们主要的性能问题出现在图形方面。从一开始,就要找到透明度过度绘制的平衡。这是当前游戏设计中最大的挑战之一,因为如果你只使用这些框的轮廓,当你上下看时,你可以看到它们的位置并与其他东西进行比较。但是当你直视前方并试图理解与墙壁的距离或在不触碰的情况下可以伸展手的距离时,这就更困难。

由于我们希望用户能够同时看到整个迷宫并做出战略位置决策,我们需要一个透明度解决方案或替代方案,这两者都是GPU密集型的。

乔纳森:我们的一些解决方案影响了游戏的最终视觉效果。例如,我们改变了游戏区域的外部黄色边框。它曾经有一个透明的黄色色调覆盖整个墙面,但我们将其减少到仅覆盖边缘,并渐变到完全透明。由于游戏边框在游戏时始终可见,这持续减少了过度绘制调用的数量,这是我们帧时间的主要因素之一。

我们还查看了玩家在游戏中移动时试图避免的红色激光立方体。它们的表面有一个方形网格图案。我们可以采用与黄色边框立方体相同的方法,试图再次减少过度绘制。由于只有网格单元的边缘被完全渲染,我们将单元格做得更大,导致平均上更多的表面完全透明。

加载相关的性能问题也存在。每次关卡开始时都会出现一个大的峰值。起初,我们只是认为这与加载关卡有关。加载激光矩阵关卡意味着必须生成许多不同的元素。然而,罪魁祸首特别是音乐。通过分析,我们发现系统在每个关卡中重新加载音频。我们配置它与应用程序一起预加载音乐,这使得峰值不再明显。

Andreas:我们的一些性能问题是因为我们将一个原型转变为一个生产游戏。我们应该重写系统。

突破 | 激光矩阵
突破 | 激光矩阵

在构建过程中,哪些Unity工具和功能是至关重要的?

Andreas:Unity的好处在于它允许我们制作一个资产和一段代码,并从一开始就使其在多个平台上工作。

VFX Graph很棒,因为它允许我们的产品负责人,他没有艺术倾向,勾勒出他设想的视觉效果的样子。从那里,我们的技术艺术家和开发者进行了打磨。

乔纳森:Shader Graph是制作游戏的一个非常有价值的工具。游戏中的大多数3D元素都是纯着色器。除了几个立方体、手和按钮,这个游戏中几乎没有实际的3D模型。

XR设备模拟器也被广泛使用。当你在XR中工作时,测试在长远来看可能相当费力和消耗精力。在所有步骤之间——站起来、戴上头盔、四处移动等等,时间真的会累积起来。通过设置模拟器并使用鼠标输入来刺激交互,我们节省了很多时间和挫折。

Andreas:由于我从一开始就有XR设备模拟器可用,我想以更容易在隔离中测试的方式开发新功能。这促使我从一开始就编写更模块化、可测试的系统,这也提高了我们的代码质量。

乔纳森:Unity Profiler在帮助我们检测性能峰值来源方面也至关重要。例如,关于我提到的音频加载问题,Profiler帮助我们识别了峰值和在那个确切时间触发的调用。这种信息通常会给出一些明确的提示,告诉你在实施解决方案时应该从哪里开始。

突破 | 激光矩阵
突破 | 激光矩阵

Unity 6中哪些新功能或更新最有益?

乔纳森:我们为相当多的目标构建,并在不同的上下文中进行。在跨平台时,我们需要构建具有不同配置的平台特定功能和服务。因此,在Unity 6中拥有构建配置文件的能力使我们能够为这些不同的平台量身定制我们的构建。手动执行这项工作将是繁琐且容易出错的。

你有哪些关键性能基准?

乔纳森:当我们标记性能问题时,这在XR中特别是由于运动病而成为一个大问题,我们测量了平均fps并寻找帧丢失。对于什么是舒适的或不舒适的,有明确的目标。

通过调整不同立方体着色器的阈值,我们在fps上获得了大约10%的提升。我们在一个测试环境中对游戏进行了分析,在那里我们绘制了游戏的最大立方体数量。这为我们提供了一个非常固定和可靠的测试环境。

Andreas:对于性能,我们的硬性限制是Meta Quest 2上的72 fps和Meta Quest 3上的90 fps。我们的平均帧率目标是达成的,但我们可以制造出用户获得较低结果的情况。这些是非常特定的情况,您可能会陷入最糟糕的境地。

乔纳森:在项目和团队层面上,我们的迭代时间在过去几个月中变得更加高效。作为一家公司,我们完善了质量保证流程,并将其与我们的自动化堆栈结合,现在我们的反馈和修复周期相当快。我们能够快速解决问题,以至于任务积压不会堆积或失控。

突破 | 激光矩阵
突破 | 激光矩阵

团队在开发过程中是否希望做得不同?

Andreas:我们应该早点开始使用OpenXR。在项目早期,我们计划使用Meta的房间标记功能来定义游戏区域的形状和大小。虽然它有效,但没有给我们带来我们所寻找的游戏功能,同时也带来了我们尚未找到良好解决方案的设计挑战。我们在房间扫描讨论中意识到了这一点。我们应该早点放弃那个系统,因为我们花了太长时间试图解决它。此外,回顾一下,一旦原型代码演变为生产代码,认识到该系统不再服务于设计将节省时间。

要了解更多关于使用Unity制作的项目,请访问资源页面