一、 工作内容上的区别
客户端开发更偏重于游戏玩法的实现,也就是常说的Gameplay,比如战斗系统怎么实现、任务流程怎么进行、UI界面如何交互等等,细分来说,其实客户端也有很多方向,比如3C(Character、Camera、Controller)、AI(怪物、寻路)等。再具体一点,一般新人进去大概率是从UI做起,你可能会接到一个需求,比如实现一个简单的背包界面,背包里面会存放人物身上的物品,点击的时候会显示物品的具体信息(属性、数量、价格等),并且可以出售、丢弃、购买、整理等。因此客户端开发,更多的会跟策划打交道,每当机智的策划同学想到了一个什么新的点子(需求),你就需要把他们精妙的想法实现到游戏中。
游戏引擎开发则更偏重于游戏的画面和性能,以及游戏开发中的工具链,并且引擎会更多地涉及底层的技术知识。引擎岗也有很多细分方向,最大的一块肯定是渲染(或者说人们一般最关注的),除此之外还有动画、物理、编辑器、脚本、性能等等,以及一大堆开发工具。
即使是最受关注的渲染方向,也还分为光照、着色、阴影、抗锯齿、后处理、特效等等,其实细分方向真的很多。
我本人是渲染方向的,具体的工作而言,你可能会去实现某种画面表现的特性,比如天气系统,你怎么实现动态昼夜变化的效果?比如粒子系统,UE的Niagara已经非常强大了,你当然不需要自己去实现一个粒子系统,但是你如何运用它的强大功能去实现一些酷炫的效果?比如像最后的生还者2中的雪粒子附着到人物身上、随着手电筒的光束照射,虫粒子群会随之聚集和扩散等。Niagara系统是可以在内置的脚本中写逻辑的,因此几乎你想要的粒子行为和表现效果,都可以通过代码(和美术)来实现。
此外,引擎岗之所以是引擎岗,肯定是要写引擎的代码的,不过除了极少数拥有自研引擎的工作室之外,大部分引擎岗的工作就是如何"用好"和"改好"商业引擎,不需要重造轮子。不过如果现在的商业引擎没有这个功能,但是你的项目又需要用到这个功能,你就需要去实现;如果这个引擎的功能,无法满足项目的需要或者太烂了(无论是功能还是性能),你就需要进行改进。包括一些引擎工具的开发,一些系统功能的扩展和优化(有时候你甚至需要修复引擎自身的Bug),这些,都是引擎岗的工作内容。当然,引擎还有很大的一块是性能优化,这一部分工作一般都是组里技术实力比较强悍、工作经验比较丰富的老司机来完成。因此引擎岗的话,平时更多的会和美术打交道,一起去实现更牛逼和酷炫的效果。
不过我想提的重要一点是,其实客户端开发和游戏引擎开发,很多时候并不是分得那么清的。比如我曾经在网易实习的时候,那个项目的程序组只分为客户端和服务端,所以无论是客户端开发还是引擎开发,都由客户端的同学来完成。在这种组里面,一般会有一部分人做Gamplay的工作,还有一部分人,其实会做引擎的工作,比如渲染、性能优化、工具链等,而且客户端组长确实就是做渲染的(他一个人),但项目主程是服务端。即使在我现在的这个组,分了客户端和引擎岗,客户端很多一部分工作,都会与引擎岗交叉重叠,比如他们也会有做动画的(3C),做工具链的(资产检查工具、各种编辑器等),也会有一些改到引擎代码的工作。甚至我们引擎岗的很多工作,都需要客户端的同事来做支持。
二、客户端和引擎岗的难度区别
一般来说,引擎岗的要求会比客户端岗稍微高一点,因为引擎更多地涉及到底层,并且很大一块是图形学技术,因此需要较强的数学功底。但门槛的区别,不代表引擎岗做的工作一定比客户端难,客户端的很多进阶方向,比如上面提到的战斗、AI、动画、系统架构等,都是很有技术深度,值得深耕的。
说到难度了,就顺便提一提游戏公司对于两个岗位的区别。很多人也想知道这两个岗位到底哪一个未来的发展会好一点(比如待遇和晋升),以及引擎岗究竟难不难学,是否能够入门,这其实也是我当时的困惑所在。但从我的经验来看,可能不需要太纠结这个问题,因为无论是客户端还是引擎方向,都可以拥有很好的发展前景,客户端一样可以作为主程、组长甚至总监,我们项目中也有一些职级很高的客户端大佬。一个人的职业发展更多的是取决于你的能力,以及你工作上的表现,而不是取决于你选择了什么岗位。
不过客观地来说,引擎确实是一个门槛更高,以及天花板更高的岗位,腾讯中我所知道的3个T14的巨佬,都是引擎方向的(或者说客户端+引擎),我之所以说不需要纠结这个问题,是因为绝大多数人,都不会触及到客户端开发的天花板。而且随着你开发能力的提升,肯定是越来越往底层做的,客户端多多少少会涉及到引擎的工作,后期转引擎也是很简单的。所以我建议最好从自身的兴趣出发,找到一个自己喜欢的方向,做到精通,喜欢GamePlay,游戏玩法相关的就做客户端开发,对于画面表现、底层技术感兴趣的,就选引擎。有时候要做选择,不从功利的角度出发,也许反而能得到更好的结果。
但话说回来,如果真的关注薪资的问题,我也可以告诉你,客户端和引擎岗,如果是相同级别的OFFER,其实差距不大,可以说基本没啥差别。如果真要说差别,那就是引擎岗的上界会比客户端更高,毕竟这技术区间摆在这里,那些发了Siggraph的学神,那些浙大CAD的大佬,不给多点也说不过去啊。不过还是那句话,我们当中的大多数人都...不需要纠结这个问题。
三、技术要求的区别
其实这两个岗位的要求,可以直接去参考一下各个游戏大厂对于这两个岗位的jd(岗位描述),对于我自身的经验来说(我参加过客户端的秋招和引擎的秋招),有一部分技术要求是公有的(Public),比如计算机基础知识(数据结构、操作系统、计算机组成)、计算机语言能力(C++、C#、Lua)、算法能力;当然还有项目经历(项目、比赛、实习都算);区别来说,其实主要就是计算机图形学的知识了。除此之外,引擎岗可能还会更注重你的底层技术知识,比如计算机组成中的缓存技术,C++编译链接的原理(动态链接、静态链接),操作系统中的内存管理等。此外,游戏客户端可能更看重于你对游戏引擎的熟悉程度(使用),以及开发游戏的经验。如果你自己尝试开发过很多或者质量很高的游戏,面试的时候肯定是很加分的。
在图形学这一块,其实客户端开发也会问一些,但我个人觉得,其实客户端问图形学的意义不是很大,除非像我之前说的客户端和引擎都在一个组,不进行区分,否则进了客户端组大概率不会参与到渲染相关的开发(当然可能也会有一些用,比如一些渲染的基础知识,如果你要做一个美术资产管理工具,你连Mesh、Texture、Material这些都不懂,是不可能做出来的)。然后根据我的经验而言,我实习面客户端的时候,一点渲染知识没问,秋招的时候倒是问了一点,不过也是比较基础的东西,客户端更注重的还是软件开发的工程能力,问我图形的原因我认为是跟我自己的简历背景相关,如果你有很多Gameplay方面的经验,我想客户端的面试官肯定会更感兴趣问这些东西。
那么对于引擎岗来说,图形学基本是必问的了。游戏引擎主要关注实时渲染,所以离线渲染可能要求不是那么高,当然如果你光追学得很牛逼,实时光追很了解得话还是有用的。至于数字几何处理、计算几何这些,感觉算是一些前置基础知识,不用太过系统和详细地去学,用到的时候再学可能效率会更高。还有模拟,这些其实与你做的方向相关,比如我自己就对流体模拟、布料模拟很感兴趣,因此这些可以多深入学习,上面也说了引擎岗也分很多方向,如果你就是擅长物理,那么你的技术深度越深越好。
四、如何准备
和职业发展一样,面试关注的是你的实力,跟本科生研究生没有太大的关系,只是一般研究生对于技术和知识的积累更深厚,导致了可能会被认为引擎岗研究生会更容易进入,其实我们组里就有几个本科生,实力也挺强。
如果想要系统地学习,那么还是我刚才说的那几点,计算机基础、图形学基础知识、算法和Coding能力,以及项目经验。对于图形学而言,现在的学习资料太多了,有空的话直接GAMES套餐来一套,学一学闫神的101和202,只要全部理解掌握了,把作业都独立完成了,面试肯定没问题。
如果你只是想达到招聘的门槛,那么其实图形学也有一些八股文。我可以简单说一下,渲染管线、变换矩阵、着色模型、抗锯齿处理、辐射度量学(BRDF)、PBR、阴影、全局光照等。面经也很多,自己找吧。但是光靠八股文还是有可能会翻车的,干程序员这行的,还是得有真材实料不是。
飞特游客
委托设计