|
(腾讯北极光工作室长期招聘中......)
如果让我来选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部分,比较犀利&有特点的是:
品质ok的是:
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中蜘蛛侠,战神的分享,对比我们自己的代码和技术实现,要做的事情就源源不断了。
走完一个台阶,然后更能看到下一个台阶,项目如此,我们也是如此。
所以何止是拥抱变化,善于变化,很多时候我个人,我们技术团队就是变化本身和变化的发起者。
然后一点经验就是,面对变化,最有力的就是保持控制,尽量压缩项目的复杂度,尽量增强自己的能力,保持沟通,对于任何变化都无往不利了。
腾讯北极光工作室招聘,长期有效:[招聘贴]Call For HardcoreDeveloper
作者:安柏霖
专栏地址:https://zhuanlan.zhihu.com/p/74567486
|
|