《守望先锋》2.0版本幕后揭秘:新技术"环境状态"

近日,《守望先锋》官方公布了一篇新博文:开发团队最近为《守望先锋》2.0版本开发了一项全新的技术,我们想借此机会让玩家社区能够抢先一睹游戏引擎得到的改良。

大家好!我是Marco Alamia,《守望先锋》团队的一名软件工程师。我们最近为《守望先锋》2.0版本开发了一项全新的技术,我们想借此机会让玩家社区能够抢先一睹游戏引擎得到的改良。为了实现这个目标,我征求了另外两位《守望先锋》开发者Bruce Wilkie和Fabien Christin的帮助。

我们为引擎添加的新技术叫做“环境状态”,它很快就成为了地图制作设计的热门之选。这个功能是在《守望先锋》2.0版本的引擎与工具中开发和完善的,而其核心理念则来自我们天赋异禀的光照美术师Fabien。有请Fabien向我们解释这个颠覆了地图创作过程的想法的诞生历程,并带我们了解他的设计过程。

我们来探索环境状态吧!

提出想法

Fabien:《守望先锋》设定在一个光明而缤纷的世界里,这种格调往往会通过地图得到展现。在地图的创作之初,关卡设计师会用大型的灰色方块勾勒出整体架构,让有趣而平衡的玩法成为可能。在这个阶段里,最重要的就是设计出有趣的地图!经过许多小时的测试之后,环境美术师会将临时占位的灰色方块转换成精雕细琢的建筑和环境素材,玩家畅游的地区也就有了生机。

除了环境之外,为了支持地图所讲述的故事,我们还需要制作光照。在《守望先锋》2.0版本中,我们想打造出新颖而有趣的氛围,彻底改变地点的观感想象一下,你来到了努巴尼,见证了在非洲的夕阳下熠熠生辉的未来之城;你降落在阴雨霏霏的巴黎,所有的商店都闪烁着金辉,邀你在雨停之前进屋小坐、大嚼可颂。

这就是环境状态的设计目的。有了这个全新的系统,我们就能将光照、音效和特效等主要元素分解成独立的素材,然后像搭积木一样把它们组合到一起,制作出所谓的“环境情景”。我们可以让整个地图共用同一个情景,也可以在每个地图中设置多种情景。

我们以快节奏的死斗地图墓园为例。你也许体验过这里的夜间场景,夜晚为环境投下了阴冷的蓝色色调,而建筑周围点燃的火炬则是明亮的橙色,两者形成了鲜明的对比。

假设我们想尝试不同的情景,比如说阿努比斯神殿的沙漠暖色调。有了新的环境状态系统之后,我们只需要获取阿努比斯神殿的环境状态,然后应用到墓园里就行了。

现在的效果已经很棒了!然而,我们还可以更进一步,调整太阳方向,投下更多有趣的阴影。为此,我们新建了一个环境状态,它只会覆盖太阳的方向。我们把这个新的“方块”放在阿努比斯神殿的方块上面。

好了!

得益于环境状态的灵活性与便利性,我们只需要区区几个小时,就能制作出地图的光照原型。快速迭代能力让我们能够进行更多尝试、发挥更多创意,并能为地图增添多样性。

但还不止于此。此前的例子主要是装饰性的,但环境状态还能够动态混合,开发出激动人心的玩法机会。想象一下,你被派往墓园执行任务,去修复一处守望先锋卫星链路。在抵御归零者的袭击时,一场沙尘暴迅速地接近了当地,你们身边顿时飞沙走石!我们可以在晴天情景上添加全新的沙尘暴环境状态,逐渐增大云层覆盖和沙尘效果密度,为任务增添更多的挑战。

凭借这一全新的技术,我们可以制作出各种天气变化,例如雷暴、降雪和其他刺激的环境情景,这样每场游戏都会带来独一无二的体验。

现在我们重新有请Marco,从技术的角度带我们领略环境状态的原理。

实现环境状态

Marco:Fabien的愿景非常远大,所以我们必须设计出功能强大的系统,才能实现《守望先锋》2.0版本的环境所需要的效果。经过几轮头脑风暴之后,我们决定让多种环境状态能够同时展现出来,并且井井有条地排在一个堆栈里。堆栈可以动态地变化,因此可以在任意时候添加或移除环境状态。引擎随后会处理堆栈,将所有环境状态混合起来,制作出最终的环境效果,我们就能看它具备的魔力。如果你曾经用过Photoshop,应该明白这其实就是将几个图层混合在一起,产生一张最终图像

其基本理念在于,每一个环境状态都能定义环境的某些因素,例如风力风向或太阳的颜色。当状态被推送到堆栈上时,只有它提供的因素会对结果产生影响。例如,这个堆栈取自里约卢西奥俱乐部,推送到堆栈的环境状态会改变镜头的曝光和颜色等级:

底部的环境状态会提供地图的全部因素,顶部的环境状态会覆盖掉颜色等级,以产生《暗黑破坏神》中的那种凶险氛围。在游戏过程中,环境状态可以在堆栈中动态地添加或移除,因此增添了多样的变化,使地图更栩栩如生、活跃动感。

因素

在美术团队和Fabien的指导下,我们确定了多个环境状态需要定义的关键因素。例如,后期处理是第一个被引擎转换成因素的功能。后期处理是所有现代引擎的共同元素,它能够添加多种筛选和效果,例如控制最终图像的对比度、亮度和饱和度。如果能根据游戏中发生的状况动态地调整图像对比度和亮度,就能为最终图像赋予无与伦比的真实度和动态感。得益于环境状态技术,这一点在《守望先锋》2.0版本中得以实现。

全新系统中的另一个强大的工具是迷雾因素。通过更改参数,我们可以驱动迷雾的外观和质感,美术团队就能让环境的视觉效果根据游戏模式、玩家位置甚至时间不断演变。例如,我们可以让万圣节的地图显得更为诡异,让地图特定位置附近的迷雾更为浓厚,或者让某一个英雄任务中的沙尘暴随时间不断积聚。

我们的许多因素都能与其他视觉属性产生互动,例如云层在地图上投射的阴影,甚至还与风力和风向等不可见的属性相关。我们可以更改的最重要的两个因素是太阳和天空。顾名思义,这两个因素能让我们更改环境的部分关键特性,例如太阳的位置与颜色、使用的云层,以及时间是否为白天。你可以想象得到,这是环境状态系统中非常实用的一部分,它使我们能够大幅改变地图的观感。

这两个因素(太阳和天空)利用到了引擎中最为先进的领域之一:光照系统。光照对《守望先锋》2.0版本至关重要,它能帮助我们确立环境的外观、观感和氛围。 然而,对这个系统的改动可能会对内存与性能产生影响,因此我们必须在可行的范围内谨小慎微。幸运的是,我们的团队中有一位杰出的工程师Bruce Wilkie。他深谙光照系统的奥妙,帮助我们获得了出色的效果,并且维持了《守望先锋》这类竞技射击游戏所需的优越性能。

光照

Bruce:我们为《守望先锋》鲜艳缤纷的视觉效果投入了许多精力和关注。每当我在精美的地图中遨游,我都会想起自己为每一个光照环境的细节所付出的心血。阳光反射到房间里,泛光照亮了废墟,夜晚的街景在色彩中栩栩如生,这些例子都证明了光照在游戏的观感中所起到的重要作用。在为《守望先锋》开发引擎的时候,我们与美术团队密切合作,以设计出必要的光照功能,将2D的概念美术转换成3D场景中的特色,例如光线表面反射(通常被称作“全局光照”)、金属映射出周围的场景,以及在静态环境中无缝地移动物体光照。这些特色都需要大量的运算,在我们希望让引擎达到的帧率下,CPU的负荷可能会高得不切实际。为了让《守望先锋》能够在高帧率下运行,同时保留高级光照特色,我们会尽量提前运算光照信息,将运算结果打包,然后在客户端中使用该数据

我们来深入了解在《守望先锋》启用光照特色所使用的数据。对于不会移动的物体,例如墙壁、地板和天花板,我们构建了一些数据。第一种数据会告知引擎击中表面的光线量,以及光线源自的方向。通常来说,这个数据会被称作“光照贴图”,不同的引擎会在光照贴图中存储不同“风格”的数据。

在这张图片中,你会看到地图表面所产生的光照贴图示例。左侧展示的是所有光线的最终合成效果。中间展示的是表面渲染的图表。我们的美术师会利用这个视图,确保表面存储了足够多的光照数据,以实现他们所追求的视觉效果。右侧展示的是引擎如何打包光照贴图,以减少它们占用的内存。

在发布《守望先锋》的时候,我们会为命中表面的所有光线生成颜色和方向。我们会利用方向数据来改变凹凸表面上的颜色——面对该方向的表面越多,就能产生更多颜色。在2.0版本中,我们会使用三个光照方向,这样就能独立更改每一个颜色通道(红色、绿色和蓝色)。额外的方向深化了环境光照的鲜活度,从而提升了图像质量。

对于静态物体,我们生成的数据会告知物体周围可见的环境多寡。这个数据通常被称为“环境光遮罩”。在发布《守望先锋》之后,我们开始在多张地图中生成这种数据,例如巴黎和哈瓦那地图。在2.0版本中,所有地图都会自动生成这一数据,使视觉效果进一步改善。

而对于角色等能够移动的物体,我们会在世界场景中生成许多示例位置,然后为它们逐一编写光照数据——也就是我们为静态物体构建的同类数据。当移动物体靠近其中一个点位时,物体就会使用它的数据进行照明。在2.0版本中,我们会生成更多示例位置——尤其是在空中——这意味着移动物体的效果也会远胜往日。

如果你观看过暴雪线上嘉年华座谈会,你会发现地图已经拥有了多种不同的光照环境。对于每一个环境,我们想要共享尽可能多的数据,使下载与安装的磁盘大小保持在合理的水平。环境状态技术使引擎能够将单个地图的多种光照环境分组,使此前提到的大部分预运算数据能够在分组光照环境中共享,这样就能大幅缩减数据体积,玩家也无需为每一种变化下载并安装过多的数据了。更优质的光照、更多光照变种、更少的数据——全都得益于环境状态功能。

在环境状态的支持下,《守望先锋》2.0版本会比以往更为动态,同时优化了美术师的工作流程,让他们有机会创作出深受大家喜爱的缤纷世界。敬请期待《守望先锋》2.0版本带来的沉浸式全球大冒险、变幻莫测的环境和震撼人心的视觉效果吧!