不惜一切代价交付预告片
拆解《Deliver At All Costs》的完全可破坏世界

Unity:让我们先谈谈这个游戏。
丹尼尔·尼尔森,游戏导演:在不惜一切代价交付中,你将扮演温斯顿,一个在一切可破坏的世界中脾气暴躁的快递员。你正在交付你能想象的最疯狂的东西——从一条在车里翻滚的巨大一吨剑鱼,到让汽车飞起来的气球。一切都基于物理。
拉尔斯·奥尔松,首席执行官,图形和关卡设计:它位于一种1950年代美国风格的世界中。我们花了很多时间创造一个与那个时代一致的美好氛围,配以和谐的音乐和声音。

这个游戏一个非常独特的方面是完全可破坏的世界。你能告诉我一点关于你是如何创造这一点的吗?
拉尔斯:世界的可破坏性影响了我们构建素材资源的方式以及使用的几何体和网格的数量。一切都需要是双面,所以如果你摧毁了某样东西,你期望看到内部——它不仅仅是一个空壳。我们想让这个世界成为一个非常反应灵敏和沉浸的地方,所以你所做的一切都会影响环境。
你们是如何处理一切都崩溃的素材资源设计的?
拉尔斯:我们在建模每个建筑、道具或素材资源时都考虑到这一点,并确保为3D模型的不同元素添加相关的元数据。然后我们将其导入Unity,并将其打碎,以确保有合理数量的部分可以崩溃。在Unity中设置这一切的过程相当复杂,以确保一切在被摧毁时感觉良好。我们通常会通过每栋建筑至少驾驶20-30次,只是为了知道从各个角度摧毁它的感觉是否良好。
我们为不同类型的素材资源设置了自定义管道。
乔纳坦·约翰逊,技术总监:是的,我们在Blender中建模时就尝试稍微打破它。所以在那个阶段,你已经将屋顶、窗户和墙壁分开,你可以根据材料对其进行分类并分配元数据。
然后,当我们将其导入Unity时,我们在里面有自定义工具,可以将所有这些部分进一步破碎成更小的块,并且这也会考虑Blender中的元数据。
通过我们的管道,我们可以指定建筑的哪些部分应该有玻璃效果,例如,这会自动设置粒子效果、声音效果等。你为所有不同类型做这个,然后我们有一个工具,让你按下一个按钮,它会创建整个烘焙设置,包括物理、优化和所需结构,以便你可以快速达到迭代驾驶感觉的目的。

拉尔斯:在设置建筑或素材资源以供破坏时,我需要在具有环境上下文的场景中测试设置。我不止一次发现自己意识到,过了一段时间,我偏离了轨道,开始在场景中摧毁完全不同的东西。可以说,很容易在乐趣中迷失自我。
乔纳坦:一开始的破坏想法相当简单:如果我们拿一栋建筑,把它拆分成一堆零件,并给它们添加物理效果——会发生什么?一切都是混乱,所有东西到处爆炸。但我们能够通过一些预处理步骤解决大部分问题,以避免不必要的碰撞等等。
最终我们遇到了最大的问题,公平地说,我们从一开始就预料到了——性能。这一直是这个系统最大的挑战,并且在整个制作过程中都是一个持续的努力。这迫使我们重新思考一些基本的事情,以便控制它。然后,也许最重要的优化之一是应用聪明的剔除逻辑,以限制同时存在的物理对象数量。
你们用来保持性能的技术有哪些?
乔纳坦:我们有很多对象。当完全加载时,建筑物可以有大约一百个零件或物理对象,这相当多——通常情况下,复杂建筑物可能只有个位数。这导致物理引擎占用了大量性能,但当然也带来了很多绘制调用。
我们使用的主要技术之一是非常非常激进的剔除。我们得到了很多来自相机角度的帮助,这在如今这种类型的游戏中是相当独特的。
它是俯视图,几乎是正交的,给人一种等距的感觉。我们确实利用这一点来进行优化。因为我们总是知道相机将要看的方向,我们可以确定,相机右侧或左侧的所有内容,例如,将不会被显示。所以我们经常利用这一点来确定哪些元素在屏幕外。即便如此,我们发现仍然需要将相当一部分帧预算分配给物理。游戏中还有很多其他东西,比如AI汽车在四处行驶,很多游戏代码在运行,这也占用了很多性能。我们真的需要挤出每一丝性能,让物理引擎发挥作用。
我们最终对很多自己的游戏系统进行了大量优化。但我们也对一些不是我们自己构建的系统进行了优化。例如,我们在大多数场景中使用了Unity的地形系统作为地面网格,但由于相机的原因,我们并没有真正使用LOD,因为你总是从相同的距离观看游戏。地形系统有其内置的LOD功能,这每帧占用了几毫秒的帧预算,而我们并不需要这个,但没有办法关闭它。所以我们实现了自己的混合解决方案。我们基本上将地形烘焙成了一个网格,这为我们节省了几毫秒。我们还通过对 decal 渲染的优化获得了一些巨大的节省。我们在纹理中大量依赖 decal 来增加额外的细节,因为我们有很多不同类型的素材资源。

拉尔斯:我们使用Unity地形对象及其工具也有巨大的优势——Jonatan所说的优化发生在游戏过程中,但作为关卡设计师,我仍然可以使用Unity地形工具,而不必考虑那部分。
丹尼尔:我们做的另一个重大优化是调整粒子系统。当我们将它们改为无光照时,节省了很多。你多年来在这些小部分上工作的努力汇聚在一起会产生不同。
乔纳坦:我们在破坏效果中使用了很多粒子。如果我们要进行真正现实的破坏,我们需要成千上万的部件,这样是行不通的。
可以说,破坏有几个不同的步骤。首先,你有整个建筑,然后你有建筑被分成部分,然后每个部分又分解成网状粒子,这就是粒子系统。这便宜得多,我们使用大量的灰尘来隐藏所有我们不希望玩家看到的小细节,但它以一种良好、连贯的方式将一切融合在一起。
Lars:它隐藏了过渡。生成灰尘粒子系统隐藏了真实物理体与它们变成粒子之间的过渡,因此感觉尽可能流畅。
丹尼尔:我认为整个游戏中最令人印象深刻的事情之一是,如果你在PlayStation® 5或Xbox Series X上玩游戏并摧毁你看到的一切,无论你做什么,你仍然会保持60帧每秒。
我想问的最后一件事是关于物理的。在游戏中,有几个不同的领域,物理变得非常有趣,当然是可破坏的建筑,还有在你驾驶时货物在移动卡车床上移动的方式。
丹尼尔:货物实际上是为整个游戏中的每个任务定制的。有一个任务是当你送这个巨大的鱼,马林鱼时,它是用骨头设置的。
乔纳坦:我们有一些基本的东西是相同的。由于你送的大多数包裹都是为了以某种方式影响汽车和驾驶,我们通常开始时只是添加一个物理连接在包裹和汽车之间,以查看这种互动如何创造有趣的时刻。
显然,有很多脚本在运行,以使功能在游戏中运作良好。例如,对于鱼,我们给汽车添加了很多力量,并玩了很长时间,以使其感觉刚刚好。这本身就创造了有趣的互动——只需在汽车上放置一些疯狂的东西,让物理引擎来解决,这是一个好的开始。
拉尔斯:玩家的汽车本身也严重依赖物理,但我们也需要调整很多东西,因为物理可能有点不可预测。例如,如果你从悬崖开下去并在空中停留一段时间,我们发现你通常会遭受的伤害比你的直觉告诉你的要少,因此我们增加了伤害因子,以便汽车的反应更像你期望的那样,而不是物理引擎自动导致的那样。

乔纳坦:所有汽车当然也是可破坏的。玩家的汽车大约有36个可以掉落的部件,而且它们都是可变形的。
对于汽车和零件,我们使用物理引擎和碰撞,但我们也计算所有的力,并试图弄清楚损坏应该是什么样的。有时我们必须在损坏数字上作弊一点,以使其感觉像是与您所做的事情相对应。
对于门,如果你撞到门,我们可以把它打掉并添加一个关节,使其摆动并悬挂,然后如果你再撞它,它就会完全掉下来并留在地上。你还可以失去卡车的轮子,这会影响驾驶,因为你开始在金属上行驶。如果你失去两个前轮,你就无法转向,但你仍然可以驾驶——当然我们有办法修理它们。
丹尼尔:我们实际上在玩家汽车上遇到的最大挑战是它倾向于翻滚,所以我们不得不做很多不同的技巧。例如,对于每个离地的轮子,汽车上的重力会增加,以稳定它并将其压向地面。我们遇到的另一个问题是,如果你撞到平民,他们通常会被卡在汽车的许多碰撞体之间,因为我们有36个可拆卸的部件。为了解决这个问题,我们将设置更改为仅使用少量大型碰撞体。看到平民被卡在车里是相当不舒服的,因为他们的布娃娃设置会开始失控。
你在游戏中最自豪的是什么?
丹尼尔:我认为是让一切都可以被破坏。游戏中大约95%的东西都是可破坏的。
乔纳坦:并且以60 fps运行。
拉尔斯:我们尽量不重复素材资源,以便玩家能够探索世界并在世界各地发现新事物。而且由于一切都是可破坏的,带有物理效果,即使你开车穿过同一栋房子一百次,它也不会以完全相同的方式崩溃。总是有新的东西,我认为这使得游戏非常具有重玩性。
不惜一切代价交付在PC和PlayStation 5及Xbox Series X|S上可用。要阅读更多关于使用Unity制作的项目的信息,请访问资源页面.
