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