GDC 2019《蜘蛛侠》开发解读:如何打造一款AAA级游戏?


(腾讯北极光工作室长期招聘中......)

如果让我来选GDC19最喜欢最牛的系列,那么毫不犹豫就是《蜘蛛侠》系列了。

起开发商insomniac也是我最喜欢的开发商之一,成立于1994年,绝对的业界老兵,有不错的作品(虽然特著名的还是不多),技术很是不错,而且乐于分享,我个人的开发过程中真是学了很多,看下它的作品:
 


在GDC19上,insomniac几乎把spiderman开发的方方面面都和大家做了分享,相当给力!!

而且这部spiderman截止到7月份,买了900多万份,可喜可贺。
 

一、overview


解读的内容

我这里除了是一个学习和笔记(节省大家学习时间),也会结合这些年的开发经验,就其中一些内容做一些解读。

spider-man的挑战:一个在曼哈顿,自由快速穿梭的AAA游戏

https://www.bilibili.com/video/av58521396www.bilibili.com

这三个特点是互相矛盾的,全部达成就要拼硬实力
 

  • 曼哈顿挑战者,意味着大地图,高密度的海量物件&大视野–制作流水线和LOD策略厉害
  • 在海量物件中间快速穿梭–streaming厉害
  • 3A:让整个挑战全部难度上一个台阶


3A在开发中意味着什么?

前一段时间,公司内部开展了一轮“3A大讨论”,大家从玩家视角,谈论了很多3A游戏到底是什么,从常见的高质量的视觉效果,到海量的游戏内容等等都有覆盖。

我个人看法则是:“当前头部品质的产品”,其核心就是“头部“二字,你必须要是当前市场上顶尖的一批才能说自己是3A。

3A是一个要与时俱进的东西,开发中就意味着“容易变化”。

所以在spiderman的多篇技术和美术的分享中,都谈到随着开发,各项指标都快速突破原先的设定,快速上涨,这对于技术团队的实力,以及整个团队的项目把控能力都是一个挑战。

实际上,这也是我们开发《天涯明月刀》《无限法则》时候的常态,市场上有新的游戏(包括console上的大作)出来,新一届gdc&siggraph,所有能让我们做的更好的地方,而且是我们可能做到的,都要作出改变和实现。

技术挑战&解决方案汇总
 

二、工具篇


在《蜘蛛侠》中,工具对于游戏的品质可以说是愈发重要,说是和runtime相提并论也不过分,也正是工具的出色发挥,能支撑spiderman的优秀品质。

这里主要谈三个方面:
 

  • houdini流水线来生成场景以及细节
  • lod&光照
  • 编辑器升级历史


houdini流水线

从<ghost recon:wildlands>开始,houdini近几年谈的比较多了。

spiderman可以说用的比较重度,覆盖的范围非常的广,可以说主体都覆盖了:
 

  • 路面,路径,路面细节
  • 建筑,各种装饰
  • 车辆,特效等
  • 一些gameplay事件


houdini的流水线也比较复杂和长:
 


这部分的构建可以说比较强大了。

然后在实际应用中有几个要点:
 

  • 分治:做好模块化,一个区一个区的来生成
  • 简化:尽量保持流程简单,减少耦合,减少策划美术的选项
  • 清晰化:了解到整个自动化生成流程,与传统手摆很不一样,上游改动会影响到下游
  • 打好tag,自动生成的,手摆的,都要有不同的区分


LOD

spiderman里lod一大特色就是3d imposter,一个是保持了ps4该有的品质(billboard式的imposter就太low了),一个是维持了很高的性能
 


是这样的一种面数极低的imposter,而且组织方式是以一个zone为单位,内部imposter的贴图达成atlas,然后以类似cubemap的方式来sample(mesh不存uv)
 


生成3d imposter mesh的过程就是:
 

  • 合并能和的面
  • 内部面都去掉


mesh本身:
 

  • 没有normal和uv,完全通过position来反算(normal因为都是axis aligned)


光照的probe摆放

光照是IBL是realtime生成的envmap,生成为position通过houdini+美术手摆来完成。

diffuse lighting是offline baked lightgrid(算是一个irradiance volume),hdr格式,在一个volume里,生成大量的256分辨率的cubemap,然后convolve到hdr的颜色+方向;

spiderman里也有time of day,所以是cook了四套。

关于这个volume based GI,现在知道的方案是:
 

  • 战神4,蜘蛛侠:offline baked,蜘蛛侠bake多套用于多个时段
  • 荒野大镖客:听开发者说是volume的方式,是不是realtime生成的不知道
  • division系列:是offline bake surfel信息,然后实时生成GI Volume


一定程度上可以说是比较成熟的方案了。

编辑器本身

制作蜘蛛侠,内部包括map editor,fx editor,cinematic…一共有12个editor

早先是html5的然后逐步迁移到qt的c++的

使用json做配置文件

中间h5编辑器到c++也展现了其比较务实老练的一面,如果全都推到重来肯定是最方便的。

但是团队是一步步来做的:

始终保持格式兼容

老的h5不再开发,只是做一些debug

逐步迁移

DDL(data definition language)

这是挺有意思的一个点,实际在insomniac,战神中有应用。

和同事也有一些讨论,可能后面专门总结一个文章较好。

简言之,就是定义meta信息(可以使用xml,json,protocal buffer等等),然后生成头文件,编译到项目里。

好处若干,有的是未来跨平台,跨语言,有的是data driven,让策划美术可以使用等等。

reference
 

  • Tools for‘Marvel’s Spider-Man’:Editing with Immutable Data
  • Procedurally Crafting Manhattan for‘Marvel’s Spider-Man’
  • ‘Marvel’s Spider-Man’:A Technical Postmortem
  • ‘Marvel’s Spider-Man’:Procedural Lighting Tools

三、Runtime篇

(再放下城市穿梭的样子)


这里统一列一下runtime部分,比较犀利&有特点的是:
 

  • streaming策略
  • 荡蛛丝一套动作系统


品质ok的是:
 

  • 渲染pipeline
  • 各种布料,表情等等


streaming策略
 


在文件组织方式上稍微特别一点的就是,有一个zone的概念;

移动速度最高是32m/s

模型组织方式:有了良好的组织方式之后,快速移动的时候要load的东西就大大减少了
 

  • imposter--就是imposter
  • hibernate model:就是水塔,树这种instance很多,到处都是的物件,他们的mesh一直在内存里


资源lod:

•贴图主要load 3,4级mip,停下来才load mip0这种,快速移动的时候加上motionblur,所以完全没问题(这个很重要)

资源压缩:

•lz4压缩资源
 


•index buffer使用增量式的存储,这样可以让压缩效率高非常多

实时生成:

•envmap实时生成的

Always Load:如果有空余时间,就一直去load detail的东西

所以我们可以看到,如此犀利的streaming效果,其实就是每个部分做的比较好的结果,木有黑科技,囧!
 


蛛丝荡的效果

这块非常的细节,如果不做蜘蛛侠用处也比较有限。

要点1:使用曲线而非物理来达到玩家喜欢的效果

这个在动画和物理上也是经常使用,大概这块还处在pre-physically-based的阶段。

要点2:尽早让不是这个系统的开发者来体验给出意见

这个也是非常赞同的,之前做效果时候也是,不要找美术,专门找策划来看美术效果,他们的看法基本就是玩家的看法了。

render

渲染部分比较中规中矩,正常水平吧:
 


•async compute部分是ssao,fft,ssr,这里是和graphic pipeline在gpu中同步进行,能更快一些

•postfx是放在下一帧的帧首做的,

表情和布料

两个部分值得说的比较少,记录下技术选型好了:

面部和表情使用3lateral pipeline,面部捕捉的,同样的技术用于hellblade。

布料是havok的。

ref
 

  • ‘Marvel’s Spider-Man’:A Technical Postmortem
  • Concrete Jungle Gym:Building Traversal in‘Marvel’s Spider-Man’
  • (Super)Humans of New York:Managing the Many Faces in‘Marvel’s Spider-Man’

四、研发过程和哲学


3A游戏意味着变化

即便是业界老兵insomniac,在制作spiderman的时候,卖手机靓号也会出现制作到一半的时候,有非常大的改动。

包括不限于:

  • 物件量和规格大幅度改变:15年到17年,每个tile的物件量和规格都在不停地变化
  • 新的玩法系统:墙上爬行,表演系统,更多更复杂的任务
  • 新的模式:拍照等等


3A游戏意味着什么,意味着你要尽可能的在有限的开发周期里发挥到极限,这里有主观因素和客观因素:
 

  • 追求&热爱使然:能做3A游戏的团队都是充满追求和热爱的团队,所以自然有更好的想法的时候,会去尽量做
  • 自然的过程:随着迭代的进行,团队对所做的东西又更好的理解,有更多的发现,也有更多的学习,就是会有很多更好的想法,或者发现之前走错路了
  • 市场的竞争:3A我们也可以定位为头部品质,如果发现市场上有更好的出现,那么团队就也要做出相应的调整


所以做好的作品,一方面我们肯定要追求专业,追求想的透彻,计划周密,一方面也要拥抱变化,善于变化。

开发的哲学
 

  • 尽可能保持简单
  • 依据具体情况设计最优技术解法(tech fits context)
  • 限制美术策划的option,限制workflow,限制dependency
  • 版本要一直可玩
  • 变化剧烈的时候,要设定好目标,坐下来交流,定义什么是完成


每个地方都好一点:让人惊讶的结果

其实之前团队看到蜘蛛侠的视频和游戏的时候,最惊讶的就是在曼哈顿中穿梭的画面了:

https://www.bilibili.com/video/av58521396www.bilibili.com

我们一致认为这个是现在在streaming方面做得最好的,也高度怀疑里面使用了什么“黑科技”。

实际出来之后,发现其实就是围绕这个“在曼哈顿里快速穿梭”的主题,在整个游戏系统中(runtime+pipeline)每个地方都做的更好的结果。

也让我们可以重新审视我们做的系统:保持对于系统的控制力,围绕一个主题,每个模块打磨的更好,就可以把游戏带到另外一个层次,嗯,比如说帧数?



个人的共鸣

这里最大的共鸣就是在追求高品质游戏的时候,就是一个不停的变化的过程,在现有的水平上做好计划,做好实现,真的做起来的时候,就发现更多可以做的更好的地方,于是乎就产生了下一阶段要做的事情。

就如在阅读gdc中蜘蛛侠,战神的分享,对比我们自己的代码和技术实现,要做的事情就源源不断了。

走完一个台阶,然后更能看到下一个台阶,项目如此,我们也是如此。

所以何止是拥抱变化,善于变化,很多时候我个人,我们技术团队就是变化本身和变化的发起者。

然后一点经验就是,面对变化,最有力的就是保持控制,尽量压缩项目的复杂度,尽量增强自己的能力,保持沟通,对于任何变化都无往不利了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值