国内的游戏国内程序员需求量是否有前途

1848人阅读
日志(56)
这是我多年来招聘培训C++游戏程序员的一点想法。一直想汇总一下。我在H3D Studio的核心技术人员和游戏制作管理人员全部是SMTH BBS游戏制作版成员。从99年开始截止BEGINER的历任版主都在H3D STUDIO里工作过。在这里我想和大家聊聊关于游戏程序员切身利益相关的事。在C++游戏程序员发展前景上谈谈一些自己的看法。
另外这不是居高临下来评判什么事情。我本人也不是多么高级的技术人员或者管理人员。只是坚持做一件事情年头很长教训很多而已。所以有些体验。文中所有评判其他结构或人水平低,并不是说我本人水平有多高。不要误会。
1 ,C++游戏程序员现状
中国C++程序员100%都是自学的。因为中国几乎没有象样的C++培训机构。大家都知道社会培训是赚钱为主要目的。能在那里成才是个大运气。也不象JAVA有SUN公司一手推行。中国大学教育里也根本没有C++教学。关于C/C++基础课的知识,只是让学生入门。但对于实际的C++软件工程应用,大学课本知识实践意义不大。最重要的是,大学里没有合格的C++老师。编程是门技术,叫手艺也行。而大学是搞科研的,多的是科学家,靠出PAPER教科凭职称为生。并不是技术员。没有10万行以上代码经验和成功软件项目经验的人,很难教出中高级C++程序员。
游戏制作业对C++程序员的要求是比较高的。比一般行业软件高很多。因为任何一个MMO都是个中大型软件项目。日使用人次达到几十万上百万,同时使用人数几十万在线的大型网络多人交互软件,集成了超过十几项专业领域编程技术的软件,想不大都不行。
另外,中高级C++程序员能力一般都很强。因为都是自学成才,这需要较高智商,很强的自学能力,解决问题能力,和克服困难的毅力。但是这种人才在游戏行业里人数并不多。抛开凤毛麟角具备整体大型软件架构能力的高级人才不谈。能够承担独立模块开发,具备独立解决问题的能力,写出在空间,性能,可维护性等几个方面达到要求的C++程序员,也是很难找到的。而具备这些能力,同时又具备一些专业领域技术的人(图形引擎,网络引擎,等),更加稀少。
所以,即便是大游戏公司,对于C++游戏程序员的需求,也是永远不能够得到满足。而已经在公司工作的C++程序员,不经过短则3个月,长达1年的锻炼,也无法真正胜任独当一面的C++游戏程序开发工作。
2 ,MMO游戏开发对C++游戏程序员要求
前面提到,所有MMO游戏都是中大型软件。软件占用空间,稳定性,性能,可维护性等各项衡量软件质量的指标,对MMO游戏软件的要求都非常严格。远大于普通行业软件。这种规模和银行系统类似。而客户端和软件逻辑比一般的商业软件又要复杂很多倍。这就要求软件编写人员具备较高的程序编写素质。
游戏软件中,解决好软件工程部分,只是项目的1/3。另外两部分是策划和美术/音频。从经验来看,需求变更对于MMO游戏软件,不是偶然事件,而是一种MMO游戏软件开发的基本属性。游戏软件投入大,周期长,风险高。MMO市场变化也大,交互电子游戏发展迅速。游戏软件必须面对外界变动。又因为开发周期长,所以软件需求变动成为了软件开发的一种基本属性。犹如复杂性是软件工程的一项基本属性一样。
这导致游戏软件的开发充满了不确定性。交互娱乐不同于商业应用。娱乐是属于理性和感性之间的领域。而C++开发面对就是0和1的二元世界逻辑。这两个领域存在着不可调和的矛盾。这种情况,对C++游戏程序员提出了更高的要求。
首先,基本C++知识,C/C++运用技能,必须极其扎实。并不是游戏软件开发用到什么平时书本上很难得到的知识点或者技能点。游戏C++开发的知识体系和技能体系,利用现有C++书籍就可以满足。比如《C++ PAORGRAMMING LANGUAGE》《C++ PRIMER》《EFFECT C++》《MORE EFFECT C++》等。但是在开始游戏编程之前,把这些书本吃透并且实践熟练的人,非常难遇到。当然能够真做到这点的人,已经是个中高级C++程序员了。我曾经遇到过一个,毕业工作不久就去了GOOGLE
其次,对于面向对象的深入理解。是非常重要的。熟练掌握C/C++语法,编程技巧,只是满足了C++游戏程序员一部分要求。而面向对象观念的深刻理解,会为大型C++项目开发带来翻天覆地的变化。有时候,在一个10人以上并行开发的C++游戏项目中,面向对象方法会成为救命稻草。《设计模式》以及《设计模式解析》相关的书籍,也是必修课。
最后,好技术人员的本质是自大的。这属于正常。但是如果这种习性影响了自身继续提高和团队合作。以及影响了其成为技术管理者和项目技术核心时,那么这种技术人员的自身价值会大打折扣。如果早日越过自命不凡这一关,扩大眼界,继续在综合素质上提高。在技术管理能力,架构能力上提高,其自身价值才会继续增长。落到实处,就是待遇和身家增长。
由于游戏开发的本质是团队开发。任何时候,只有对一个团队有价值的技术人员,其本身的价值才有可能得以体现。
3 ,成长和技术发展路线
一般技术人员发展有几个阶段
1 ,具备独立开发局部功能的能力
比如为某个UI编写逻辑接口函数。为某个LOGIN对话框编写自绘制控件等。
2 ,具备独立开发和攻关某个功能模块的能力
比如为游戏增加一个小型逻辑功能模块。
3 ,具备独立设计并开发某个系统的能力
比如设计和开发AUTOPATCH 系统
4 ,具备解决技术难题,设计架构的能力
比如开发网络同步仿真系统,开发一个中大型游戏制作工具
5 ,具备整体架构,管理,协调其他人共同开发一个大系统的能力
客户端主程,服务器主程,引擎主程等
6 ,技术director
制定技术发展方向,技术团队建立,技术管理等
在迈向每个阶段的过程中,伴随的都是巨大的工作量和工程压力。有时候是跨越1年的失败等等。在公司项目不成功时转换单位,重新开始,或者继续做为核心团队留在公司继续从新的机会做起,都是好的办法。但关键是吸取经验教训,尽量多学多练。并且结合自身长处发展。当然,游戏制作人员,最好还是依靠一个核心团队。成为核心团队的一员。
能够达到第三档的程序,已经是公司不可缺少的人才了。但往往程序员自身对自己的认识,和公司对其的认识,有时候会有差异。我碰到过一些人,脑子好用,写东西很快。各种技术都有涉猎。但总是不放心让他独立开发设计某个系统。哪怕是相对独立的工具。也会被搞得一塌糊涂。要后面人不停擦屁股。可自己还觉着自己水平很高。这种人浮躁,眼高手低,不愿意细致周全的做好一件完整的事。所以就可以看到他不停的跳来跳去,可在新公司的职位也没有见多么提高。公司非常重视交给一个程序员一件事,他是否能完整,考虑周全的把事情做完。哪怕时间长一点,也不能不做完。这会给工程带来致命的后果。
4 ,发展待遇
从自身经验出发谈一下公司是怎么考虑技术员工待遇的。
前面提到的6档,粗略了划分了待遇水平。其实到了第三档,你的待遇已经是这个行业所决定的了。而不是某个公司决定的。因为游戏业大量缺乏这样的C++程序员。如果具备这个水平,在几个大城市游戏公司找到工作并不难。大公司提升慢,还有我这种不到百人规模的公司要。所以行业价格才是公司要考虑的。如果给少了,软件项目的C++程序员流失会带来较大影响。但给的多,其实是C++程序员自己的价值增长瓶颈。如果几年下来一直以为自己水平就该拿这么高,结果到了一家整体技术水平比较高的企业,就会彻底傻眼。这个时候再放低心态去重新开始,对技术员来讲就是件很艰难的事了。
在目前游戏行业技术水平普遍较低的情况下,哄抬程序员工资水平对程序员自身好处也不会很大。就算一个新手本来拿几千的水平,给他1万。他根本就不会知道自己到底有多少水。一年下来也就多拿了3-4万人民币。可耽误的是学习,影响了心态。而那些心态好,知道努力方向的技术人员,干个3-5年后如果有拿期权和股权的机会,比那些一开始虚高的人,身家就不知道高多少倍了。
下面再谈谈我个人在招聘C++程序的体会。
1 做为C++程序员,成长周期比较长。如果是新手(代码量少于2万,没有做过大型项目的),会考察3点。是否踏实肯钻研,有无责任心,以及是否够聪明。如今,满足这三点的人其实不多。
责任心是人品,决定了是否对公司有贡献。这是最重要的。有些人其实很自私。这种人对公司贡献是负数。而且到头来,自身价值也很难起来。因为技术是要靠游戏的商业成功体现价值的。要取得商业成功,就需要一个团队为一件事付出。是否踏实决定了能学会多少技术知识。关于智商,我是最近2年才意识到人的智商确实有很大差别。干程序这行,智商必须越高越好。否则前途不大。
2 如果是有过2-3年C++程序经验的人,应考察的是人品,是否自大,是否有合作意识,是否跳槽频繁。
首先还是责任心。太自私,太为自己着想,时刻把自己利益看成最重要的人,到哪里都不会受欢迎。无论他技术有多好。
然后考察的是是否自大。人最容易自大的时候,往往是对一门技术已经入门,取得一定的小成就。但是眼界还没有开阔,没有领略到这个领域真正深入的技术知识。周围缺少好技术的人。这个时候,技术人员都容易自大。适度的自信和自大是允许的。但是目空一切就完蛋了,说明这个技术人员的提升空间很小。
合作意识是游戏开发的关键。包括交流能力,思考和解决问题的思维方式。一个喜欢独来独往的技术人员,在游戏团队里是个很可怕的事情。因为游戏软件不是一个人能够完成的事情。由于逻辑复杂,需要各种专业技术领域知识,需求变动频繁。每一步都需要团队通力配合。缺乏这种意识,或者对团队开发不适应有抵触的技术人员,在游戏开发领域存活的希望不大。
做为一个C++程序员,跳槽频繁的履历是很致命的。做C++时间长的人都知道。进入一个庞大的C++软件工程本身就需要不少时间。经过培训,项目熟悉,在为项目做贡献,这个时间短不了。如果一个人经常跳槽,说明他一直没有踏实在一个项目里深入做过核心的东西。或者做失败一个马上跑掉。这种人公司不敢要。
3 对于有专项技能的程序员,比如图形程序员。C++只要入门有培训空间即可。但对专业要求比较高。应该是已经在某个技术领域钻研比较深。当然最后在公司还是得成为使用C++熟练的高级程序员。因为任何专业领域的技术如果要应用到工程中,还必须用C++做工具。
4 好的C++游戏程序员,其实不容易找。如果他干得好,早就成为项目核心成员。如果项目不错,自身待遇也会很好很稳定。不需要通过一般应聘渠道应聘。不是被拉到公司做核心技术拿期权,就是自己创业。
这里我打个比方。网易有个云风。大家都知道他是大话西游2的客户端主程。他是中国第一个做开源C++游戏引擎的人。开放了一整套C++游戏引擎代码。这是他大学时做的。毕业后去网易。有了平台,做成了中国历史上最成功的MMO之一。做为游戏技术人员,他的价值可以说已经是很高的了。到底有多高,我们都不好瞎说什么具体数字。但可以这么刨析一下。
一个经验丰富的C/C++程序员。有过中国自主研发在线过百万游戏的成功项目经验。目前有网易出钱让其独立领导队伍搞引擎和游戏产品已经快3年。这样的一个履历,经验,本身就价值很高。他在任何公司都可以找到年薪几十万的工作。如果他具备管理才能。哪怕就是项目管理,或者技术管理能力。对于一个上市公司,他能做出的贡献,应该用百万/年量级来衡量。如果他能找到一个商业人士,负责舵手,并且自己具备一定商业能力,独立创业。吸引的天使风险投资也得几千万(否则做不了事,当然)。如果产品能做成,身家到达几千万是很自然的事。
我相信中国游戏程序员水平,运气,发展空间比他高的人不多。那么我们可以拿他做个标杆。
我知道很多人不服他。不过这里说的问题并不是关于他本人的。也不需要对他本人做什么服不服的评判。做为一个社会的人,不是靠能写多少行代码,代码多么优雅水平多么高来衡量身家的。从这点说,技术没有转化为成功商业产品之前,它的价值为0。做为技术人员,社会衡量他价值的标准,并不是要去阅读代码是否质量优越速度飞快。而是看他能为一个成功商业产品或者公司发展做出多少贡献。这个道理,几年前我还不太明白。而且我做为一个技术人员,相信多数技术员同胞们都不太可能从根儿上理解和认同这个看法。这里不是评判水平,而是评判价值。你的价值代表了你能够拿到的待遇。这个不是某个老总说了算,某个公司说了算,而是取决于人均GDP和当前行业发展水平,行业销售额的。我想这个道理也适用于所有游戏制作相关人员。
结语:随着IT技术发展及应用的逐渐成熟,作为C++游戏程序员,他们所要面临的业内竞争也将日益激烈。对于挣扎在游戏开发这片汪洋大海里的程序员而言,技术就是王道,也是他们前往成功彼岸的唯一扁舟。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:654261次
积分:9761
积分:9761
排名:第1479名
原创:368篇
转载:81篇
评论:81条
(1)(1)(1)(1)(2)(1)(3)(9)(2)(1)(1)(4)(2)(1)(1)(1)(3)(4)(18)(3)(5)(6)(1)(7)(3)(4)(6)(15)(39)(27)(41)(34)(18)(3)(6)(6)(10)(9)(15)(48)(46)(26)(3)(6)(8)【讨论】听说马化腾是中国第一程序员_网络游戏吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:913,611贴子:
【讨论】听说马化腾是中国第一程序员
看到隔壁楼在说谁是中国第一程序员,结果楼主说,我瞬间笑出声,楼主一定是死忠粉
08水爷43求上 华东07德...
中国有多少烟民你知道吗...
&HOT&网络游戏,2017网页游戏排行榜NO.1!玩家欢迎度95%的网页游戏尽在37游戏排行榜!2017热门火爆网络游戏,网页游戏人气NO.1,好玩的网页游戏马上抢注,..
影响确实很大,毕竟小学生聚集地,山寨之王
老马肯定不是,都完爆老马好吗?更别提史玉柱发迹之前软件行业的人
第一个网红美少女就是马化腾吧~当年QQ~小马自己装成美少女结实不少小青年才把QQ撑起来吧~
这个楼主评判第一程序员的标准是什么,很想知道,难道是马化腾给你送了5q币
是求伯君江民那一代人吧
不会抄袭的ceo不是好程序员
我先去看看隔壁楼主的帖子,脸被打肿了没
玛德,没下文了?
截图有点乱,等会放隔壁贴连接,这个楼主字句间,透露出一种天下舍我其谁的王八之气,看不起别人北京职业技术学校的,敢问大佬哪所大学的,哈佛还是剑桥,或者斯坦福
2017年网络游戏新作「修魔世界」今日内测1OO%免费网络游戏,下载网络游戏1OO%送礼!_网络游戏_今日内测,下载游戏1OO%送微信红包!,非RMB首选网络游戏!
大概是求伯君
打起来打起来
打起来打起来
贴吧热议榜
使用签名档&&
保存至快速回贴游戏开发的编程算不算是 IT 行业中难度最大的_程序员吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:86,350贴子:
游戏开发的编程算不算是 IT 行业中难度最大的收藏
游戏开发涵盖几乎所有CS领域的知识,然后需要把所有这些东西(有些可能在单独领域中老死不相往来的算法),整合到一个大而全的稳定系统里面实时运行,这TMD就是一件不可能完成的事情啊!
一、关于游戏开发编程难度的定义
我认为,游戏开发编程就是围绕着游戏开发的一切写代码行为。有人回答说现在很简单啊、有引擎啊、写个逻辑没难度之类的,这都是没有帮助的答案。那引擎算不算游戏开发?如果不算,我能不能认为研发汽车很简单,只需要把汽车生产的流水线买回来,然后自己采购材料装配就算研发汽车?荒谬!没有引擎,算个J【哔】。没引擎研发你好意思说自己在做游戏么?那是策划和美术干的事情,没技术人员个J【哔】事情。
游戏研发的技术含量,绝大部分就在于引擎研发里面,没有引擎研发,等于技术人员没什么鸟事情。所以我认为游戏研发编程,应该用引擎研发的来定义,而不是简单用游戏逻辑敷衍过去。当然,游戏逻辑要开发好也绝对不是一件简单的事情,之前有人讨论过的,如何搭建一套任务系统,非常讲究。这里先不展开。
二、游戏引擎是个什么鬼东西
绝大部分人,特别是小白,只是认为游戏引擎只是画出游戏画面的那么一坨东西,只是一个执行游戏逻辑脚本的程序。嗯,这都是业余看法。
游戏引擎虽说是引擎,实际上是一套生产工具,代表着游戏开发者的生产力。要开发游戏,就需要通过这套工具,去进行游戏的内容创建(Content Creation),并且进行游戏的维护、迭代、再开发(DLC、资料片)。而且游戏引擎还包含对自身开发的工具,比如专门debug引擎的工具,专门profile工具等等。再深入一点,针对网络游戏,服务端有专门的部署工具、管理工具、测试工具、维护工具、GM工具等等。所有这些东西,加起来,一整套工作流水线的总和,才是游戏引擎。Runtime部分,只是一小坨东西。
游戏引擎Runtime部分的东西,都是实时或者准实时演算的、也有实时重演的,这部分对技术的要求是效率高,无论是图形、还是物理、AI等都必须在毫秒级别完成复杂运算,还需要跟游戏本身的表现进行配合,抠得很死。
游戏引擎编辑器部分的东西,大而全,一般稍微完整的编辑器都几乎要克隆大部分Autodesk 3DS Max的基本功能,而且还需要针对引擎本身特性作出一些定制,还需要根据不同游戏类型、游戏资源创建的pipeline进行调整。而这个调整、这个pipeline本身的合理性和流畅度,直接影响美术资源的制作、游戏内容的制作迭代,很多游戏胎死腹中,死就死在这个上面。什么东西是游戏制作预算最大头部分?你们猜?
游戏公司的生产效率,就直接体现在编辑器的制作效率上,以及内容生产者对pipeline的磨合程度。磨合得好,效率高、成品率高、往返扯皮少、预算低、项目可控、产出可控。磨合得不好,就跳票、跳票、跳票、挂。
服务端部分比较敏感,不多说,就一笔带过,用集群的,有可能你全服挂了还不知道哪个结点出问题了怎么死;逻辑不严密的,交易复制金钱一个星期了还没log没警报没言论监控察觉,游戏直接金钱通胀GG。
三、游戏引擎开发的难度
没做过引擎的、做过引擎的、和设计过引擎的人,想法完全不一样,不能同日而语。屁股决定脑袋,你不在那个位置上,不能把问题思考透彻。很少人可以从无到有搭建一个完整的引擎并且让它变成一个游戏可以卖钱,于是很少人能想明白,有些东西为什么这么做。
比如 ,这里列举了一堆所谓的问题和采用的算法,指出他们在很多年前就已经进入瓶颈了。真的吗?那么为什么这些年引擎还在进步?游戏画面在提高?游戏体验在加强?游戏引擎的算法在更新?举个栗子,LPV/SVO算不算图形算法的突破?二十年前卡马克时代有LPV么?有全局光么?他动态光都不敢多用两个,何况现在用的brickmap style的light point cloud做无穷多光源的模拟。这些例子太多,实际上还真不算什么难度,有算法出来了,我们集成就是了。
然而游戏引擎真正难的部分在于,架构。
重要的事情要说三遍:架构、架构、架构。
很多算法看上去很美,单独实现很简单,但要真的用起来,一点都不容易。因为你的引擎不一定容得下它。架构并不是很玄乎的东西,他实际上看起来就像一个架子,用来放一些业务和算法。牛逼的架构就是可以放好多好多东西,可以兼容不同类型的业务和算法,并且相安无事。挫的架构就是需要不断的进行整体的更替以适应业务的变化和新算法的需求。
简单的来说,架构源自于对重复性业务的抽象和对未来业务扩展的前瞻。即你的经验和预见。比如你的Entity底层架构是否带树状更新结构,要知道树状更新结构会在大量采用嵌套性挂接结构的时候引发性能问题,即如果你在做MMO,那么要小心咯,策划可能会做一些复杂的圆环套圆环装备、宠物、翅膀、坐骑、双人坐骑、移动平台,这些都是嵌套性的挂接结构,在树状更新的时候需要遍历树的每个节点,可能有性能问题(在移动时代这还可能产生耗电问题)。但如果你在做FPS,那么这个不是什么大问题。(请参考采用Unreal2的天堂,对照Unreal3的ActorComponent改动)。
所以,你的架构,决定了你做什么游戏有利,什么游戏不一定有利。
那问题来了,没引擎之前,怎么来架构?踩坑啊!踩足够多的坑。没做过实际游戏,一定、绝对、100%是没法做引擎设计的。因为引擎架构来自于业务,没有业务的洗礼,不知道什么才是引擎真正需要的。于是在做引擎之前,必须先熟悉游戏开发本身。引擎架构还必须足够宽容和庞大,以容得下各种不同领域的算法;同时架构还必须足够高效,本来已经繁重的游戏计算需要更轻更快的信息交互。
试想一下,你的逻辑结构每帧需要从设备抓取玩家输入,监听网络事件,然后转换成逻辑响应、驱动游戏逻辑运算、驱动AI运算、驱动物理运算、再变成Entity的属性、由Entity发送到渲染层、渲染层把属性翻译成渲染属性、组织成最合适渲染设备调用的数据、发送到渲染设备、设备在进行最复杂和繁重的渲染计算、这个时候引擎很可能在并行的做一些收尾工作、准备下一帧更新、同时调度后台的文件系统读取即将需要的游戏资源、并且游戏逻辑可能利用等待渲染的时候做垃圾回收、或者进行脚本的热更新操作。
上述工作,横跨数个大型模块:
引擎层对象模型脚本逻辑AI层的数据更新物理引擎的模拟运算(更新、交互、反馈)渲染层的更新运算(Vertex/Index/Texture/Shader/Framebuffer/Parameter)网络层(RPC/Data Replication)鼠标键盘输入输出GUI的组织和更新
嗯,基本上,计算机几乎所有领域的算法,都基本涵盖了。(还有反外挂技术,开发到最后基本和杀病毒杀木马无异……)
游戏引擎的架构,相当于把上述这些大型的模块,当做老婆一样娶在一起,然后让他们相安无事,和平共处。可是他们天生都是相互嫉妒的啊!物理的数据渲染不能复用啊!渲染的数据无法反馈啊(反馈的代价很大啊)!逻辑的数据要稳、引擎的数据要高效、不同算法需要不同的对齐/排列,要快还要考虑SIMD啊!尼玛的,这些东西要传递要交互几乎都是要设计n套交互协议啊!
于是我们利用了一个伟大的发明,那就是OO。所以C++是必须的,游戏引擎必备的语言。OO拯救了游戏开发者的世界……
然而你在用OO抽象这些东西的接口之前,你需要先熟悉上述所有这些领域的算法,才能设计出一个中心框架架构……要知道这些东西,每一个模块的具体算法,随便拿一个出来,都足够你做一辈子的。
君不见 vczh 就做好GUI已经足够骗11w粉了吗!游戏引擎就是要把上述所有的东西,都做好,你说有多难?
更难的是,上面这个每帧更新过程,是实时在跑的。更更难的是,这些东西,有可能是在玩家的小霸王学习机上跑的。更更更难的是,玩家可能在网吧、而网吧安装的是非标准的操作系统、并且用的是垃圾cpu加非常不错的显卡跑的。
这些问题,作为游戏引擎开发者,特别是苦逼的国内开发者,都要考虑到,都要想办法兼容、压榨,否则玩家分分钟问候你家人一个晚上。
所以,基础架构,对游戏引擎尤其关键,而恰恰它的开发却是困难无比。
(我很想展开服务端啊,可是我不算特别懂,而且游戏服务端比上面这个客户端的高大上很多啊,牛逼的服务端引擎很屌很腻害啊,想象一下像黑客帝国里面的情节一般,我和你面对面释放魔法造成伤害,但我们在不同的服务器上,不过下一个瞬间,我们又在同一个结点上了——所谓的动态迁移)
四、游戏引擎最复杂的部分
无疑,在引擎runtime(我这里仅仅说runtime,其实tool chain部分有更复杂的,但绝大部分人接触不到,不提作罢)部分,最复杂的,要数图形引擎。
首先图形引擎是一个门槛很高的开发项目。虽然学的人多,但靠谱的人少;靠谱又懂美术的,少之又少;靠谱、懂美术、做过游戏、又可以设计引擎整体框架的,凤毛麟角。图形引擎需要的并不是一个实证式的算法,它需要更多的是trick,是cheat,要骗过玩家的眼睛和感受,需要的不只是一个书呆子式的研究员,而是一个深入了解游戏美术制作的、懂那么一点美学和电影的算法设计师。每个引擎都会根据自己需求定制一些图形算法,去adapt自己的优势。
其次图形引擎是一个弱理论强工程的产物。即使你理论水平已经达到发西瓜paper的地步,也不代表你可以设计出优秀的图形引擎。因为图形引擎需要应用——要接地气。你面对的可能是一个很广泛的GPU type,可能有不同的渲染管线架构,可能有不同的API,甚至可能你的图形引擎需要兼顾PC、移动、console平台,每个平台你需要有针对性的调用策略,而必须保证他们看起来差不多。
更加操蛋的是,你可能需要关注很多技术细节,比如PC机器用的是dxtc、大部分android机器用的是etc1、而ios用的是pvrtc、xbox one用的是bc6、metal gpu family 2用的是astc。这些贴图压缩格式各不相同、却各有优劣、在不同的场合有不同的优势也有不同的弱点。比如pvrtc在低频图像上可能会有一些斑点、etc1没有alpha通道需要用一些额外的手段进行模拟。
这些技术细节却决定了你画面的成败。可能你读了一篇很棒的西瓜论文,发现了一个碉堡了的新算法,然后开始要在你的引擎上大展拳脚,结果放到目标设备上却发现效率奇低。
在最新的军备竞赛中,unity和unreal4都在图形引擎架构上花了很大力气,比如用了诸如glslopt、hlslang之类的中间shader编译器来保证跨平台的shader正确性,把编译器这个程序员三大浪漫之一引入到了复杂的游戏引擎开发里面,瞬间提高了游戏引擎开发的难度和逼格。
最后图形引擎现在还面对对gpu驱动撒手不管的操作系统,最新一批API,DX12、Metal、Vulkan都采用了薄驱动,即“老子不管你们怎么用gpu了,引擎自己管吧”。
这样相当于把图形绘制的状态切换、资源管理、数据更新、命令调度全部抛给了游戏引擎自己做。这样可以大大提高拥有优秀架构设计的引擎效率,却也大大提高了引擎的设计难度。
五、功夫在诗外
游戏引擎更多的需要项目的洗礼和验证,多一个项目采用可以踩更多的坑,让架构更加成熟和稳定。但游戏无法像网站一样持续的推出、热更新、选择性更新,一挂即挂,所以游戏公司需要开发一款引擎,其难度更可怕的在于,你需要用游戏产品,作为引擎的炮灰,去历练出一个优秀的引擎架构和tool chain。
所以别问太多为什么国内的游戏山寨居多啊,也别问太多为什么国内没有像样的引擎。
其实,引擎、游戏、效果,都是用钱堆出来的。前面的是炮灰,是试验品,不过很多公司不懂,很多管理者不明白,当然也烧不起这个钱。有时候一个游戏失败了,一家公司就倒了,一个有希望的团队就散了,一个有志气的人就磨灭了。
国外环境宽松,机会也多,生活简单,上世纪有很多炮灰,也磨练出了一堆伟大的引擎架构师,他们艰难的存活下来了,把这些经验变成引擎设计的智慧,重新运用到了新的引擎上,升华,变成更厉害的游戏引擎。这个过程其实很艰辛,很痛苦,很难,这个过程倒了无数个tim sweeny和john carmack,大家只是看到了成功的那两个而已。
国内有时候也会有成功的游戏,但积累的意识太少,持续发展的想法很难被支持,和环境有密切关系。当然,更重要的是,游戏引擎开发真的太难、太难、太难、了。
————————————————————————————————————
嗷,写着写着就有点偏了。还想展开更多,先算了,有疑问评论区提出,我再展开。最后给自己反补一个,我相信开发操作系统会比游戏引擎更加复杂很困难,不过这鸟事儿有多少it企业会正儿八经的做呢?
————————————————————————————————————
关于匿名用户的评论,很多细节我不想反驳,其中一点,我非常非常不认同,
大学里实习过的学生都会用石英和磁铁加个喇叭组装出一台收音机来,这些学生如果因此觉得自己是收音机的发明者而希望得到他人认可就成刻舟求剑了。同样,unreal4都开源了,照着临摹下还要自我陶醉的话和刻舟求剑有何区别?
Unreal4开源了,就可以临摹?你就认为设计引擎真的就是把这些东西打开临摹一下算了?嗯,或许很多人都在这么做、可能你做过的项目也是这么干滴,但可以很负责任的告诉你
老子不是。
我认为Unreal在某些架构(只是某些)上的设计,有很大的局限性,它的业务框架,和即将到来的新时代,有巨大鸿沟,恰恰就是国内引擎赶超的一个非常好的时机。
我不敢夸下海口说一定可以做得完全比Unreal4好还是要超英赶美怎样的,但至少,我在做这样的努力,而且我也很有信心,我写了差不多二十年的程序,从业差不多十年,自己对自己认知非常充分,这是一个机遇,我们可以把引擎真正做好。
如果你的对手已经把事情都做好了,然后你因此躺着,就觉得没事情可以做了,觉得不需要做什么事情了,那就是废物,赶紧走开吧,你和传统行业的废物没什么区别,别说自己是做技术的,别说自己是做互联网的。
我从最早开始接触这个行业的那天起,就一直在内心保持一个信念,怎样做到最顶尖,即使有人在上面了,还是需要想怎样爬上去,怎样爬过去。Unreal也没有停止更新,Unity还在不断升级,何况还有n多Inhouse的引擎,其实performance比这两个玩意儿牛逼多了,都在不断前进,你这么轻易就说没东西可以玩儿了?
游戏行业真正的技术竞赛才刚刚开始,Runtime只是一部分,还有更大的一部分是Tool Chain。因为现在最重要的是Content Creation,即我还没展开的引擎工具制作部分,直接影响着整个游戏开发的预算和投放时间。考虑以前开发游戏,需要一年到三年,如果你可以改进生产力,把整个流程缩短到半年到一年,那么你的竞争力就会大大提高,你的产品可以更快的进行迭代改进,策划的想法可以得到释放、在早期的时候花更少的时间和钱就做出prototype验证。
最后反驳一下,用一个大新闻里面的一句策划的采访来印证技术问题,你可真够弱爆了的。第一、技术人员根本不需要策划的言论支持自己的技术观点,他们根本不懂技术、一知半解,我基本在技术问题上忽略他们,只需要告诉他们,你给老子等着,我帮你搞定就是了,所以在策划的角度看来,技术似乎很容易,实际上是因为你队友给力啊有木有!第二、一个专门针对市场的采访有什么技术含量?请问外交部发言人的问答可以表明国内高层的真正内心想法吗?
难道技术人员现在真的弱鸡成这个样子?像个老油条?一边喊着我真的什么都做不了啊,没什么价值啊,连挖掘一下的想法都没有啊,一边还用不懂技术人员的外交辞令来强化一下自己的心理压力。荒谬!
我现在每天都精力充沛,每天都觉得时间不够用,一打开代码,我每天都会感叹,这真是一个大有可为的世界啊!
————————————————————————————
忍不住又补充一点,现实生活中我就是个话唠。
我并不是一开始就做游戏的,我曾经跨界。
温赵轮提出的所谓程序员三大浪漫里面,我深度的践行过两个,十多年前,我完整的实现过了一个符合RenderMan Specification的光线跟踪渲染器,当然和现在 空明流转 做的牛逼光栅化渲染器有比较大的差距,毕竟其实鄙人战斗力还是有点渣的,而且当时还是大学,互联网也没这么发达。我的需求就是要一个可以和Pixar的RenderMan一战的电影级渲染器,并且跑的是Raytrace,并且可以速度超过MentalRay。嗯,作为一个大三学生,当时我的想法是足够可笑的。内行人会明白上面这些鬼东西是什么意思。
最后,我做出来了,一个兼容性可以直接跑MTOR(Maya to RenderMan)、非Global Illumination场景下比MentalRay快的这么一个渲染器
这个渲染器其中包含了大量各种不同的技术,包括,raytrace、光栅化、贴图采样的基本图形学技术,以及一大堆图形学的算法(基本上能说出来的都用到了),而且你需要比MetalRay快意味着你需要把所有的这些东西都要自己手写(那时候没那么多牛逼哄哄的开源库),而且要手写得比别人的快。于是我又做了两件事,一、把核心部分(包括raytrace和BSP traversal)用SSE指令集改写了一次;二、把Shader部分,彻底的做了一个Shading Language Compiler。
我有比较严重的完美主义情节,为了做好Shader语言编译器,我翻了一遍gcc,把可以做的编译优化都做了,比如Constant Folding、基于DU-Chain/UD-Chain的使用分析、Control-Flow分析、等等,甚至到最后我开始做SSA。
当时大概是2006年,我当时还是一只弱鸡。基本上这些东西,都有点难度吧,我不认为特别难,至少RenderMan Specification要跟着做完,也就是一些比较繁琐的事情。而最后我可以做到360 x 240的分辨率下,可以实时跑一次反射一次折射一次shadow的raytrace。这个东西当时几乎可以用在一部国产动画的渲染工作上。
后来我进入了游戏行业,然后我慢慢接触到了游戏引擎,然后我傻了眼。
在真正做游戏引擎之前,我自认为还是没见过什么特别难的东西,渲染器啊,其实也就那回事儿,大学作业可能还简单点,要写一个RI Spec的、带RSL的、高速的渲染器,那就是再复杂一点点。当然,我自己有点自大,其他人要做这个,可能会痛苦死(主要是烦)。编译器啊,也还是那么一个鸟样啊,当然也是烦啊。不过这些东西,都是有算法可以套的,有非常严谨的做法和规矩的,业务也很单一。就像渲染器,99%的hotspot可能就在一个函数里面,这真的就没什么可做了的,你就死扣这个函数得了。(然而,迪士尼做了Hyperion,在有Pixar RenderMan的情况下。所以为什么我说Unreal并非不能超越)
在看完了游戏引擎的真正全貌之后,我的感受是,这是什么鬼东西,一大堆我不知道我不认识的技术?大而全,而且每个部分都要求“实时”。疯了啊,渲染想快,改SSE啊,改多线程啊,出了新算法马上adapt过来啊,业务很单一很简单啊,就是计算啊。编译器也是啊,我可以做中间结构啊
顺着定义回溯使用啊,用各种分析工具进行用量检测啊,DAG分析啊,做各种辅助结构啊。但游戏引擎业务纷繁复杂,最后我发现自己曾经在做渲染器和编译器里面用到的大部分技术,都需要Re-apply到引擎里面,而且要求更高,因为实时。
一个大学生,从不懂RenderMan,到设计一个兼容的渲染器(RenderMan不开源),到为了他的RSL要设计相关的编译器,到最后设计出一个并行的SSE加速Shader虚拟机执行Shading、超越MR渲染速度,花了大概两三年的业余时间。
然而在上面的水平基础上,要懂得设计引擎、重新设计整个游戏引擎的业务框架、并且提出可以与世界现代引擎架构相提并论的架构设计,我花了十年的时间,全职,而且几乎每天自觉回家加班到凌晨。
要么我真的老了,没以前聪明了,脑袋退化了,要么,游戏引擎这真是个可怕的玩意儿。
达内程序员培训「中国高端IT培训」,15年7万名企就业通道,40万学员实力见证!达内19大课程体系:Java/Web/H5/安卓/iOS/测试/C++/ARM/Linux/PHP/UI设计/会计/营销/..
不知道,不是有引擎吗?
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或

我要回帖

更多关于 国内程序员排名 的文章

 

随机推荐