暴雪工程师嘉年华访谈趣闻:动画部门有200人

    来源:NGA 作者:墮落的猴子 时间:2016-11-07 10:19:16
    暴雪工程师嘉年华访谈趣闻:动画部门有200人,一开始动画部门只有15-20人,后来慢慢地涨到了200人。人多之后,可以有更多的人去负责专属的内容,比如动画师,比如粒子渲染,比如光照效果。

      本文来源于NGACN,作者:墮落的猴子;原文地址:【点我查看】转载请注明出处!

    前言

      相关阅读:暴雪工程师嘉年华访谈趣闻:隐形兔子戏法屡试不爽

      今年我有幸在现场经历了所有的工程师访谈,两场综合访谈,一场魔兽世界,都是QA性质。

      因为都在三楼的副会场,所以在楼下主会场忙碌的媒体往往不会顾及这里,感觉不分享出来可能就没人分享了。

      我主要是节选了个人觉得很有趣的内容,如果mmo出了完整的文字稿会视情况添加更多内容,若有出入还请谅解。

      主要感受就是相比去年第一次弄的小型工程师访谈,今年2+1三场要豪华了很多,但是废话也多了很多。

      Q:星际和风暴使用的技术为何如此相似?

      A:星际的引擎一开始就是个面向数据的引擎,因此很适合开发不同风格的地图模式。风暴的雏形-暴雪全明星的起源就是一个星际组员工的闲暇项目。然后大家被吸引了,为此专门分了个小组,代码库也专门开了一个分支,但是有许多功能性代码依然是通用并且同步更新的。风暴目前也是类似的状态,即使看起来风格已经大不一样,但是背地里他们依然有很多代码是共享的,还有专门的GUI工具来转移需要共享的代码。

      Q:WoW的数据真的很多,你们是怎么维护的?

      A:讲真,真的很多。光是7.1的更新就导致了超过1000个表的更新,尤其是法术相关的表。有一个内部表格有超过两亿五千万行数据,有的时候想查这个表找些东西真是挺不容易的。内部开发的统一工具-WoW Editor经常要和数据库交互,操作起来会让人觉得WoW是这个数据库的图形化管理工具,而不是一个单独的游戏。

      德拉诺的时候,他们引入了NGDP数据传输系统,在设计这个系统时,他们需要生成目前游戏里每一个文件的列表(内部文件,而非文件夹下的那种压缩大文件),光是为了做这个文件追踪系统就花了2年。新系统允许他们对于非常细微的内容进行改动(比如单个文件),也让HotFix的灵活性大大提高了。

      Q:暗黑工程师要怎么解决大秘境fishing(就是看到大秘境地图不好或者怪物刷新不好就放弃)的问题?

      A:这个问题有两个方面。他们首先检查了怪物的刷新机制。每个怪物对于进度的贡献取决于怪物的基础经验值,所以当前基于个数/区域密度的刷新系统是有很多问题的。新的系统会基于经验值密度,即保证每个区域里刷新的怪物的总体经验值,即对进度的贡献是近似的。

      然而还有一个问题就是精英怪必须单独考虑。比如我们可以在一个区域刷很多的小骷髅,但是精英骷髅不可能也刷很多组(因为词缀导致的难度并不好预测),所以玩家如果看到这种情况依然会想离开。解决办法就是把精英怪的刷新独立在普通怪的刷新之外。这些修改在下周的PTR里就能体验到。

      Q:守望引擎的优化?

      A:守望使用了全新的引擎。从一开始,工程师就把所有平台都纳入了考量。游戏开发后期的工作主要都是引擎优化,使用了各种性能分析工具来评估CPU和GPU的表现。GPU的优化相对比较难,比如工程师有一次花了一天想去优化一个玻璃着色引擎,结果到最后一点提升都没有,因为GPU的调度器非常复杂,难以预测。

      一个比较成功的功能就是渲染级别,尤其是主机上的动态渲染级别,能够根据场景复杂度实时调整,最终达到比较稳定的60fps。

      Q:暴雪动画部门都怎么做那些渲染的?

      A:动画渲染一直都是个很复杂的工作。在星际2的第一个CG里,泰凯斯所处的场景所使用的三角形,比当时整个wow所使用的三角形都要多。一开始动画部门只有15-20人,后来慢慢地涨到了200人。人多之后,可以有更多的人去负责专属的内容,比如动画师,比如粒子渲染,比如光照效果。

      但是人多之后一个问题就是协作。某个部门发现的bug,可能要回溯到整条流水线上好几个部门之前才能找到解决方案,这样的流程是非常繁杂低效的。他们为此开发了一个工具叫做Aurora,把所有动画部门的数据集中到一起,并且提供了一个统一的交互接口。它本身底层是个C艹的属性管理系统,叠加了一层Python来整合商业以及部门结构的逻辑。夺魂之镰的CG就是这个系统管理之下的产物,效果很不错。

      Q:如何解决科技债(即早期的开发没有预见性,导致后面开发越来越难)?

      A:写个条子标记这是一个科技债,然后丢到一边忘记它!

      好吧,认真说。很多时候设计师请求的东西,过几个月很可能就不需要了,同样的有的时候设计好的代码,可能要过很久才会得到利用。比如要塞相关的代码,在4.3末期就已经写好了,但是一直没找到使用的机会。因此只能说尽量提高设计的灵活性来预防。

      另外一方面,对于内部代码的优化,往往不会被其他部门的人所感知,算是low-impact的项目,因此并不会作为重点目标。目前在做的一个就是在代码提交过程中使用了各种代码质量检查的工具,每次代码提交你都会看到整体质量下降或者上升了多少,然后督促码农去尽可能提高自己的代码质量。

      回到条子上,他们的确花了很多时间去修复各种条子,也就是表单所反馈的因为老代码导致的问题。

      Q:有没有什么我们不知道的严重bug是发布之后才发现的?

      A:有也不告诉你(笑)。只能说他们为了避免这些问题进行了各种努力。Hotfix系统的进化,更简单的代码逻辑,复杂的QA测试流程,更灵活的发布日程,数据库级别的质量控制(避免奇怪格式的数据的插入),自动化等等。比如守望的一个自动化办法就是生成大量机器人(堡垒!)去地图里的每一个角落用一切可能的方式和地图疯狂地互动。

      Q:聊聊服务器的架构?

      A:他们有在密切关注类似Docker这一类比较新的解决方案。目前是混合云,由他们内部的私有云和AWS组成。AWS主要是为了美国以外的用户服务,提供数据传输一类的服务。最近也在开始尝试一些整合了AI的软件缺陷检测方案。

      设计哲学来说的话,一开始各个大组(魔兽,战网,星际等)之间基本没有沟通,都是各自为战。几年前新的CTO提出了”One Blizzard“这个概念,强调了各个组之间的原生态协作,结果就是本来很多难解的问题和其他组沟通之后迎刃而解。比如风暴组提出来的新文件系统CASC现在已经推广到了所有游戏上。

      Q:你们都是如何提升游戏表现(fps)的?

      A:守望有用各种内部和外部的性能评估工具,检测各种参数,比如cpu/线程的利用状态,内存的使用效率等等。

      这里还有一个轶事。美工开发模型的时候,都是以实际大小为准。比如一个石头消耗几百个多边形的话,一个高山可能就是几十万个多边形了。有一次某个QA在测试新场景的fps时,发现在一个桌子附近fps总会暴降,完全不知道为啥。最后他们发现那个桌子上的一个盆栽的树居然有数以万计的多边形:某个美工把一个海加尔树那么大的大树缩小了几百倍直接放到了盆栽里。结果引擎依然认为它需要把这十来万的多边形都渲染在这个小小的盆里,你懂的,可费劲儿了。

      Q:星际的观战模式?

      A:星际的服务器是状态锁定+同步的模型。服务器和客户端时刻交换大量的最新命令,以此模拟/同步最新的游戏状态。观战者想要看到最新状态,就需要拿到游戏开始到现在的所有命令并且模拟最新状态,只能说这里面有很多挑战。

      Q:WoW的数据是怎么存储和分析的?

      A:魔兽一开始的文件系统叫做Big File Folder(谷歌的GFS的梗),用不同的文件夹来存放不同的数据内容。为了不用每次都复制大量重复内容才能更新游戏,他们特地开发了专门的文件夹管理系统。目前是内容关联的文件追踪系统,存放了对应到内容的哈希值。在发布新内容时,这个系统让数据索引时间得到了大幅度的降低。数据库系统也是内部开发的工具。

      游戏的统计数据定期会发送给BI(商业智能)团队,并且定期地得到分析团队的结果。开发者们就可以用这些分析来辅助决策。

      Q:哪个方向的team人最多??

      A:WOW组最多的人是gameplay组(游戏机制),这个组需要开发大量的游戏内部的新功能,每一个都需要可观的开发投入。战网也是个人很多的组,因为维护面向几千万玩家的平台和大量功能。守望里人最多的组也是gameplay组。

      Q:工程师部门的性别比例??

      A:80%男性,20%女性,目前的目标之一就是招到更多女工程师。

      Q:给学生党一些进玻璃渣的经验?

      A:保证课业的基础上,尽可能完成一些独立的项目(不过没人指望你solo个魔兽),是真真正正地完成一个项目,哪怕是俄罗斯方块也好。这个过程中需要的代码设计,系统设计,测试,debug能力都是暴雪所看重的。Unity相关的经验也是非常好的。

    魔兽7.1.5 新团队副本 魔兽7.1 常用工具 魔兽电影 职业套装 职业变化 恶魔猎手 神器系统 新5人副本 PVP系统