译/VR陀螺 Welkin
在近日苹果正在召开的WWDC 2023上,RealityKit Tools团队的Tricia Gray带来了主题为“为空间计算打造伟大的游戏”的演讲,旨在帮助开发者了解能够为Apple Vision Pro创造怎样的游戏体验。此外,她还分享了为该平台创建游戏的关键构件。
以下为讲实录(VR陀螺翻译,基于原文略有修改):
Tricia Gray(图源:苹果)
大家好!我是Tricia Gray,在RealityKit Tools团队工作。今天很高兴能和大家谈谈为Vision Pro制作游戏的问题。
空间计算使各种新的游戏类型成为可能,它具有独特的渲染、音频和输入特性。
当涉及到可以使用哪些框架和工具在上面构建游戏时,你有几个选择,包括RealityKit。但首先,我将让你了解到在这个新平台上可以做哪些类型的游戏。
Vision Pro是一个独立的空间计算设备。它具有高分辨率的屏幕,宽阔的视野,以及出色的刷新率。空间音频是无比惊艳的。还有LiDAR,可以追踪手部动作和玩家周围房间的形状。玩家可以通过该设备的高质量透视功能与周围环境保持联系。
空间计算设备有着令人振奋的可能性,让你可以创建各种不同的游戏类型。
图源:苹果
你可以构建跨越沉浸感范围的游戏,这完全取决于你想要吸引玩家的多少注意力。
所有应用程序和游戏都在“共享空间”(Shared Space)中开始。这意味着你的游戏可以与其他游戏和应用程序以及玩家的周围环境一起存在于这个空间中。在玩家的现实桌面上可能有一个虚拟棋盘,或者有一只坐在地上的虚拟宠物。所有这些应用程序都在一起,玩家可以与任何一个交互。
当你进入“全空间”(Full Space)时,就可以把所有注意力都放在你的游戏上。这时将关闭其他的所有窗口(Windows)和体积(Volumes),将体验集中在你的内容上,同时仍然让玩家通过透视与周围环境保持联系。这可能适合于动作游戏——你正在积极地玩游戏,但仍与现实世界互动。例如,你可以让宇宙飞船从墙上的洞里飞出来。
完全沉浸式(Fully immersive)体验则是指游戏占据了整个视野。有一个虚拟环境取代你的房间,你不再能看到现实世界。
当然,你也可以制作传统的2D游戏。它们在一个虚拟窗口中运行,玩家可以将这个窗口随心所欲地放大或缩小。它甚至不必是一个垂直的窗口,而可以是一个铺在地上的平面。玩家可以把窗口挂在墙上或放在桌面上,或者把它作为有史以来最大的屏幕放在自己面前。
玩家可以像在iOS上一样与你的游戏互动,但他们不是通过触摸屏幕,而是看着一个对象,然后用手指敲击来选择它。你还可以连接蓝牙控制器或键盘,就像在iOS上一样。透视功能此时很有帮助,因为你可以向下看到正在使用的手柄。
你还可以通过添加一些3D元素来为2D游戏增色。例如,你的窗口有真正的深度,所以可以在单独的图层中渲染对象,并获得真实的视差效果。也可以拥有从平面出来的元素,如烟雾或火花。或者你可以添加对自定义手势的支持。
有了所有这些选项,你就有很多东西需要考虑了。
在设计游戏时,请考虑如何利用这些新的机会来获得游戏体验,从拥有一块巨大的高分辨率屏幕,到拥有可以在自己房间里玩的个人游戏。你的游戏可以出现在玩家的桌面上;他们可以把它放在墙上;可以有一些东西飞出来,落在玩家的手中。你可以利用玩家周围的真实世界,或者将他们传送到一个截然不同的地方。
图源:苹果
在Vision Pro上渲染、音频和输入的工作方式,可能与你在其他平台上已习惯的方式不同。
当在共享空间中运行时,你的游戏内容与其他应用程序、系统UI和透视的内容一起被绘制。由于渲染是共享的,框架确保所有应用程序的渲染不会相互干扰。在这种模式下,你可以通过MaterialX使用表面着色器和几何图形着色器。在xrOS上渲染的工作方式与你习惯的方式有所不同。你无需渲染每个像素,而是描述应该渲染的内容——所有的模型、纹理和着色器——然后设备会为每只眼睛自动渲染。
该平台渲染游戏的另一个好处是,它可以运用动态注视点来提高分辨率。动态注视点是一种技术,渲染器会在玩家的眼睛所看到的部分使用更高的分辨率。这意味着你可以在这些地方获得更清晰的分辨率,而无需支付渲染整个场景的成本,所有这些都不需要做任何艰苦的工作。
默认情况下,RealityKit渲染物体的方式是使它们与周围的真实世界对象逼真地融合在一起。RealityKit会对玩家房间里的实际照明进行采样,并将同样的照明应用到你渲染的对象上。对于材质,RealityKit使用了一个基于物理的光照模型,具有典型的参数,如粗糙度、镜面和金属性。这与采样的光照一起,提供一个逼真的外观。
而你可以选择自己想要的规模,从现实到虚拟。
你可以使用MaterialX创建自定义着色器内容,并在Reality Composer Pro或其他图形软件包中编辑着色器图形,而不是使用内置的PBR着色器。你还可以为对象分配自定义的IBL,以获得自定义的照明效果。
另一个考虑因素是,有一些系统范围内的效果会被应用于渲染的内容。这样做的目的是让你的游戏与其他应用程序更好地协同工作,并保护玩家。
当你的内容隐藏在玩家周围的物体后面时,深度缓解会使其略微透明,这可以避免物体漂浮在房间里的感觉。当玩家离你的内容太近时,近场晕影会使你的内容变淡。这可以防止你的内容在近平面上出现裁剪问题。透视功能允许正在接近你的人突破渲染视图,所以他们不会在你没有注意到的情况下撞到你。
最后,当渲染对象靠近真实世界的物体时,会对渲染对象添加接地阴影,使它们感觉更融入于场景中。
完全沉浸式渲染的工作原理与共享渲染类似,但在这种情况下,你的应用程序是唯一可见的东西,而不与透视内容和其他应用程序共享屏幕。在这种模式下,会渲染一个环境取代玩家周围真实世界的景色。渲染工作与共享模式下类似,你仍然是描述场景,设备会渲染它。但是由于你控制了玩家所看到的一切,所以有更多的自由。例如,你不必使用与玩家所在房间相同的照明环境,可以让世界随心所欲地变亮或变暗。
Vision Pro的优势在于共享模式,但当你想把玩家送到不同的地方时,完全沉浸式的体验也随时准备着。
如果你想编写自己的引擎,CompositorServices API可以让你访问xrOS上的金属渲染。你可以将它与ARKit结合起来使用,ARKit增加了世界追踪和手部追踪,以创造一个完全沉浸式的体验。
在这种模式下,你可以完全访问屏幕,并为每只眼睛渲染场景。你可以使用完全定制的金属着色器和后期处理器。这使你能够用自己的虚拟内容完全取代真实世界的内容。透视和其他应用程序将被隐藏。
图源:苹果
音频也可以是沉浸式的。xrOS使用空间音频将玩家空间中的物体变得栩栩如生,自动匹配混响和真实房间的声学效果。
如果你使用标准的iOS音频API(如AVAudioEngine)播放音频,音频将相对于应用程序窗口进行定位。如果你想让声音来自玩家空间中的不同对象,应该通过RealityKit对场景中的特定实体播放音频。你还可以选择使用任何苹果或外部API来制作自己的音频。如果想让音频进行头部追踪,你需要使用ARKit来获得玩家的头部位置。
除了图形和音频之外,互动是沉浸式体验的另一个关键部分。毕竟,每个游戏都需要输入,而Vision Pro提供了多种与设备交互的方式。
你可以通过SwiftUI以及其他标准的系统手势,如拖动和放大,获得场景中对象的输入事件。这是基于物理碰撞。为了使手势在你的对象上起作用,它们需要有提供碰撞形状的CollisionComponent和将其标记为可互动的InputTargetComponent。
空间输入对玩家来说可能感觉很神奇,但你也有其他的输入选择,甚至是游戏控制器。
虽然系统的“看和点”(Look & Tap)操作感觉很自然,但你只有一双眼睛可以看,只有两只手可以点击、捏&或抓取。有些游戏需要更多的输入点,一种可能性是使用标准的蓝牙控制器。xrOS支持触控板、鼠标和键盘,以及基于蓝牙的游戏控制器。对于传统游戏来说,这可能是个不错的选择。
而且xrOS还允许更多非常规的输入,比如用你自己的身体作为控制器。你可以使用手部追踪来让玩家抓取虚拟对象,或者实现自定义手势,比如指着一个物体或者以空手道劈砍它们。你通过ARKit访问手部追踪时,设备会征求玩家的许可,就像应用程序想要使用你的位置或麦克风时一样。
在设计这种输入时,有些事情需要注意。比如只有当手被摄像头看到时才能被追踪,真正快速的手部运动可能很难被追踪。这些都需要考虑到。
图源:苹果
当你在全空间中工作时,可以请求场景理解。场景理解将提供代表玩家周围房间的虚拟网格,它可以进行平面检测,以找到水平和垂直表面。你还能得到这些表面的材质,无论是地毯还是木材。这让你可以把房间本身作为游戏输入的一部分。就像手部追踪一样,这需要得到玩家的许可。
对于所有的输入选项,你必须弄清楚什么适合你的游戏。使用玩家的身体进行直接输入是吸引他们的一个好方法,但举手和做手势也会随着时间的推移让人感到疲惫。如果你的游戏要玩很长时间,或者需要很多快速的动作,请考虑如何利用间接手势和注视。这样玩家就可以将手舒适地放在膝盖上,用看和点来操作,而不用移动他们的手。
Vision Pro是每天都要使用的设备,所以舒适性很重要。如果有必要,你也可以使用更传统的游戏控制器。
这个平台支持你在其他平台上所有的多人游戏和网络功能。基于Web的网络,基于低级套接字的网络,以及多人连接都可以为你所用。SharePlay还可以让玩家轻松地以更亲密的方式进行社交。
你甚至可以利用网络构建游戏,让一些玩家在iPhone或iPad上玩,并且仍然连接到Vision Pro。想象一下,与拥有iPad的朋友一起玩多米诺骨牌游戏,他们有2D体验,而你拥有丰富的、身临其境的3D体验。
图源:苹果
现在你对作为游戏设备的Vision Pro有了更多的了解,下面是可以用来创建游戏的框架。
根据你是想做的是2D游戏,存在于体积中的游戏,还是完全沉浸式的游戏,你有不同的选择。比如使用我们的沉浸式框架RealityKit,或者直接在Metal上面编写东西,甚至使用Unity引擎。
如果你已经为iPhone或iPad制作了游戏,在大多数情况下,你的游戏会自动在Vision Pro上的虚拟窗口中运行,使用 “看和点”进行交互。这也适用于兼容的3D游戏,它们将在一个平面窗口中运行。如果你希望游戏是立体的,必须使用空间计算API。
能够运行兼容的游戏固然很好,但如果你想充分利用Vision Pro的优势,就要针对它来制作游戏。这样你就可以使用手势进行输入,或添加2.5D元素,如透视或体积烟雾。
你可以使用SwiftUI或SpriteKit等2D框架为该设备构建2D游戏。你可以使用Unity来为xrOS构建游戏。如果你已经有想要移植的Unity游戏,或者你是Unity开发者,这是一个不错的选择。
最后还有RealityKit,苹果用于构建沉浸式空间体验的实时渲染框架。该API有很多新功能,使其成为为xrOS创建3D游戏的绝佳方式。RealityKit拥有制作伟大游戏所需的所有功能。
它拥有用于自定义行为的实体组件系统,以及对物理学、动画、粒子和音频支持的可扩展性。在渲染方面,RealityKit支持USD模型和自定义网格;MaterialX和IBL照明可以让你的对象融入现实世界;Attachments是一个新功能,它允许你将丰富的SwiftUI直接连接到你的RealityKit对象;使用SwiftUI,你可以使用窗口、体积、空间、锚点和传送门等功能,以各种方式混合透视和渲染的内容。你可以使用系统手势进行输入,也可以使用ARKit来访问手部追踪和场景理解。
要开始为xrOS构建游戏,你可以从xrOS模板创建一个新的Xcode项目。这会给你提供一个SwiftUI窗口,其中包含一个RealityView。在SwiftUI的层次结构中,RealityView包含游戏的3D渲染和模拟。
默认情况下,你的3D内容显示在一个由窗口形成的体积框中。你的内容被限制在该窗口内,并且会随着它的移动而跟随。
RealityKit是一个Swift API。Swift可以成为构建游戏的绝佳语言,但是如果你想使用其他语言也完全可以,只需在该语言和Swift API之间建立一个桥梁。
Xcode自带一个模拟器,你可以在没有设备的情况下立即开始开发游戏。当然,最好在真正的设备上进行测试。
图源:苹果
您的3D内容将默认显示在SwiftUI窗口中。作为游戏开发者,你要做的第一件事就是跳出这个窗口,并在玩家的周围绘制内容。你有一些不同的选择来实现。
你可以使用一个体积,其与窗口相似,但有一个重要的区别。对于窗口,玩家可以控制其大小,通过拖动角落使其随心所欲地变大或变小,而你的内容也必须适应窗口。如果窗口对你的内容而言太小,你的内容就会被裁剪。
对于体积情况正好相反,你可以定义其长、宽、高。玩家仍然可以把它放在任何想放的地方,但这个体积将永远是相同的大小。因此,你可以确保这个体积足够大以容纳你的整个体验,而且还可以确保内容不会被裁剪。
如果你根本不想使用体积,还可以使用空间。这允许你在现实世界中对玩家周围的内容进行渲染。例如,你可以用嗡嗡作响的蜜蜂包围玩家。
有不同种类的空间,对应不同的游戏类型。你可以使用共享空间与其他应用程序一起运行,如果你希望自己的游戏是唯一运行的东西,则可以使用全空间。
锚点可以让你把场景锚定在现实世界的一个对象上,并在它移动时跟随。你可以使用水平或垂直的表面锚,将实体固定在桌子或墙上。也有一些手锚,可以让你把内容锚定在玩家的手上。
传送门允许你在玩家的现实中打一个洞,以创造的梦幻般的现实。你可以把传送门锚定在一面真实的墙上,让传送门在墙上开一个洞,让玩家窥视洞内的渲染世界。你可以在这个传送门内渲染自己想要的东西,而传送门内的对象也可以出现在现实世界中。
RealityKit可以加载和渲染USD文件。开始使用体积内容的最简单的方法之一,是用预先制作的对象来组装场景,但为此你需要某种视觉工具。Reality Composer Pro是一个与Xcode捆绑的工具,它可以让你加载USD模型并预览它们在设备上的外观。当你使用Reality Composer Pro构建项目时,资产会自动优化以便在Vision Pro上使用。
我希望本次会议对空间计算游戏的开发计划有所帮助。这是一个很好的社交平台,可以和其他人一起玩游戏。我迫不及待地想看到你们为Vision Pro开发的成果。
图源:苹果
原资料:Build great games for spatial computing
https://developer.apple.com/videos/play/wwdc2023/10096/