如何制作一款大规模的多人生存游戏?《V Rising》是对这一热门游戏类型的暗黑风格演绎——玩家将化身吸血鬼,在广阔的开放世界中展开冒险。

Stunlock Studios 开发团队怀揣着宏大的目标,并在开发初期就采用了 Unity 的面向数据技术栈(DOTS)和高清渲染管线(HDRP),为他们迄今为止最复杂的游戏构建了一个稳定且可扩展的基础。

通过使用面向数据技术栈(DOTS),Stunlock Studios 获得了灵活的代码架构,能够有效管理这个规模不断扩大的项目。同时,高清渲染管线(HDRP)实现了高保真的视觉效果,比如体积雾(Volumetric Fog),这对于营造哥特式氛围至关重要。

凭借明智的策略与得力的工具,Stunlock 工作室让《V Rising》在 PC 平台大获成功——抢先体验阶段便好评如潮,正式发售时再度赢得赞誉,随后又通过备受好评的 PS5 移植版延续了游戏的生命力。截至目前,这款游戏的销量已突破 500 万份


成果

• 创建了一个基于服务器的广阔游戏世界,面积超过五平方公里,包含八个独特的生态区域

• 实时流式加载并渲染了超过16 万个可交互对象

• 管理了 21,000 个烘焙预制件、450 个烘焙子场景、1,600 个 ECS 系统和 2,700 个粒子系统

• 通过使用Unity Profiler快速定位低效代码和不必要的内存垃圾,节省了数百小时的开发时间

• 通过使用SRP Batcher减少了数毫秒的帧延迟,提升了游戏的流畅性

• 创造了高玩家参与度数据,玩家平均游戏时长为 35 小时,解锁了超过 340 万个 PlayStation™Network 奖杯和 Steam 成就

• 实现了 PlayStation 5 专属功能,包括自动语音聊天、对 DualSense™ 无线控制器的触觉反馈(Haptic Feedback)、自适应扳机和控制器音效的支持,以及 PlayStation™Network 奖杯系统

规划游戏世界

对于《V Rising》的背景设定——瓦尔多兰大陆,Stunlock 设想了一个可交互的、持久的世界,包含八个独特的生态区域。每个区域都被雾气笼罩,具有实时的昼夜循环和光影效果,这些必须在运行时保持高性能,以提供稳定的在线游戏体验。工作室联合创始人兼系统程序员 Fredrik Haraldsson 表示:“我们决定全力以赴,在 Unity 中不受限制地实现这一切,这给了我们很大的自由,让我们可以创造梦想中的吸血鬼王国。”

使用DOTS扩展开发规模

Stunlock 一直在密切关注 Unity 最新发布的 DOTS,它为许多预期的性能挑战提供了解决方案。尽管这项技术仍处于实验阶段,但《V Rising》的开发还处于早期,且 Stunlock 的程序员已经具备面向数据设计的经验。早些采用这项技术还让他们有机会与 Unity 更紧密地合作,并通过在生产环境中测试 DOTS 来获得项目支持。

Stunlock 的开发者们意识到这一技术能为《V Rising》带来巨大潜力,于是开始用Unity 2019.3搭建项目的新技术框架;与此同时,团队其他成员继续沿用开发《Battlerite》时的自研引擎进行原型设计,确保开发进度不受影响。

解决性能瓶颈

虽然使用 DOTS 和 ECS 构建《V Rising》项目架构非常耗时,但这样做的好处很快就显现出来了。Stunlock Studios 的联合创始人兼技术总监 Rasmus Höök 表示:“通过 DOTS,我们构建了一个能够处理更多内容的基础,并且可以有效地利用流式加载的实体和资产。”子场景和资产流式加载用于在运行时根据玩家在游戏中看到的内容动态加载和卸载元素。这种技术使玩家在探索《V Rising》的庞大世界时可以获得更流畅的体验。

使用 ECS 构建《V Rising》意味着可以利用子场景烘焙来管理游戏内容。由于实体与 Unity 的核心场景系统不兼容,它们不能直接包含在 Unity 场景中。相反,烘焙允许从场景中加载实体,将其 GameObject 和 MonoBehaviour 组件转换为可以在运行时加载的实体和 ECS 组件。


Rasmus 认为,运行时数据与编辑器数据的清晰分离是使用 DOTS 和实体的最大优势之一。他解释道:“在编辑器中,我们创建编辑用预制件(authoring prefabs),这些预制件本质上是带有 MonoBehaviors 的标准 GameObjects。然而,这些预制件仅用于编辑目的,不会直接用于游戏本身。相反,它们会经过一个称为烘焙(baking)的过程,被转换为运行时组件。由于编辑用预制件仅在编辑器中使用,我们可以向它们添加功能和数据以优化工作流程,而不必担心影响实际游戏。”

以这种方式使用编辑用预制件让更新《V Rising》变得更加容易。当需要调整某个系统时,Stunlock 的程序员无需让美术师和设计师手动修改成千上万个关联预制件,只需更改烘焙代码(Baking Code)来提取更新系统所需的数据即可。Rasmus 表示:“这不仅有助于维护,显然也提升了性能。因为预制件上的编辑器专用数据不会被转换为运行时组件,自然规避了这些性能开销。”


突破技术瓶颈

正如 Stunlock 所预料的那样,使用实验性技术会带来一些挑战。Rasmus 表示:“我们最初遇到的许多问题都是自己造成的。我们创建的许多实体太大,包含太多组件,这意味着我们无法像希望的那样将大量实体组合在一起。为了解决这个问题,我们将实体缩小并增加了内存块的大小,这使情况大为改善。在游戏已经开发完成的情况下,除了从经验中学习,我们能做的只有这么多。”

由于 DOTS 技术与 Unity 传统开发模式差异显著且更为复杂,Stunlock 采取了渐进式团队适配策略。开发初期,程序员仅需通过编写简单组件和编辑代码(authoring code)来完成小型任务,以此熟悉新的工作流程。随着熟练度提升,团队很快便能运用 C# Job System 等 DOTS 组件开发工具,显著加速整体开发进程并提升质量管控效能。

技术美术师 Filippa Arvidsson 解释道:“通过使用 C# Job System,我们构建了一些工具,可以扫描项目中的网格以查找重复几何体,或计算网格的多边形密度,以识别可能需要减少子像素三角形数量的资源。”

“DOTS 面向数据的方法是我在 Unity 中编写代码时新的首选方式,因为一旦你克服了从 GameObject 转向系统思维的初始障碍,就会发现它非常直观。当然,性能优势也是一大加分项。”


对于技术背景较弱的团队成员,Stunlock 在 DOTS 代码库之上实现了一些工作流程,使他们能够更直接地为项目做出贡献。其中一个工作流程是允许创建预制件组件,这些组件可以生成并监听预定义的事件,例如玩家生成时触发的效果,或在满足某些条件时应用的增益效果。通过这个系统,设计师可以在不需要深入了解 DOTS 的情况下,创建模块化且易于管理的游戏玩法元素。

第二个工作流程主要用于功能实现,让设计师可通过受限 API 在脚本层进行操作。这使他们能够自主编写能与组件交互的脚本,并注册到不同事件系统中,从而显著提升生产效率。


通过高清渲染管线(HDRP)释放图形和游戏玩法潜力

《V Rising》基于 HDRP 构建,这不仅实现了更高精度的画面表现,并以有趣的方式塑造了玩家的游戏体验。

Rasmus 表示:“体积雾(Volumetric Fog)无疑是塑造游戏视觉风格最核心的特效。当美术团队确认采用 HDRP 管线后,整个艺术风格都围绕其特性进行了适配,因此 HDRP 影响了游戏的整体外观。”除营造哥特式氛围、增强法术特效的表现力外,体积雾更被创新性地转化为动态视野遮蔽系统,通过物理级光线散射实时隐藏玩家不可见区域。

Stunlock 使用HDRP 的基于物理的天空(Physically Based Sky)来管理《V Rising》的昼夜循环,这一机制对游戏玩法至关重要。在白天,如果玩家长时间暴露在阳光下会受到伤害,必须躲在阴影中移动。安全区域和危险区域必须明确定义,以避免这一机制让玩家感到沮丧。

Filippa 表示:“实时渲染非常重要,不仅可以创建一天中不同时间之间的精美过渡,还可以直观地告诉玩家哪些区域会被阳光灼伤。HDRP 在这方面表现得非常出色,允许我们的美术师为不同区域和不同时间设置不同的体积配置文件(Volume Profiles),并通过平滑混合实现自然过渡。”


Stunlock 充分利用了 HDRP 的脚本化功能,构建了数百种自定义视觉效果、着色器和后处理效果。Filippa 回忆了一个作为自定义后处理效果实现的效果:使靠近摄像机的物体变暗。这一效果贯穿整个游戏,并从一开始就为《V Rising》设定了氛围。

她说:“以最开始的墓穴场景为例,高耸的石柱以压迫性构图笼罩吸血鬼角色。后处理通道(Post-Processing Pass)会根据物体与摄像机的距离动态加深近景柱体的明度,瞬间营造出令人不安的压抑氛围,这种视觉叙事的效果极具冲击力。”


Stunlock 还根据他们的需求定制了 HDRP 的源代码,删除了冗余的功能和计算,以提高性能。他们扩展了体积配置文件(Volume Profiles),以驱动超出典型 HDRP 效果的组件。这使得技术背景较弱的美术师和设计师能够在编辑器中独立配置不同场景中的天气、音乐和音效等元素。

Filippa 表示:“能够将这些功能开放给美术师,真的非常强大。通过这种方式,他们可以在最少的技术支持下,让每个生态区域在一天中的不同时间看起来完全符合他们的期望。这无疑节省了大量时间。”


进军PlayStation 5平台

《V Rising》是 Stunlock 的首款主机游戏,当索尼联系他们时,他们抓住了这个机会来迎接新的挑战,并触达 PlayStation 5 上潜在的数百万玩家。

程序员首先升级了 Unity 版本,以利用 ECS 1.0 的额外性能改进。PC 版本的主线程曾是一个限制因素,因此他们使用 C# Job System 将工作分配到其他线程。安全调度帮助他们轻松地在主线程上创建不干扰其他任务的工作。Rasmus 表示:“我们的大部分开发是在 Entities 1.0 之前完成的,现在升级后,我们经常使用日志记录来查看发生了什么,这也非常有用。”

在图形方面,Filippa 指出批处理对 PlayStation 5 的渲染性能有很大影响,因此他们在 HDRP 中构建了工具,用于改进的 UDIM(U-Dimensional)工作流,使他们能够将具有不同材质的子网格组合在一起,以减少绘制调用。她说:“这可能为我们节省了数毫秒的 CPU 消耗时间,因为渲染数据可以以更高效的方式发送到 GPU。”


掌控黑夜

从 PC 版 1.0 正式发布、PlayStation 5 平台登陆,再到近期与科乐美数字娱乐(KONAMI)旗下传奇 IP《恶魔城》(Castlevania)的联动合作,《V Rising》一直在不断壮大。这是一个小团队取得的非凡技术成就,他们敢于大胆尝试新技术,为玩家创造了引人入胜且独特的体验。

通过 DOTS,Stunlock 能够在《V Rising》中添加“更多的内容”,同时将性能问题降到最低;而 HDRP 则帮助他们创造了令人难忘的视觉效果,为玩家提供了更加沉浸和引人入胜的体验。如今,《V Rising》是基于 DOTS 开发的规模极为庞大的游戏之一(以代码行数衡量),而 Unity 正在利用从该项目的开发中获得的洞察,使编辑器对于开发规模宏大的游戏的创作者来说更加高效和稳定。

Rasmus 表示:“我们最初并没有打算加入这么多动态的和可破的坏元素,这些都是水到渠成的,因为我们能够做到。这证明了 ECS 的强大,以及它能够实现的显著性能优势。如果没有 DOTS,今天的《V Rising》将会大不相同。”

Unity 官方微信

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

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

ad1 webp
ad2 webp
ad1 webp
ad2 webp