六人团队如何在短短三个月内将《LEGO® Builder‘s Journey》移植到Apple Vision Pro

挑战:解决渲染和优化难题,三个月内移植到Apple Vision Pro; Apple Arcade, PC, Xbox One, Xbox X|S, PlayStation®4, PlayStation®5, Nintendo Switch™, Apple Vision Pro

《LEGO Builder's Journey》是Light Brick Studio推出的一款多平台解谜游戏,自登陆Apple Arcade以来,逐渐积累了人气,发展势头持续增强。在团队迎接空间计算的新时代,并将《LEGO Builder's Journey》这款游戏适配到Apple Vision Pro平台时,他们总结了一些重要的经验和心得。

一个初次涉足混合现实领域的工作室,如何在充分利用Apple Vision Pro的沉浸式特性的同时,确保游戏体验与其他平台(如移动端、PC等)保持一致?

由于乐高®积木是实物产品,Light Brick Studio意识到在Apple Vision Pro上创建一种让玩家在房间内与游戏元素交互的体验十分具有挑战性。对于游戏的Apple Vision Pro版本发布,时间也是一个限制因素。虽然团队之前曾在一两个月内完成过其他平台的2D界面移植,但这次进入空间计算领域的三个月时间安排非常紧张。

探索新维度

“一旦了解了平台对游戏及其玩法设计的限制,你就几乎可以创造出任何想要的体验,” Light Brick Studios的技术负责人Mikkel Fredborg解释说。

对于团队来说,将游戏移植到visionOS平台“主要是一个技术挑战,既要让游戏流畅运行,又要充分利用平台的完整体验。”这意味着需要进行多项技术改进,包括对用户界面(UI)进行全面重新设计,将原本平面的UI元素放置在房间中。团队还需要更新他们的渲染工具和方法,以确保最终产品的视觉质量和沉浸感。同时,平衡Unity和RealityKit两个系统,进一步增加了性能优化的难度。

“我们做过很多不同平台的移植,但这次是最复杂的,因为Apple Vision Pro与其他平台有很大不同,我们的目标是探索能在多大程度上提升这种体验,结果非常成功。” Light Brick Studio的总经理Karsten Lund说道。

成果

  • 在不到100天的时间内为Apple Vision Pro构建了游戏的80个关卡和60,353块乐高积木

  • 在Unity PolySpatial团队的支持下,节省了数周的开发时间

  • 保持了所有游戏玩法区域的完整性,仅进行了特定的性能优化,没有改变游戏的整体节奏

  • 实现了流畅的过渡,采用开放式混合现实风格,随着游戏的推进,沉浸感逐渐增强

重新设计UI和游戏玩法

《LEGO Builder’s Journey》的UI非常简洁,最多只有20个按钮,用于加载保存的游戏或重新开始关卡等操作,因此重新设计UI的工作量比许多游戏要小。团队在Unity中重新设计了UI,采用了GameObjects并为其添加碰撞体,以确保输入功能正常工作,同时能模仿visionOS的设计语言。

团队还需要考虑玩家身体移动的灵活性。除了UI,游戏中的所有内容都是用一款名为LEGO Digital Designer的工具通过乐高积木构建的。团队过去一直尝试在2D平面上模拟3D空间,但在Apple Vision Pro上,他们必须考虑到玩家可以在任何位置移动。为了适应完整的360度体验,团队重新设计了原本只能从特定角度观看的模型,以确保模型几何中没有漏洞。为了减少绘制调用(draw calls),团队还将多个网格合并为单个GameObjects。

Fredborg表示:“我们考虑到了玩家要走来走去的情况,并对模型进行了完整的360度优化。在将积木导入游戏时,我们去掉了积木内部的所有几何结构,移除了所有内部细节,因为这些细节永远不会被看到。我们利用现有的自动化工具,并对其进行了调整,以适应完整的模拟体验。”

*Light Brick Studio团队在编辑器中设置PolySpatial VolumeCamera组件的UI和事件的截图

管理Bounded模式下的布局

在早期,团队决定在有界(Bounded)模式下进行设计,这意味着他们必须在一个定义的体积范围内操作。如果尝试在这个范围外操作,元素会被裁剪且不可见,团队决定接受有界模式的限制。在这种模式下,除非玩家进行交互,否则无法获取玩家头部、眼睛或手部的位置/方向信息。只有当玩家做出捏合手势时,游戏才能知道手的位置以及正在交互的对象。当捏合结束时,这些信息也会消失。从这个意义上说,它类似于触摸屏,只有在玩家触摸屏幕时才能知道他们在做什么。

Fredborg表示:“我们不知道玩家在看什么,这是一个很大的变化,尤其是因为我们的游戏玩法需要玩家看着积木来选择它。我们解决了这些限制后,效果非常好,并且很好地融入了系统。最终,这种方式运行得非常顺畅,因为一切都朝着一致的用户体验方向发展。”

为MaterialX着色器提供支持

在《LEGO Builder's Journey》的最早版本中,团队使用了Unity轻量级渲染管线(LWRP)的自定义版本,随后在为Xbox和PlayStation移植时转向了高清渲染管线(HDRP)。为了适配Apple Vision Pro,他们首先需要将所有内容转换为基于通用渲染管线(URP)和Shader Graph的版本,然后再迁移到Apple的RealityKit。

为此,他们将Shader Graph中编写的着色器转换为MaterialX着色器,以便加载到RealityKit中。但团队遇到了一些障碍,发现结果并不理想,优化工作比预期的要多。

他们原本计划手动优化,但发现要实现自动化来满足规模化的需求。他们要手动修补着色器,找到重复的代码,然后替换这部分代码以确保它只执行一次。Fredborg承认:“让一切顺利运行是一个挑战,但我认为PolySpatial团队在推动优化方面做得非常出色。”

寻找理想的光照效果

由于游戏的开发时间紧迫,团队需要快速找到解决方案。Fredborg表示:“我们必须找到解决方案来提升游戏的逼真效果,同时支持实时光照和阴影。这是较大的改动之一。”

最初,他们采用了Apple Vision Pro的基于图像的光照(image-based lighting),目标是将其正确地应用到他们想要包含的材质上,比如塑料及其不同变体。他们还需要解决一些难以处理的元素,比如积木上的指纹和划痕。

由于游戏最初是为早期iPhone开发的,光照非常简单。团队使用了一种体积纹理(volume texture),就是带有烘焙环境光遮蔽(ambient occlusion)的3D纹理,以便可以从场景中的任何位置采样。他们会对点采样并分析环境光遮蔽的程度。由于Apple Vision Pro不支持3D纹理,他们需要将体积纹理转换为2D纹理,并从中手动采样。虽然这一过程目前在PolySpatial中已经自动化,但在Light Brick Studio团队刚开始处理还没有这个功能。

*Light Brick Studio团队在编辑器中设置夜间场景的截图

团队最初采用了塑料积木着色方式和体积纹理采样系统。随后,他们引入了实时光照(Realtime Lights)。当体积纹理逐渐充满整个场景时,他们需要调整外部光照。在开发初期,他们无法直接覆盖RealityKit的基于图像的光照,因此选择采样不同的立方体贴图,并让RealityKit的光照逐渐淡出。

Fredborg解释说:“我们当时想实现的效果在技术上并不可行,但我们找到了一种变通方法:降低积木的光滑度,并在将其传递给RealityKit光照系统之前调整了不同的参数。现在,在PolySpatial和RealityKit中已经可以直接覆盖基于图像的光照,开发者将能更轻松地实现类似的效果。”

创建柔和的阴影

Light Brick Studio团队还需要为阴影找到解决方案。虽然可以在Apple Vision Pro中为某些元素添加阴影,但这并不是标准功能。为此,团队在Unity中将阴影渲染为高度图(height map)或深度图(depth map),然后将其发送到RealityKit并重新采样。他们在Unity的Metal后端将场景渲染为阴影贴图(shadow map),然后将其传递到RealityKit的渲染端。

Fredborg解释说:“如果还需要达到每秒90帧的渲染速度,其实能在渲染中实现的效果是有限的。我们使用了一个非常小的阴影贴图,64 x 64像素,然后将mipmap级别组合到单个纹理的RGBA通道中,这样在RealityKit中只需一次采样就可以生成看起来像柔和阴影的效果。因此,当积木非常接近表面时,阴影非常锐利,但当它远离时,阴影变得更加柔和。我们用一次纹理采样实现了这一点。”

对于Unity中的实时光照(Realtime Lights),他们使用了Shader Graph中的PolySpatial Lighting节点,该节点在被转换为RealityKit可处理的格式后,会扩展为多个Shader Graph节点。

Fredborg表示:“对于RealityKit,修改着色器的唯一方法是通过类似Shader Graph的界面。”在Unity端,团队发现可以在Shader Graph中创建自定义代码函数,只要遵循某些特定规则,之后就可以将其转换为MaterialX节点图。他继续说道:“这真的帮了我们大忙,否则Shader Graph里就会变得一团糟。”

将游戏的帧率优化到90 fps

在团队将视觉效果推向新高度的同时,他们也遇到了一些保持平台流畅运行的难题。开发采用了双系统架构:所有内容从Unity传递到RealityKit,而两者的渲染技术不同。这意味着Unity负责处理游戏逻辑,而RealityKit负责渲染视觉效果,因此需要进行优化以实现90 fps的流畅运行。其中一个主要挑战是确定性能瓶颈是来自Unity端还是RealityKit端,团队需要多次尝试才能找到解决方案。

Fredborg 解释说:“最初,PolySpatial工具包会将我们在Unity中做的所有内容都传递到RealityKit,因此每个GameObject或变换都会被传递过去。当时我们无法关闭特定层的传递或反射。它会镜像所有内容,包括UI渲染、画布渲染和动画粒子系统。现在,有一个过滤器可以设置为不跟踪特定层,但在当时,我们必须找到一种方法来清理那些在RealityKit端不需要显示的内容。”

团队需要优化GameObject的层级结构。在其他平台上,每个乐高积木由三个或更多链接的GameObject组成,但在visionOS上,团队将每个积木的GameObject数量限制为最多两个,以减少Unity和RealityKit之间的数据传递。这一优化效果显著,为团队带来了很大的成功。

提升定格动画(stop motion animation)的性能也是一个亮点。游戏中包含瀑布动画,这些瀑布通过交换积木上的网格实现,由数百个不同的GameObject组成,导致性能较慢。“我们最终采用了一种分步处理的方式,而不是为每个GameObject逐帧处理。我们会等待并在不同瀑布流之间每隔几帧处理一次。这大大提升了性能。”Fredborg说道。

寻找合适的解决方案和合作伙伴

在为 Apple Vision Pro 开发应用的过程中,Light Brick Studio 团队必须保持灵活、快速解决问题,并通过不断迭代来完善应用。

Fredborg说道:“我认为必须戴上头盔才能真正理解那种体验。我们建议进行多次构建,并尽可能多地使用真实设备进行测试,重点关注触摸和运动交互。虽然你可以在Mac上运行模拟器来了解应用的运行情况,但输入方式是不同的。这是一个更注重物理交互的平台。”

最终,团队对游戏的表现非常满意,很大一部分原因在于与强大的支持合作伙伴的合作。他继续说道:“Unity的PolySpatial团队在Slack和Discussion论坛上都非常及时地回应我们。当我们遇到阻碍时,他们会迅速为我们提供解决方案,这非常有帮助。他们为我们提供了强大的支持,并希望我们能够打造出更高质量的PolySpatial版本。”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值