知乎27万粉的腾讯技术总监Milo Yip:论游戏程序员的自我修养

来自 游戏葡萄 2019-08-05
深度

[ 游戏葡萄原创专稿,未经允许请勿转载 ]

知乎27万粉的腾讯技术总监Milo Yip:论游戏程序员的自我修养

腾讯互娱魔方工作室群技术总监,专家工程师,《游戏引擎架构》的译者,知乎大V:这是Milo Yip(叶劲峰)在程序员圈子里最直观的标签。

Milo曾在香港理工大学研发游戏引擎及相关技术,后来加入上海育碧和麻辣马,并于2009年加入腾讯。他也是知名的知识分享者,在知乎上他的粉丝超过27万;在Github上,他梳理的《游戏程序员的学习之路》获得了9000多个收藏;最近他还主编了《腾讯游戏开发精粹》,聚合了一批优秀的腾讯内部技术文章。

1.png

近日,由游戏葡萄担任独家合作媒体,腾讯游戏学院制作的《论道》栏目邀请到了Milo。在分享之前,葡萄君也和Milo聊了聊他对游戏程序员自我提升和个人发展的建议,并请他对当下热门的技术概念做了简单的解读。

2.png

你可以通过下方的视频,或者后面的详细文字摘录来了解Milo的分享。文字内容有一定的增补和删减。

关于个人经历与职业选择

葡萄君:你当初是怎么进入游戏行业的?

Milo Yip:我初中时就接触了游戏行业,当时自学了图形学、编程的一些知识后,在BBS上认识了一群想要开公司做游戏的朋友,于是就加入了他们,每天3点钟下课去公司,有的时候做到晚上11点才回家,就和正式参加工作差不多。

后来我继续读书,2002年硕士毕业后,在香港理工大学的多媒体部门做相关的技术研究,也涉及了一些游戏引擎开发的应用研究,当时一些技术成果被香港的游戏公司采用。2008年我加入了上海育碧,后来又去了麻辣马,做图形学的工作。

葡萄君:那后来为什么选择了腾讯?

Milo Yip:在麻辣马做完《爱丽丝:疯狂回归》,大家未来没有做下一个项目的计划,于是就集体去见了一些公司,包括英伟达、腾讯等等。我老婆一直在香港,当时她又怀孕了,而腾讯在深圳,可以支持我每天往返。

葡萄君:最开始是做什么岗位?

Milo Yip:还是客户端开发。最开始我是在互娱研发部研发游戏引擎,也会帮一些项目做做优化。当时做的一些中间件,后来还被应用到《天涯明月刀》等项目里面。

待了4年左右,腾讯做了组织结构调整。之前的工作有些脱离实际项目,还曾经花了1年时间做了一个特效系统,但最终几个使用这个系统的项目都没有上线。

所以我觉得应该更贴近一线的项目,就选择内部转岗到了魔方工作室群。开始是在项目组里解决技术难点,项目成熟后又成立了引擎中心建立团队,我也被任命做了总监。

葡萄君:你觉得游戏程序员在选择工作岗位和公司该注意什么?

Milo Yip:每个人的价值观不同,有人可能会选择最有钱的领域,最流行的领域,比如现在去改做AI。但我觉得做自己感兴趣的事情会走得更长远,从小学开始,我就对图形学、动画、3D感兴趣,所以一直专注于这个领域。

我觉得在游戏行业,如果想钻研得足够深入,那找一家大公司还是会更合适。如果在一个只有50-100个人的小公司,你不可能成立一个几十人的引擎研究团队。而像魔方工作室群有数百人的规模,所以就可以有一个支持中台,允许员工更深入地研究某个领域。

最后,选择岗位时也要注意个人能力和工作室的需求。比如魔方以前做Flash比较多,当时魔方又处于转型手游的阶段,我认为自己在3D上的能力对魔方的帮助会更大,所以就选择了这里。如果当初我去了一些3D积累更深的工作室群,可能反而就没什么发挥的空间。

关于自我提升:游戏程序员该如何终身学习?

葡萄君:在刻板印象里,游戏程序员是一个特别需要终身学习的岗位,你觉得原因是什么?

Milo Yip:十几年,二十几年前,如果你在大学读图形学,那工作后这些技术就可以直接应用起来。但现在图形学已经发展得很深了,只写渲染引擎里物体的阴影就可以有特别厚的一本书,讲相关的5、60个技术。所以现在学校里的课程就只能让你接触到皮毛,想进入游戏行业做相关的工作,就要补很多课。

葡萄君:那应该如何制定学习计划?比如是自己建立一个知识体系,还是跟着项目需求走?

Milo Yip:一般说起这个问题都会讲到广度和深度。刚开始学习时,你要扩宽知识面的广度,对每个部分都有理解。

比如最开始你可以不知道图形、物理、音频等底层功能是如何实现的,但你可以试着用一个游戏引擎实现一些玩法。但后面如果发现有一个问题,引擎没有提供相关的功能或工具,那你就需要自己去解决它,一级级深挖。

我通常会建议同学慢慢理解自己喜欢什么部分,比如引擎方向可以分为动作动画、物理效果等等,玩法方向也可以分为不同的游戏类型,比如MOBA、FPS的技术框架需求都不一样。一个人最好长时间在一个领域累积经验,慢慢加深深度。

葡萄君:你比较推荐的学习方法是什么?之前看你梳理了一份《游戏程序员的学习之路》,列了很多书单。

Milo Yip:可能我是老一辈的思路,相对于看视频,我更喜欢看书。书籍的知识体系更加规范,知识点消化起来也更系统,可以补充你看视频时遗漏的部分。

所以在《游戏程序员的学习之路》里我由浅到深地列了一些具体知识点,然后在每个知识点上都推荐了一些经典书籍,把它们连接起来,做成了一份图谱。前面的知识大多是基础,后面就是一些可供选择的领域了。比如图形学有哪些分支,你需要学习哪些细节。

3.jpg

葡萄君:你怎么看待基础知识和实际问题之间的关系?

Milo Yip:我觉得遇到具体的工程问题时,最好先看看别人是怎么解决的,有什么理论基础,对整个问题看得更透彻之后再选择。比如A方法和B方法都能解决,那是不是要结合两个方法的优点,做一个C方法出来。

我看过很多人遇到问题马上就想方案,写代码,貌似也能解决问题。但可能后面就有人告诉他,说你这个问题其实是什么什么问题,最好的算法是这样的,你这个是一个很弱的做法。

如果要进入一个新的领域,我同样建议先搭建一个知识体系,看看这个领域最好的书,比方说领头人的著作,或者是本科阶段的教材——这种比较容易学。

葡萄君:分享会不会也是进一步掌握知识的一种技巧?

Milo Yip:我会要求我们中心的人都去讲课,或者多多写作。如果能用一篇文章,或者一个课程把一件事情系统地讲出来,那你肯定能清楚每一个细节,对事物有更深刻的认识。

我觉得很多同事在腾讯内网发了很多不错的技术文章,可以梳理一下出版,让整个业界一同成长,于是就花了1年多的时间,编了一本《腾讯游戏开发精粹》,它将在这个月上线发售。这本书的形式和《游戏编程精粹》(Game Programming Gems)有点儿像,每篇文章都相对独立,而且技术也不依赖于某一个引擎,可以广泛使用。这也算是一种分享的方式。

4.png

分享对工作还会有更多帮助,你的影响力大了,项目组自然就会知道你有能力实现哪些技术,这会方便合作。影响力在招募人才,或者和其他公司抢人的时候也很有用。现在还有新员工在入职的时候,跟我说大一就是因为看到我很多年前的博文,才会选择做图形学的事情。

葡萄君:你认为做游戏程序员最难掌握的能力是什么?

Milo Yip:一个难点是技术创新,因为它意味着能够突破现有的框架,实现新的功能甚至新的玩法。就比如《Doom》想到用3D渲染迷宫的方法,这个技术对于单个产品和整个行业的价值都很大。这是一个很高的目标。

另外还有一点是把握技术未来的方向,决定投入哪些领域。这有点儿像买股票,需要判断哪些才是潜力股。

比如2014-2015年,我参考GDC上一些游戏机厂商的方案,帮《天涯明月刀》做了一套中间件,在PC上实现了一些突破性的大世界的美术细节效果,比如云海、天气等等,还实现了大量物体的同屏。后来这套技术也被用到了《和平精英》里。

5.png

当时手游还处在《天天酷跑》的阶段,我其实不知道大型开放世界手游会成为很重要的战场,但我也在考虑跨平台和跨引擎的应用,几年之后才发现当时的投入是正确的。

葡萄君:在技术领域,很多从业者都在讨论专家路线和管理路线的选择,你的建议是怎么样的?

Milo Yip:真的是看性格。一些人可能技术挺好,但如果让他做组长,管理下属的工作流程,制定计划,他真的做不来。而且管理路线也不好走,一般的组织架构都类似金字塔,一级一级往上升也很困难。我觉得成熟的行业应该允许程序员做到60岁。

葡萄君:你觉得做技术管理的难点主要在哪儿?

Milo Yip:做技术研究只要拿到一个题目,逐一拆解,一步步做出来就行。但做管理考虑的维度很复杂,比如说工作室群有什么策略,我要如何配合策略,研究哪些技术,同时还要考虑人力、财政的情况。

比如说你的团队构成要多样化,比方我们有人很熟悉C++,喜欢学习最新的功能;有人喜欢图形学,自己写一个Demo试验新技术的效果;有人在学术方面的能力更强,跟进每年会议上最新发表的文章;有人有超强的数学能力,其他人遇到数学问题,或者看不懂论文就会找他。

另外做管理还要和人打更多交道,你需要了解大家的想法。在团队人数比较少的时候,每个成员过生日我都会自己烤一个不同的蛋糕,展现一下关心,也创造一个大家一起开心的机会。当然现在人变多了,已经烤不过来了……

关于刻板印象:程序员是高级民工吗?

葡萄君:几个关于程序员刻板印象的问题。第一个是一些程序员觉得自己在做重复工作,提高有限,有一种当高级民工的感觉。

Milo Yip:程序员就是要解决重复的工作啊,你为什么不写一个程序来解决重复的问题呢?

程序员应该做其他人做不了的事情。很多时候我们希望写一个工具,让策划和美术自己去配,而不是策划看到人物走的太慢,也要程序员帮忙改一下,这也能提升项目的迭代速度。

如果你觉得自己的工作内容完全没有挑战性,那可能换个环境会有帮助。程序员应该不断面对新的挑战,不停学习,解决越来越难的问题。

葡萄君:另外行业一直觉得35岁是个槛,很多程序员都表示35岁之后实在拼不动了。

Milo Yip:国内这个行业可能还不太成熟,加班成了竞争的一个条件,这个情况肯定不太健康。现在我们团队的节奏还好,服务的项目遇到节点也需要加班,但我会努力为他们争取调休,比如最近做完现在的项目,每个人会有8天调休。

怎么让团队不加班也是一个管理上的挑战,可以分享一个技巧:我会要求一些主导的项目做单元测试(unit test),就是自动化测试,这可以保证软件的品质。

最理想的情况是程序每提交一套代码都会出一个版本,经历一次自动测试,这样如果出问题,就能迅速知道是具体哪个位置出了问题,以此减少人力成本。

葡萄君:作为一个实现功能的岗位,程序员应该如何避免和提出需求的岗位发生冲突?比如很多人都会开程序和策划的玩笑。

Milo Yip:提需求,做事情一定要写文档,做完事情也要写报告,让其他项目组都知道我们帮这个提需求的项目组解决了什么问题,有什么量化的结果。

文档也是传播知识的方法。在写文字的时候,程序员可以把抽象的思路沉淀下来;而其他成员再遇到相关的问题,也不用跑来跑去地问别人。所以写作是很重要的工作。

葡萄君:你对技术人员还有什么其他建议吗?

Milo Yip:保持身体健康哈哈。之前我很容易病,也容易累。刚来魔方不久,我们出去开会,开到中间还睡着了。后来坚持运动,减了20公斤,做事情就精神了很多。如果想运动,那就要制定一个计划,一周运动多少天,然后把它变成生活的一部分。

葡萄君:你现在一周运动几次?

Milo Yip:周一到周五做力量训练,周一、周三、周五晚上去游泳,冬天就去跑步。最近我还成功游到了5000米。

6.png

对未来游戏技术趋势的判断

葡萄君:最后问几个我们向技术人员征集的问题。第一个,一家游戏公司做自研引擎需要考虑哪些要素?

Milo Yip:其实Unity、Unreal等商业引擎已经很成熟了,做自研引擎最大的原因,是要匹配自研项目的特性。

比如《天涯明月刀》的Quicksilver引擎,3-4年前上线时就实现了带有超广视野的渲染效果特性,而且在低端机上也能流畅运行。如果是用通用引擎,就很难针对特定的场景做出最极致的优化。

在我看来,做自研引擎要满足3点:相关的技术实力、长远投资的计划、合适的自研项目。只有需要突破现有引擎框架,满足独特的技术特性需求,才最值得投资做自研引擎。

葡萄君:现在很多公司都在讲技术中台,这个词应该如何定义?什么样的公司应该考虑搭建中台?

Milo Yip:技术中台的目标应该是聚合重复的工作,用最好的人搭建公用的平台、工具、技术(比如客户端侧的的游戏引擎,后台侧的服务器框架等等),降低多个项目间的重复劳动和人力不匹配问题。如果一家公司同时有4-5个,甚至10几个项目在并行研发,那搭建中台的需求就比较大。

葡萄君:如何看待光线追踪对游戏的影响?未来什么时候这项技术会成规模地应用?

Milo Yip:现在在PC上光线追踪已经可以实现比较前沿的效果,比如反射和精确的阴影计算,不过它只是一个光栅化的辅助形式。目前这一代游戏主机还没支持光线追踪,新一代支主机面世后,相信很多3A厂商会积极改造引擎和工作流,使用这项技术。

长远来看,未来光线追踪有机会完全代替光栅化技术,届时可能会出现和现在完全不一样的建模方法,比如模型可以基于曲面,而不是三角形来定义,不过这要等待硬件的进一步发展。

在手游上,这项技术的应用还会经历更加漫长的过程。以过去的统计来说,当前手游的性能,大概会落后PC和主机10年左右。

葡萄君:你认为5G对游戏行业会有什么影响?技术人员该怎么适应云游戏的趋势?

Milo Yip:当前5G已经可以达到低延时、高bandwidth的网络环境,理论上已经能比较好地支持云游戏了。但我觉得云游戏发展最大的问题不是技术,而是商业模式。

现在一两千块就能买到一个性能不错的手机,如果要把游戏的所有计算放到后台去做的话,那反而意味着更高的运营成本,而目前还没看到支撑这个成本的成熟商业模式。

对于开发者来说,云游戏对游戏开发的影响没那么大,PC游戏只需要很少的改动就可以放到云上面,建议大家目前不用投入太多精力。

文章评论
游戏葡萄订阅号