0

《上行战场》创意总监分享:11个人,如何做出“3A品质赛博大作”?

 1 year ago
source link: http://www.gamelook.com.cn/2022/09/497350
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

《上行战场》创意总监分享:11个人,如何做出“3A品质赛博大作”?

2022-09-19 • 项目开发管理

【GameLook专稿,未经授权不得转载!】

GameLook报道/用最少的资源打造最多的内容,可能是所有开发者都梦寐以求的事情。今年初,由独立团队Neon Giant研发的赛博朋克射击RPG《上行战场(The Ascent)》就做到了事半功倍的视觉效果。

一个11人的小团队,为何首款游戏就能取得50万销量?在GDC2022大会演讲中,Neon Giant工作室创意总监Tor Frick详细讲述了《上行战场》研发过程中的资源管线遇到的挑战和应对方式。

以下是Gamelook听译的完整内容:

lazy.png

Tor Frick:

我叫Tor Frick,在Neon Giant工作室担任创意总监,也是一名普通的美术师,欢迎来到今天分享的主题“打造‘上行战场’的世界”。今天的演讲主要是深入了解我们是如何解决在打造《上行战场》游戏世界时遇到的挑战,很大一部分内容是和我们的生产管线有关,还会谈到我们打造的工具。

这是游戏的一段宣传片:

《The Ascent》是一款赛博朋克风格的动作射击RPG游戏,可以单人体验,也能多人联机合作,目前已经登陆Xbox、PC以及PS平台,它是Neon Giant的首款游戏,我们是一家来自瑞典乌普萨拉的独立游戏小团队,我们有11名非常出色的开发者,他们很有才华,很荣幸能够与他们一起工作。我们都来自3A行业的不同领域,组成团队至今已经四年了。

lazy.png

资源管线遇到的挑战

从项目的一开始,我们就遇到了一系列明显和不明显的挑战,作为一个小团队,我们选择了开放世界科幻设定、手绘风格并且带有丰富的剧情,最开始只有一名美术师,也就是我,目前有四名美术师,包括TA和特效美术。

这当然意味着几件事,我们是个小团队、却在做最耗耗时间的话题之一,幻想都市环境里的每个物体都是需要设计和打造的,科幻设定还意味着每个资源都需要设计,然而我们并没有概念美术师。所以,我们需要非常快速灵活的内容管线,而且是非常快,因为我们需要做大量的东西才能填充这个世界。

由于是反乌托邦故事背景,我们需要将内容和着色器更进一步。如果是干净明亮的东西,找到合适的管线就会容易很多,所以,我们不仅要找到快速的管线,还必须确保它不牺牲我们的艺术风格为前提。

我们面临的第三个挑战是组装整个游戏世界,这是个内容密度很高、规模很大的游戏,而且我们希望世界给人的感觉是栩栩如生、手工打造,充满了故事。这本身就是个挑战:我们该如何打造一个庞大的城市世界,还能实现我们想要的高度世界搭建?

为了让你们对游戏世界有个概念,这张图是游戏世界的三分之一。

lazy.png

拉近之后,我们可以感受到游戏内资源的密度之高,这就是我们需要做的工作量。

我们也知道,如果不谨慎选择,就没办法与3A游戏竞争,我们需要一个快速透明的内容管线,不仅可以让美术师快速打造游戏资源,还能够保持创意,不仅要快,还需要去掉分散注意力的东西。

帮我们实现这个目标的工具就是简单和限制,可考虑到我们要做的主题和世界风格,这听起来可能有些自相矛盾,但我们主要是聚焦全局并留出优化空间。这个管线对于美术师们来说并不算好,但我们是一个有强大TA背景的工作室,所以今天的主题大多数和TA相关,因为我们就是这么打造游戏世界的。

建模工作流程

我们是从游戏世界建筑箱开始的,也就是3D模型。所以从一开始我们就知道,我们没办法用传统方式做模型,我们需要速度,还需要在最小化迭代的情况下做到视觉连贯性,因此就需要在每个阶段支持艺术方向以维持进度。幸运的是,因为摄像机距离我们并不需要做3A资源,所以我们有很多选择探索不同方法。

我们来看看有哪些选择?

lazy.png

首先,像高多边形和低多边形这样的传统方式对我们是行不通的,因为你需要对每个模型进行烘焙、内置纹理,有太多的小步骤,我们是做不到的。另外,传统的概念美术方式也行不通,因为我们根本没有任何概念美术师,所以我们打造整个世界都没有经过任何的概念美术阶段。我们需要的是一个能够不需要烘焙等繁文缛节的快速迭代管线。

那么,Tiling素材和贴花呢?这种方法非常适合更干净的艺术风格,但并不适合我们追求的美术风格和细节要求,使用这种方法意味着我们的工作量会很密集,而且还需要做大量的几何体,因此这个方法不适合我们。

修剪片体(Trimsheet)是比较标准的科幻游戏解决方案,他们可以带来大量的纹理和形状,非常适合科幻面板之类的东西。它对于艺术方向也很有帮助,因为能够保持迭代,非常适合作为一个共享的形状语言。

但是,修剪片体本身用来做颗粒细节是非常昂贵的,我们想做大量的机械部件、庞大的引擎,做到这种密度需要太多的多边形,因此想要做到流畅就必须进行烘焙,但前面已经说过,我们不想做烘焙,所以这个方法也是个问题。

那么,如果用烘焙做一套资源,再用修剪片体做了另一套资源呢?这种方法有可能行得通,但这时候我们就需要对每个资源使用太多素材,drawcall数量就会爆发式增长,更不用说需要的设置时间。

所以,我们想过把烘焙的部分放到修剪片体当中,问题就解决了。但是,这让建模流程不那么灵活,如果你要做4K资源,就没办法进行规模化,做不了巨大的资源,而且,这种方式也让纹理制作非常耗时间,所以我们都没有考虑。

lazy.png

我们做了这样一个纹理,在它里面留出了一些空间,我们知道这个纹理很完美,但也很确定地知道我们需要一些不同的东西,所以我们做了一个半成品纹理。

这就是我说的简单和限制,有了现代引擎和工作流程,你几乎有无限的可能,比如你如何处理每个资源?用独特的纹理、多个细节法线贴图,还是选择不同的工作流程?如何保证他们的连贯性?因此在制作资源的时候,选择太多并不是好事,因为我们想要聚焦全局,尽快做出资源然后迭代,仅此而已,与之相比,资源本身并不是那么重要。

我们的方法是将这个单一的工作流程运用到了绝大多数的资源制作当中,这意味着我们必须在视觉上大量的偷工减料,但速度却很高。所以,如果你去看特定资源,它们看起来并不是那么美观,这是故意为之。

lazy.png

我们知道摄像机距离,知道需要做到什么程度的细节,因为有些东西是你看不到的,做出来是浪费资源,因此我们选择了一个适合我们摄像机距离的多边形密度和细节密度。这可以让我们计算出保真度,没有理由停下来思考,因为我们已经确定了局限,所以只需要一直聚焦于创造,这大幅降低了资源的设计反馈。然而,当我们真正需要迭代的时候,我们对这些资源就有共享的系统。

lazy.png

游戏里所有的硬服务对象都使用了相同的纹理,每个车辆、每台科幻计算机、塑料椅、箱子之类的东西都在同一个着色器上使用了同样的纹理,比如这张图,背景中的一切都使用了同样的纹理。

总结来说,我们通过修剪片体保证灵活度,有些时候则使用烘焙组件提升资源保真度。我们用加权法线着色,因为现在是2022年了,然后我们为所有物体都使用了同一个纹理,而且只使用低多边形几何体。

着色工作流程

lazy.png

第二个挑战是,如何为这些资源着色?我们的美术风格并不鲜明,它是非常有场景需求的,你不能随机分布,必须将它们放到对的地方,所以我们必须以最少的工作量来实现,还需要很多的变量。

lazy.png

比如,我们该如何增加颜色?很明显不能给一个资源只用一种颜色,这很明显有些枯燥,多种素材又不现实。那么,能否为不同纹理、颜色使用一个遮罩?这就意味着要做大量的纹理,我们没时间那么做。

我们做的是为这些网格使用了UV,基本上使用了UDIM方式补偿这些UV,把它用作遮罩,这样不做任何纹理就可以使用不同颜色。

通过这个方法,我们在游戏里使用最主要的素材就是管道或者涂漆的金属,或者是一些塑料件,最主要的着色区别就是金属或者非金属。所以我们对UV和金属使用了同样的方法做色彩蒙版,我们的目的是让它看起来像手工打造的那么真实,但同时又不投入额外的工作量,所以,我们最终尝试增加几个层次。

lazy.png

对于修剪片体,增加纹理遮蔽是增加细节的好方法,这是很好的基础通道,不需要使用网格形状,你只是想给管道上增加污点、在金属上增加划痕,所以你只需要使用顶点颜色。但我们仍然思考的是场景全局,而不是资源本身,因此我们可以在干净的物体上面增加一些脏点,而且我们也没时间手动做那么多资源,而且那样做会很吃内存。

随后是光线烘焙,当你在虚幻引擎当中做光线烘焙的时候,还可以选择用烘焙AO mask,这是我们打造尘土效果的第三个方面。因此,我们的资源是彼此相连的,只是通过不同的层次实现了更真实的效果,这需要大量调用纹理,但不用我们手动处理任何东西。

lazy.png

即使有了这些,我们仍然是款科幻游戏,还需要发光的物体、贴花。所以我们用了同样的二级UV,也就是贴花蒙版和发射光的表面。这样,我们就有了很多东西,让这些资源看起来像是手工打造的,而且不用真正做出任何东西。

lazy.png
lazy.png

做好了这些之后,我们就可以把它关掉了,我们可以在很多资源上使用相同的素材。比如这些场景都使用了同样的纹理、素材和资源,这给我们带来了很多的变量,因为我们没时间创作那么多。

随后,我们需要快速回退,因为我们要打造很多复杂的东西,我们需要很快的管线来实现,所以我们对可以做的事情进行了很多限制。我们将颜色限制为3种颜色和三种金属,这是故意为之,因为我们可以为这个管线做简单的定制化工具,让整个流程自动化。

lazy.png

我们有一个非常简单的模块标签系统,你可以看到一个管道粗略的外观。

加上一个简单的预设顶点颜色烘焙,这就会应用到整个模块,我们只需要一键点击就可以实现想要的效果。限制颜色和金属还有一个优势,就是对艺术方向有帮助,当你设计资源的时候就已经知道了局限,你只有这三种颜色可以用。

优势

有了这些,很多事情都自然而然地发生了。

lazy.png

首先,纹理使用率很低,当你只有一个纹理的时候,就很容易实现4K效果,所以我们游戏里的世界纹理任何时候都低于100MB。

另一个优势是可复用的素材,这是很重要的事情,而且也是我们没有预料到的。因为选择了简单的调色板,所以所有的资源都用了同样的纹理、着色器,因此,我们可以快速切换这些区域的素材。

lazy.png
lazy.png

比如这两个场景使用的都是同样的纹理、素材和资源,但却呈现了完全不同的设定。

还有个好处是增强了艺术方向,简单的颜色设定和着色方法,意味着所有东西默认都是同样的艺术方向,不需要任何概念美术就可以有连贯的形状语言。这也让修改变得很简单,无论是增加还是去掉一些东西,都会让迭代很容易。

我们还有了可迭代的模型,因为不需要进行烘焙,比如我们需要更多枪械,只需要拿过来一把枪,增加一些东西,然后就完成了。

另一个优势是没有技术性的意外,所有东西都是以同样的多边形密度、着色器密度、素材数量打造,因此做起来很简单。

最终结果

这也带来了超出我们最初预料的视觉效果,如之前所说,我们知道游戏的摄像机距离,所以知道需要做多少细节,但结果我们还是错了。

lazy.png

比如这个燃料站,我不知道怎么称呼它,可以看到增加了科幻元素之后仍然有很高的细节呈现,但这不是我们有意为之,超出了我们最初认为能实现的视觉效果。所以我们有些错,但很明显是好的。

我们最终创造了超过8000个资源,平均下来每个美术师每天做三个资源,但绝大多数时间里我们并没有做任何资源,即便最大的资源也只用了三天时间,图片中的这个用了一天半。所以创作速度非常快,达到了我们想实现的目标。

组装游戏世界

有了这些资源之后,接下来就是“安装”游戏世界本身。这是一个群聚城市,大量的层次、可移动部件,本身就是个挑战,因为我们不仅想覆盖这些区域,还希望做一个栩栩如生的世界。这是一个科幻大都市,而不是一片空旷的森林,还需要发生大量的射击动作。因此,我们不仅要快速打造一个庞大的世界,还需要为它带来生机。

我们需要创作大量资源,还需要把它们放到对的位置,因此我们需要打造工具。我们用Houdini做了很多东西,还用了其他很多工具。

比如我们的管道生成工具:

lazy.png

这是为生成管道模块打造的,一开始很简单,只是用最简单的管道,创造了大量的管道模块。

lazy.png

我们还做了管道放置工具(NG_Pipe_Maker)。在我们的游戏里,放置大量的管道是非常枯燥的,所以我们用了一个工具来摆放我们之前生成的管道模块,而且可以根据场景改变颜色和视觉效果。这不仅让管道摆放不那么无聊,还让美术师们创造出之前没有想到过的东西,让游戏看起来更好。

lazy.png

我们还有一个工具,可以在资源的基础上打造房间、建筑,游戏里很多的建筑都是用这个工具自动生成的。

游戏里还需要有大量的环境破坏效果,但手动做起来也很耗时间。

lazy.png

对于破坏,我们有两个主要目标:第一,要让它编写起来很快,又要做到渲染起来很便宜。

由于游戏射击总是发生在二维环境中,我们总是知道射击来自哪个方向,因此我们可以用视觉欺骗的方式做破坏效果。

lazy.png

我们并没有真的做环境破坏,而是根据玩家射击方向击中网格而播放了破坏动画,所以我们只是根据不同方向烘焙了多个动画,然后根据玩家射击选择挑选一个。它看起来像是破坏,但基本上只是动画,这让我们可以做大量的破坏效果,但看起来像是玩家自己破坏的。

lazy.png

然后是线缆,我们的游戏里有大量的线缆,所以我们有不同的工具来制作不一样的线缆,工具最难的部分是让它看起来视觉效果好,又适应游戏艺术方向。我觉得这是工具非常好的一点,如果手动制作,这些线缆会用掉我们很多的时间和精力,所以我们做了很多小工具,大约4-5个线缆工具适应不同用途。

lazy.png

我们没有太多时间去做资源,可一旦有了时间,我们就会打造工具加速内容制作。比如我们的贴花工具(NG_Decal_Maker),就可以在箱体上表达精准的意图。我们只需要在编辑器中输入贴花文字,这是很有效率的,因为避免了具体资源制作的很多麻烦,只需要通过文字输入就能实现各种有趣的视觉效果。

lazy.png

游戏里还有很多的标志,这是个赛博朋克世界,从霓虹灯招牌到各种塑料标志,需要很惊人的工作量。但是,有了标志工具之后,我们可以快速制作,而且可以用预设的顶点着色器实现特殊的标志效果,比如闪闪发光的招牌,只需要在编辑器里输入想要的类型,就能得到输出的几何体。

有了游戏世界的基础结构之后,我们就可以聚焦于为其增添活力。我们发现,无论任何时候试图为游戏里增加生命和运动,始终都是不够的,我们不得不一遍又一遍地复查,不断地提高。

我们最终为每件事都做了很多种解决方案,而不是做一个巨大复杂的系统,我们只是为每个问题做了不同的事情。因为我们没有一个团队在美术师们完成工作之后再检查并增加东西,让美术师再做这些东西会很疯狂,这是团队工作,我们做了很多工具让游戏世界栩栩如生,以下是几个比较值得注意的例子:

有了这些场景之后,我们还需要增加动画,还要有人站在这些阳台上,NPC会在背景中走来走去。但比较怪异的是,你不进入这个区域的时候,整个世界看起来是死气沉沉的,我们的目标始终是让这些角色处于可玩空间内,所以为此增加了AI。

lazy.png
lazy.png

这是前后对比效果,我们在到处都增加了很多人,而且加入了很多变量、设定和反应,这样游戏里的角色之间也会有事情发生。

想到赛博朋克的时候,另一个常见的场景就是大屏幕商业广告和动画,这些都需要做专门的着色器。但这很耗时间,如果你要给这些屏幕做小电影,那么每一个都会占用CPU线程,尤其是在主机上,你不可能同时在游戏里播放10部电影,这是有固定的限制的。

我们的方法是做了一大堆电影,并且把它们放到一个电影当中,确保它们的长度一致,然后,我们把它缩小到一个很小的电影屏幕,这样我们就可以播放不同的商业广告。但问题在于,它们并不能放射光线,我们没有那么多的反射空间让它看起来是动态放射光芒的。

lazy.png

所以,我们希望用电影中的颜色驱动光源,然而在虚幻引擎当中,光源并不支持RGB制式,所以,我们将每个电影在Houdini当中把平均色模糊到一个像素,并将其作为CSV文件输出,随后用这个CSV文件对光线做动画,这就让屏幕里的电影看起来它们可以放出光芒,但其实并没有。

由于所有的电影都在一个纹理当中,我们就可以随意移动这些纹理,看起来就像是大屏幕在播放不同的电影,实际上只是着色器在UV空间移动。

优化

lazy.png

我们做的另一件事就是增加交通,如果做移动的物体,就需要创造海量的东西,所以我们同样做了不同层次。对于交通,我们对不同的科幻物体做了三种移动类型、五种移动节奏,我们需要大量简单的东西。

我们做了太多的东西,从管线层面就去掉了不必要的技术猜测。得益于简单的内容管线,我们只需要聚焦于有限的优化,最主要的问题就是drawcall,我们的方法是做了一些技术美术优化和光照优化,主要是光照。

这是游戏极其重要的一部分,游戏里几乎没有阳光,我们有很多的人工灯光,所以使用了静态和动态光照。动态光看起来很好,但规模化不容易,所以最终结果是做了大量的静态光,因为我们想为不同区域创造不同氛围,很多灯光都切换成了静态光。

lazy.png

如果是FPS,这种方法可能不太好用,但如果是我们这种动作射击RPG,效果就很好。我们没有太多的纹理,所以就有很多空间做光照贴图,因此在游戏里做了很多静态光。

只不过,如果没有反射探针静态光看起来并不好看,它们才是光照真正的英雄。比如这就是使用前后的对比:

lazy.png
lazy.png

不过,考虑到摄像机距离的问题,我们不能用常规方式做反射探针,而是用它手绘了游戏世界,因为你只需要选择它看起来比较好的地方,这不是FPS游戏,所以很多人认为的动态光照,实际上只是反射探针效果。

只不过它们很昂贵,需要1MB内存。但是考虑到我们的摄像机距离,我们并不关系,因为不需要那么高的分辨率,只需要做到64X64像素就行了,而且任何时候都设置了最大值。

在虚幻引擎当中,默认的光照贴图分辨率是1K,我们增加到了2K,这节省了10%的drawcall,这意味着我们需要加载更多的光照贴图,但我们对此没有问题,因为游戏使用的纹理较少。所以,这样做的结果只是在Xbox One上增加了50MB的内存使用。

lazy.png

光照另一个关键的部分是体积光,我们希望做出这样的效果,但开销会很大,所以我们使用了烘焙光,但这本身也是个挑战。因为,体积光本身离几何体很近,而且增加了密度,但我们并不需要那么高的密度,所以我们用了体积光照贴图密度体积进行优化,这占用了一些内存,但属于常规范畴内。

烘焙光照不适合做开放世界,所以我进行了搜索,为体积光网格增加了额外的最大强度投影,这进一步控制了变量,将性能消耗从150MB降低到40MB。

提到光照优化,我们会想到剔除(culling)。我们做的基本上是一款等距型游戏,你可能觉得不会怎么用到剔除,但虚幻引擎是非常宽容的,因此,尽管我们的摄像机是固定的,依然可以使用距离衰落,让光线随着距离的增加逐渐暗淡。

另一个优化就是通过工具将一些灯光变成静态,但我们还不希望在任何平台牺牲游戏保真度,因此我们用工具根据平台对每个灯光按照需求关闭,关闭每盏灯、去掉每个阴影是不可能通过手动完成的。所以我们对整个世界做了通道,在有问题的区域关闭阴影,没有人注意到这一点,所以这是行之有效的。

总结

lazy.png

总的来说,我们给自己设置的局限是很成功的,它让我们保持了研发势头,聚焦于重要的东西。它还去掉了很多的视觉以及技术向的噪音,因为我们没有太多的颜色可以选择,也帮助了艺术方向的连贯性。

我们还解锁了很多的优势,比如共享的素材,也保证了艺术方向。这节约了大量的资源创作时间,让我们有更多精力聚焦于世界构建,让游戏给人的感觉栩栩如生。

这样做很容易设定规则,但遵循规则是很无聊的,只不过,对于一个有大目标的小团队来说, 这是很有效的。虽然有时候你需要自律,放弃很多突然而来的想法、聚焦全局,但如果要重来一次(剧透,我们在做新游戏),我们还会这么做。

我们低估了对质量的聚焦,将很多的时间投入到了数量上,我们本可以用更少的时间让游戏看起来更好。我们的其他制作流程并没有像资源管线那样优秀,因为后者是经过深思熟虑的,但其他部分的管线都是随机应变的,这是我们希望后来可以提高的。

如若转载,请注明出处:http://www.gamelook.com.cn/2022/09/497350


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK