来源:腾讯游戏学院
腾讯互娱魔方工作室群技术总监、专家工程师、《游戏引擎架构》的译者、知乎大V,这些是Milo Yip(叶劲峰)在程序员圈子里最直观的标签。同时,他也是腾讯游戏学院专家团中的一员。
Milo曾在香港理工大学做多媒体相关的技术研究,后来加入上海育碧和麻辣马,并于2009年加入腾讯。他也是知名的知识分享者,在知乎上他的粉丝超过27万;在Github上,他梳理的《游戏程序员的学习之路》获得了9000多个收藏;最近他还主编了《腾讯游戏开发精粹》,聚合了一批优秀的腾讯内部技术文章。
本期《论道》栏目,Milo将分享他个人职业发展的多样历程,并提供游戏程序员自我提升和个人发展的实用建议。
内容要点:
- 个人经历与职业选择经验
- 自我提升:游戏程序员如何终生学习
- 职业发展:一线管理的选择,工作和生活的平衡
- 技术展望:自研引擎、技术中台、云游戏趋势判断
文字实录
1、 关于个人经历与职业选择
Q 你当初是怎么进入游戏行业的?
Milo Yip:我初中时就接触了游戏行业,当时自学了图形学、编程的一些知识后,在BBS上认识了一群想要开公司做游戏的朋友,于是就加入了他们,每天3点钟下课去公司,有的时候做到晚上11点才回家,就和正式参加工作差不多。
后来我继续读书,2002年硕士毕业后,在香港理工大学的多媒体部门做相关的技术研究,也涉及了一些游戏引擎开发的应用研究,当时一些技术成果被香港的游戏公司采用。2008年我加入了上海育碧,后来又去了麻辣马,做图形学的工作。
Q 那后来为什么选择了腾讯?
Milo Yip:在麻辣马做完《爱丽丝:疯狂回归》,大家未来没有做下一个项目的计划,于是就集体去见了一些公司,包括英伟达、腾讯等等。我老婆一直在香港,当时她又怀孕了,而腾讯在深圳,可以支持我每天往返。
Q 最开始是做什么岗位?
Milo Yip:还是客户端开发。最开始我是在互娱研发部研发游戏引擎,也会帮一些项目做做优化。当时做的一些中间件,后来还被应用到《天涯明月刀》等项目里面。
待了4年左右,腾讯做了组织结构调整,我通过内部渠道转岗,选择了魔方工作室群。开始是在项目组里解决技术难点,项目成熟后又成立了引擎中心建立团队,我也被任命做了总监。
Q 你觉得游戏程序员在选择工作岗位和公司该注意什么?
Milo Yip:每个人的价值观不同,有人可能会选择最有钱的领域,更流行的领域,比如现在去改做AI。但我觉得做自己感兴趣的事情会走得更长远,从小学开始,我就对图形学、动画、3D感兴趣,所以一直专注于这个领域。
我觉得在游戏行业,如果想钻研得足够深入,那找一家大公司还是会更合适。如果在一个只有50-100个人的小公司,你不可能成立一个几十人的引擎研究团队。像魔方工作室群,有数百人的规模,所以就可以有一个支持中台,允许员工更深入地研究某个领域。
最后,选择岗位时也要注意个人能力和工作室的需求。比如魔方以前做Flash比较多,当时魔方又处于转型手游的阶段,我认为自己在3D上的能力对魔方的帮助会更大,所以就选择了这里。如果当初我去了一些3D积累更深的工作室群,可能反而就没什么发挥的空间。
2、游戏程序员的自我提升
Q 在刻板印象里,游戏程序员是一个特别需要终身学习的岗位,你觉得原因是什么?
Milo Yip:十几年、二十几年前,如果你在大学读图形学,那工作后这些技术就可以直接应用起来。但现在图形学已经发展得很深了,只写渲染引擎里物体的阴影就可以有特别厚的一本书,讲相关的5、60个技术。所以现在学校里的课程就只能让你接触到皮毛,想进入游戏行业做相关的工作,就要补很多课。
Q 那应该如何制定学习计划?比如是自己建立一个知识体系,还是跟着项目需求走?
Milo Yip:一般说起这个问题都会讲到广度和深度。刚开始学习时,你要扩宽知识面的广度,对每个部分都有理解。
比如最开始你可以不知道图形、物理、音频等底层功能是如何实现的,但你可以试着用一个游戏引擎实现一些玩法。但后面如果发现有一个问题,引擎没有提供相关的功能或工具,那你就需要自己去解决它,一级级深挖。
我通常会建议同学慢慢理解自己喜欢什么部分,比如引擎方向可以分为动作动画、物理效果等等,玩法方向也可以分为不同的游戏类型,比如MOBA、FPS的技术框架需求都不一样。一个人更好长时间在一个领域累积经验,慢慢加深深度。
Q 你比较推荐的学习 *** 是什么?之前看你梳理了一份《游戏程序员的学习之路》,列了很多书单。
Milo Yip:可能我是老一辈的思路,相对于看视频,我更喜欢看书。书籍的知识体系更加规范,知识点消化起来也更系统,可以补充你看视频时遗漏的部分。
所以在《游戏程序员的学习之路》里我由浅到深地列了一些具体知识点,然后在每个知识点上都推荐了一些经典书籍,把它们连接起来,做成了一份图谱。前面的知识大多是基础,后面就是一些可供选择的领域了。比如图形学有哪些分支,你需要学习哪些细节。
Q 你怎么看待基础知识和实际问题之间的关系?
Milo Yip:我觉得遇到具体的工程问题时,更好先看看别人是怎么解决的,有什么理论基础,对整个问题看得更透彻之后再选择。比如A *** 和B *** 都能解决,那是不是要结合两个 *** 的优点,做一个C *** 出来。
我看过很多人遇到问题马上就想方案,写代码,貌似也能解决问题。但可能后面就有人告诉他,说你这个问题其实是什么什么问题,更好的算法是这样的,你这个是一个很弱的做法。
如果要进入一个新的领域,我同样建议先搭建一个知识体系,看看这个领域更好的书,比方说领头人的著作,或者是本科阶段的教材——这种比较容易学。
Q 分享会不会也是进一步掌握知识的一种技巧?
Milo Yip:我会要求我们中心的人都去讲课,或者多多写作。如果能用一篇文章,或者一个课程把一件事情系统地讲出来,那你肯定能清楚每一个细节,对事物有更深刻的认识。
我觉得很多同事在腾讯内网发了很多不错的技术文章,可以梳理一下出版,让整个业界一同成长,于是就花了1年多的时间,编了一本《腾讯游戏开发精粹》,它将在这个月上线发售。这本书的形式和《游戏编程精粹》(Game Programming Gems)有点儿像,每篇文章都相对独立,而且技术也不依赖于某一个引擎,可以广泛使用。这也算是一种分享的方式。
分享对工作还会有更多帮助,你的影响力大了,项目组自然就会知道你有能力实现哪些技术,这会方便合作。影响力在招募人才的时候也很有用。现在还有新员工在入职的时候,跟我说大一就是因为看到我很多年前的博文,才会选择做图形学的事情。
Q 你认为做游戏程序员最难掌握的能力是什么?
Milo Yip:一个难点是技术创新,因为它意味着能够突破现有的框架,实现新的功能甚至新的玩法。就比如《Doom》想到用3D渲染迷宫的 *** ,这个技术对于单个产品和整个行业的价值都很大。这是一个很高的目标。
另外还有一点是把握技术未来的方向,决定投入哪些领域。这有点儿像买股票,需要判断哪些才是潜力股。
比如2014-2015年,我参考GDC上一些游戏机厂商的方案,帮《天涯明月刀》做了一套中间件,在PC上实现了一些突破性的大世界的美术细节效果,实现了大量物体的同屏。后来这套技术也被用到了《和平精英》里。
当时手游还处在《天天酷跑》的阶段,我其实不知道大型开放世界手游会成为很重要的战场,但我也在考虑跨平台和跨引擎的应用,几年之后才发现当时的投入是正确的。
Q 在技术领域,很多从业者都在讨论专家路线和管理路线的选择,你的建议是怎么样的?
Milo Yip:真的是看性格。一些人可能技术挺好,但如果让他做组长,管理下属的工作流程,制定计划,他真的做不来。而且管理路线也不好走,一般的组织架构都类似金字塔,一级一级往上升也很困难。我觉得成熟的行业应该允许程序员做到60岁。
Q 你觉得做技术管理的难点主要在哪儿?
Milo Yip:做技术研究只要拿到一个题目,逐一拆解,一步步做出来就行。但做管理考虑的维度很复杂,比如说工作室群有什么策略,我要如何配合策略,研究哪些技术,同时还要考虑人力、财政的情况。
比如说你的团队构成要多样化,比方我们有人很熟悉C++,喜欢学习最新的功能;有人喜欢图形学,自己写一个Demo试验新技术的效果;有人在学术方面的能力更强,跟进每年会议上最新发表的文章;有人有超强的数学能力,其他人遇到数学问题,或者看不懂论文就会找他。
另外做管理还要和人打更多交道,你需要了解大家的想法。在团队人数比较少的时候,每个成员过生日我都会自己烤一个不同的蛋糕,展现一下关心,也创造一个大家一起开心的机会。当然现在人变多了,已经烤不过来了……
3、关于刻板印象
Q 一些程序员觉得自己在做重复工作,提高有限,有一种当高级民工的感觉,你怎么看?
Milo Yip:程序员就是要解决重复的工作啊,你为什么不写一个程序来解决重复的问题呢?
程序员应该做其他人做不了的事情。很多时候我们希望写一个工具,让策划和美术自己去配,而不是策划看到人物走的太慢,也要程序员帮忙改一下,这也能提升项目的迭代速度。
如果你觉得自己的工作内容完全没有挑战性,那可能换个环境会有帮助。程序员应该不断面对新的挑战,不停学习,解决越来越难的问题。
Q 行业一直觉得35岁是个槛,很多程序员都表示35岁之后实在拼不动了。
Milo Yip:国内这个行业可能还不太成熟,加班成了竞争的一个条件,这个情况肯定不太健康。现在我们团队的节奏还好,服务的项目遇到节点也需要加班,但我会努力为他们争取调休,比如最近做完现在的项目,每个人会有8天调休。
怎么让团队不加班也是一个管理上的挑战,可以分享一个技巧:我会要求一些主导的项目做单元测试(unit test),就是自动化测试,这可以保证软件的品质。
最理想的情况是程序每提交一套代码都会出一个版本,经历一次自动测试,这样如果出问题,就能迅速知道是具体哪个位置出了问题,以此减少人力成本。
Q 作为一个实现功能的岗位,程序员应该如何避免和提出需求的岗位发生冲突?比如很多人都会开程序和策划的玩笑。
Milo Yip:提需求,做事情一定要写文档,做完事情也要写报告,让其他项目组都知道我们帮这个提需求的项目组解决了什么问题,有什么量化的结果。
文档也是传播知识的 *** 。在写文字的时候,程序员可以把抽象的思路沉淀下来;而其他成员再遇到相关的问题,也不用跑来跑去地问别人。所以写作是很重要的工作。
Q 你对技术人员还有什么其他建议吗?
Milo Yip:保持身体健康哈哈。之前我很容易病,也容易累。刚来魔方不久,我们出去开会,开到中间还睡着了。后来坚持运动,减了20公斤,做事情就精神了很多。如果想运动,那就要制定一个计划,一周运动多少天,然后把它变成生活的一部分。
Q 你现在一周运动几次?
Milo Yip:周一到周五做力量训练,周一、周三、周五晚上去游泳,冬天就去跑步。最近我还成功游到了5000米。
4、对未来游戏技术趋势的判断
Q 最后问几个我们向技术人员征集的问题。之一个,一家游戏公司做自研引擎需要考虑哪些要素?
Milo Yip:其实Unity、Unreal等商业引擎已经很成熟了,做自研引擎更大的原因,是要匹配自研项目的特性。
比如《天涯明月刀》的Quicksilver引擎,3-4年前上线时就实现了带有超广视野的渲染效果特性,而且在低端机上也能流畅运行。如果是用通用引擎,就很难针对特定的场景做出最极致的优化。
在我看来,做自研引擎要满足3点:相关的技术实力、长远投资的计划、合适的自研项目。只有需要突破现有引擎框架,满足独特的技术特性需求,才最值得投资做自研引擎。
Q 现在很多公司都在讲技术中台,这个词应该如何定义?什么样的公司应该考虑搭建中台?
Milo Yip:技术中台的目标应该是聚合重复的工作,用更好的人搭建公用的平台、工具、技术(比如客户端侧的游戏引擎、后台侧的服务器框架等等),降低多个项目间的重复劳动和人力不匹配问题。如果一家公司同时有4-5个,甚至10几个项目在并行研发,那搭建中台的需求就比较大。
Q 如何看待光线追踪对游戏的影响?未来什么时候这项技术会成规模地应用?
Milo Yip:现在在PC上光线追踪已经可以实现比较前沿的效果,比如反射和精确的阴影计算,不过它只是一个光栅化的辅助形式。目前这一代游戏主机还没支持光线追踪,新一代支主机面世后,相信很多3A厂商会积极改造引擎和工作流,使用这项技术。
长远来看,未来光线追踪有机会完全代替光栅化技术,届时可能会出现和现在完全不一样的建模 *** ,比如模型可以基于曲面,而不是三角形来定义,不过这要等待硬件的进一步发展。
但在手游上,这项技术的应用还会经历更加漫长的过程。以过去的统计来说,当前手游的性能,大概会落后PC和主机10年左右。
Q 你认为5G对游戏行业会有什么影响?技术人员该怎么适应云游戏的趋势?
Milo Yip:当前5G已经可以达到低延时、高bandwidth的 *** 环境,理论上已经能比较好地支持云游戏了。但我觉得云游戏发展更大的问题不是技术,而是商业模式。
现在一两千块就能买到一个性能不错的手机,如果要把游戏的所有计算放到后台去做的话,那反而意味着更高的运营成本,而目前还没看到支撑这个成本的成熟商业模式。
对于开发者来说,云游戏对游戏开发的影响没那么大,PC游戏只需要很少的改动就可以放到云上面,建议大家目前不用投入太多精力。