前言想清楚自己想做游戏,还必须想清楚自己具体去做哪个岗位,并且调研清楚各个岗位的具体要求。游戏行业的几个岗之间可迁移性并不非常高,做客户端的,做引擎内容生产的,做渲染的,做服务端的,做工具和做TA的,学的技术差异较大;从结果来看,这篇文章中的学习路径是有偏差的,仅仅做一个春招实习的总结;所有这些求职没有冲破一面的,因此能提供的题也很有限2022年1月到2022年9月我陆续参加了好多种类千差万别的笔面,最大的问题就是一会投图形一会投客户端一会投引擎,因此23年起我想清楚自己的方向,打算做渲染,并且学了小半年,从23年3月开始投递简历,准备冲23暑期实习;我决定这样准备的起因是22年8月看到了21年秋招的两篇网易互娱图形工程师入职面经,我发现图形岗的知识和我目前已经学的东西较为重合,我对图形学知识比较感兴趣,而且图形岗不需要刷C++算法题。21秋招网易互娱图形工程师20秋招网易互娱图形工程师当然事后证明,这个规划是非常糟糕的。原因如下:图形岗是一个需求较少且非常具体的岗位,各个厂对于引擎、客户端、图形几个区块的划分是不同的,很多厂并不会要不会引擎只做渲染的人过分看中个例,而忽视了对全行业的普遍调研。各个厂分别在做什么、用什么,各个岗在不同的厂之间的共性和个性是什么,这些我完全说不上来,就盲目地开始学了照这两篇面经学,有一个比较大的问题:对引擎 毫无认知,而 C++ 也不过硬,且完全押宝网易互娱一家(结果互娱今年根本没招),那么等于是把自己和引擎岗和C++客户端岗这两个游戏工业程序口较大的机会全丢了,以UE来说,其实在UE中已经不很需要自己编写shader了,因此仅仅抱着openGL学着色器编程实在是一个脱离现实的事情,换句话说几乎没有厂商需要一个只会写shader的程序员。22年9月时我会什么22年初学了一段时间DX12,搞来了经典的D3D12红龙书,但是代码深介绍短,最后弃了,因此后来在面试的时候这部分=022年5月-6月在研究Unity,重点搞了一段时间Unity动画,但是只是做了一个前进跑步跳跃的人物动作的demo,不足以写上简历,也没找到很好的进一步钻研的方向22年8月-9月听说骨骼动画很重要,总是在面经里面看到IK解算算法什么的,又学了两个多月3dsMax动画,并且做了3dsMax的一个导入导出,能导给自己games101的作业项目,最后能在unity,3ds和自己的项目之间三段互传22年8月-9月与此同时还写完了Games101的作业,中途有很多自己的想法,也尝试性做了一些拓展,比如从3dsMax输出的obj文件里面读取模型load到我的101作业场景里(吐槽一下:现在回顾,感觉101的作业其实做的也不是特别合适,因为101的作业系统是一个虚拟机下的C++软渲框架,好处是避免了配环境,坏处是助教自己写的关键逻辑一大堆,经常在这堆原创代码里翻来翻去找关键逻辑最后晕眩,与其这样还不如直接去配个openGL环境,openGL项目是GPU运行的,当初的小奶牛项目在CPU上已经开始卡了;使用openGL还可以加深学生对于渲染管线的理解)23年3月时我又会了什么22年9月-22年12月 因为学校的事情很忙,分身乏术,但是也是此时接触了一些openGL,感觉可以学但没怎么学,但还是把101的作业整理了一下,做了一个自己的C++软渲染光栅器程序22年9月-22年12月 同时我意识到了求职功夫在平时,三个月间坚持刷掉了一遍代码随想录,同时9月里的腾讯面试让我意识到自己的问题,我的C++根本就是0分水平,所以开始认真看C++ Primer,到22年底我看了除去16章以后的所有内容,整理出了自己的C++面经本子学完了learn openGL, 一直学到pbr;因此会写shader,知道图形渲染管线的过程,但依然说不上熟悉和精通。learnopenGL是一个很好的资料,远胜于红龙书对DX的介绍,虽然红龙书在深度上略胜一筹,但是初学难度太大,并不适合仅仅学习了图形学基础知识的选手作为第一款图形API入门。用了一款图形Debug软件RenderDoc,是一个很了不起的生产力工具,对于渲染管线进一步加深了理解正好是chatgpt热潮,这是一个更了不起的生产力工具, 最关键的倒不是能帮我在游戏开发上做什么,关键在于他能帮我查文献 + 秒面经,很多时候刷到一个没见过的面经,只要问chatgpt非常有帮助因为学完了learn openGL,我得到了一个勉强能写进简历的图形项目:一个实现了PCSS、环境贴图和PBR等效果的简单场景,这个项目看着比较唬人,实际上根据我的时间管理软件,一直到不含IBL的PBR学完,我大约在openGL上花了不到100个小时,其实如果拿出点强度来,这些工作是可以在三周时间内高强度工作做完的,而我花了三个月……我开始高度关注自己时间管理软件上的统计结果,工作日的平均专注时间来到了六个多小时,我逐渐感觉到高强度的实干让我心里的焦虑有所缓解,尽管面对面试还是很紧张,但是我心里有种开始做实事的踏实感。我的情况一年多的游戏开发自学之路,走过了漫长的学习,经历了很多折磨。我是一个研究生专业不太好的跨专业自学者,211本+普985硕,本以为硕士身份在求职者的海洋中位列前茅,谁知道实际上今年的行情,清北亦有不少折戟沉沙,更不要说我了。我22年下半年其实学的不太好,而且有用的都没学。当时在导师厂里打工,做的是传统web项目,厂里有点怪,需求一天一个样,前期做了两三个月APP突然就转头让做小程序,想要东西的时候急匆匆催着要,但是常常你上去跟进的时候对面又嫌烦。最后12月的时候因为宿舍问题我就离开公司居家办公了,结果一从公司离开对接的人直接开始不理我了,最终整个项目不了了之,开发了一套微信小程序项目就此流产,我为此浪费了将近四个月的时间。这让我23年3月陷入了血崩:我一面要准备暑期实习、一面要搞毕业课题,一面还要上课,本来也是水课,可以混一混交齐作业就过的,但是不同往年,今年学校突然让我们所有人必须去学校线下上课,课多老师事儿还多,这样一来我的压力一下子顶上来了。一边三线程,早上上课晚上参加笔面夜里补每周汇报,这就是我的暑期实习求职实况。2023年春天,无论是打开b站还是招聘群,到处都弥漫着一种焦虑而绝望的气息。一些视频和文章说23年是最坏就业年,大学毕业应届生来到10M,而且疫情宅家延后就业的往届生也会加入招聘大潮。另一方面,牛客热搜《笑话》这样说:暑期实习是个笑话,研究生工作是个笑话,读研是个笑话,我是个笑话,也有看到同方向oc的同学,但是更多的是被挂,挂笔试挂一面甚至挂简历的同学,大家在各个招聘信息团体里传播着这种绝望。我倾向于认为今年确实是寒气确实波及到游戏行业了,我的几个证据如下:网易互娱今年没声音,实习春招都没有网易雷火先是没给回复,一个月后改投了客户端,笔试也非常难;官网hc个位数腾讯招聘群里top2大哥数量非常多;其他公司但凡有群的,打开就能闻见味听见声,定睛一看字里行间写满了我是fw腾讯笔试后,在各个其他群里看到有很多人A3 A4,而我只A2;剑心、雷火、吉比特甚至都挂了笔试听闻各家在近两三年开展的元宇宙项目纷纷在解散,一些强力的选手从一线退下来回到游戏工业长衫脱无可脱,一线进不去,二线不对口,三线四线不招实习(盛趣和畅游本都计划要投,但是都是要Unity客户端,一不会Unity而不会客户端,寄)总体参加这几家一线厂的实习,给我的感觉是对实习生的要求不像往年对实习生的要求了,腾讯看到一篇面经,ACM牌佬四面oc,四轮面试加起来问了快100个问题,让我觉得大受震撼一种流行的说法,疫情三年对于游戏行业反而是红利,23年是游戏行业红利褪去的一年,叠加版号危机大背景,纵使今年开始发了,资本市场对于游戏工业普遍是不看好的,从而游戏厂商更倾向于维护现有项目而不敢新开项目,只有头部厂商有资格上新腾讯IEG - 图形渲染研究型实习生背景背景:22年7月,此时学了两个多月杂学,没有系统看C++;看了一些图形学网课,但是很多细节没有深入去想,比如shadowmap的过程,我在101网课里跟着刷妙啊,觉得自己会了,但是因为没有上手实践,面试官问到如何用深度纹理与实际shading point形成映射我就答不出了一面内容经典八股C++和C#的区别?C#没有指针,如何管理内存?讲讲看List容器和Vector容器的差别?new 的用法,一个new的对象内存如果不回收会怎样?智能指针了解如何?public,private,protected各自的权限范围,有没有例外(友元)map的底层?红黑树?虚函数、虚表?32位浮点数的结构?struct 和 class的区别?用过哪些设计模式?图形学有无实时渲染项目经历Unity Shader里面顶点着色器和像素着色器的输入输出分别是?像素着色器的输出除了颜色还有什么?z值的作用?shadowmap的过程?如何用UV计算光源出发形成的深度对应哪个实际点?结果与反思学的太差了,基本属于是没有参加选拔的资格,项目是现凑的,简历是吹牛的,面试是爆炸的但是勇敢地去参加面试确实让我学到了很多东西,我抓紧机会问技术面老师我的问题在哪,我后面应该怎么调整,她建议我把一些基础搞搞清楚,然后做一些实时渲染项目完美世界 - 游戏引擎研发工程师实习背景投的所有公司里完美是回复最快的,3.10写了申请,发过去半个小时就发来了笔试邀请,当天就考我选的这个方向看起来是引擎向,但是我做了一下笔试认为和我想做的方向是比较接近的,并没有问引擎架构、unity/ue使用这些知识,当中60%都是图形学和渲染知识,剩下30%是和图形编程密切相关的C++基础,并没有铺天盖地乱问八股,我认为试卷考察的知识点和我所学的非常匹配,因此重燃了一段时间的自信笔试内容笔试内容只能凭回忆说一下了,题型是选择题+问答题,重点聊一下问答题把,六道题60分简述两个容器的原理和易错点,比较简单malloc和new的区别这题答得也不太好,其实是八股老熟人了布林冯模型原理根据摄像机信息手写view矩阵这个我真不该错的,我记不得旋转矩阵的结论了,实际编程都是直接用lookat,当时手推没推出来,按理说真的,但凡云过一两节games101的也不至于写不出来,但是我后来学了其他的这些基础真的没怎么看根据model矩阵推算平移旋转和缩放后来回忆的时候感觉这题怪怪的,是不是我读题出了问题,我不太理解从model当中分离出这仨有什么意义,但是也不能否认,平移旋转和缩放矩阵在数型上肯定是有特征的,他问了十有八九就是能分开的忘了考完试第一反应是不错,终于有一张试卷和自己知识比较匹配了,之前面了一些岗都是没搞清楚游戏岗位的侧重点,重点问系统原理和C++;但是总体上答得还是不太行,两道大题明确没写出来,其他题也有一些细节没说好,就,这个试卷真的很简单,如果这些东西都答不好真就有点说不过去了,比较自责一面内容笔试完了感觉还行,我等,等到第三周感觉自己已经寄了,结果3/30接到北京电话(求职季真的不敢不接电话),果然是完美,你还记得我啊完美,约了第二天一面一面非常短:说说你软光栅项目的过程,能不能通过移植shader改效果(我说我两个shader都是C++编码成一个函数实现的,没有实现shaderprogram的那种过程)你写了IBL,讲讲你IBL的输入是什么IBL的光照输入是怎样的镜面反射部分又是怎么算的你写了shadowmap,说说原理onepass的结果怎么和twopass对应的在shadowmap实现期间,比如背面剔除,openGL使用了哪些gl状态?(这个我直接被问懵,平时一般openGL程序里的状态配置都是抄过来就完事儿了,具体几个状态我真的记不得了)继续追问alphatest等几个过程中的gl状态(答不出来)什么是延时渲染?到这里面试大概也就问了四五个问题,这个时候如果是腾讯的一面还没开始问项目呢,结果面试官这个时候来了这样一段对话:面试官:行,我知道了,你做过UE吗我:UE自己玩过,说不上会用,Unity接触更多一点面试官,哦,我们这主要是做一些UE源码的更改工作啊我:啊,这,面试官:行吧,我了解完了,那你回去等HR通知吧回来以后我对这番对话反反复复地揣摩,老师到底是什么意思?他是说我的技术栈和岗位不匹配,HR会发感谢信的,还是说虽然你技术栈不行,但是我看你还行,你等HR通知你二面或者HR面吧百思不得其解,其实完美这个岗位的招聘要求是没有写引擎经历需求的,只是说了工作内容是搞引擎,这也正是我所看中的,所以才来投递,因为引擎学起来又多又杂,跟着网课看内容太长且缺乏动手反馈,自己琢磨又难以形成体系知识,我更希望能让图形学知识和写过shader的经历发挥作用。结果与反思4.10 通知没有过一面完美全程的流程并不慢,HR老师比较尽责,回答了很多问题,我也很满意其在流程上和笔试命题上的安排;但是完美的技术面也是给我造成最大心理阴影的。我在等一面结果期间看到了问的很简单的完美客户端oc帖子,也碰到了oc腾讯引擎岗的同学,这些分享让我看到了希望的曙光,我觉得自己学的东西也很多,也许找到暑期实习是有指望的。然而最后还是通知我一面挂了,我心有不甘,请HR帮我联系一下面试官,给我一些问题和建议,面试官的回复是:“距离能实现渲染全过程有一定差距”。这个回复再一次对我造成了巨大的打击。我觉得如果是“缺乏UE实践经历”,我或许还能比较坦然地接受,并且在接下来五个月努力学习UE来弥补自身差距,而这里认为我不能实践渲染全过程,是让我很失望的一个评价。也许是面试官问我软渲器项目时,我没听懂他的问题,他问能不能通过修改着色器代码改变显示效果,我说我的软渲器里着色器是C++语言的函数,并不是编译shader。软渲器经历的时间也有点久了,并没有展示出其亮点,甚至没能成功把话题引导到渲染管线上。腾讯IEG - 游戏引擎开发方向/客户端开发实习生背景不知道为什么鹅收到申请之后立马给我回了个综合素质测评的链接,我做了一下,大多数都是职场价值选择,逻辑思辨和智力题,做的头晕,据说是随便写,不太考察得分(可能主要用于为海投增加一些成本)3/10投简历,之后到3/21收到电话面试通知,约了3/24电话面这里电话面碰到一个状况,我投的是游戏引擎开发方向实习生,发来的面试邀请是客户端开发实习生,我碰到这个情况是很紧张的,立刻想起了许多剧本(看的面经多了,哭惨的确实很多),害怕遭遇kpi面,一直很紧张我并不是第一次参加腾讯的面试,22年暑假的时候有一个腾讯研究性实习生的面试,我当时答得简直是烂穿了全程拷打,但是我也因此能稍微知道腾讯会问一些什么,一般会用多一轮面试来考察一些基础,把C++,数据结构这方面的经典bg考一考3/24参加了电话一面,感觉还是比较基础的,有一些问题没回答好;一面内容C++C++多态?virtual关键字?virtual的函数如何确定执行哪个版本?(这里我也说的不好,其实设计virtual这个关键字,父类的virtual函数是没有功能的)虚表是什么,什么功能(干,复盘时候发现全说反了,而且虚表里父类版本已经被覆盖掉了,我简直在说胡话,C++内存布局真的得好好补一补了)C++对象内存布局?堆和栈?虚表里存的是什么,存在哪里?(代码区这个概念说的不好)new的时候发生什么动态内存管理的手段说说allocator和vector如何管理动态内存allocator为什么比new/delete管理好(没答出来)讲讲智能指针的底层refcount为什么要放在动态内存里shared_ptr线程不安全问题,如何保证多个shared_ptr的读写安全除了mutex,还有更高效的方法吗(学的很差对不起对不起我真不知道有什么其他方法了大概提了一句读者写者算法)现场算法如何用两个栈实现一个队列(这个也挺简单的,但是我撕了快五分钟,有点紧张,唉)图形学软光栅项目的输入和输出是什么,过程(光栅生成讲的不好,从三角形怎么到片元这块讲的很烂)果然发现我光栅讲的不好,追问我从顶点的坐标怎么进一步插值给像素并决定画给哪个像素的从顶点到屏幕坐标的过程?法线矩阵?不透明和半透明物体的绘制?(既然你写了)IBL的输入?IBL的过程?环境贴图?为什么要把环境贴图mipmap?环境贴图的mipmap的每一级是怎么生成的总结:老师比较不满的主要是有几次我在用库和工具回避问题,比如view和projection是怎么算的我说glm::lookAt + glm::perspective、然后mipmap我说是openGL做好了的不用我们做,其实老师是想要考察原理而不想听我说这个,我完全可以说一下虽然可以调库但我可以说一下原理有几个问题有瑕疵,混叠其实没学到所以寄了,然后光栅化过程说的很烂,绕的面试官感觉有点丢失耐心笔试内容随后又接到腾讯的通知,让我去补一个笔试,我是初筛-行测-一面-笔试,腾讯的笔试题目很不错,见我在经验贴里订正的内容:github我的笔试订正这次笔试A2/5,加之后来回忆起来面试有几个问题也不好,感觉寄了一面和笔试后又陷入了等待,我隐约觉得自己要寄了,腾讯的面试回答答了几个缺陷,而且我在群里看到有人一面结束立刻接电话说接着二面,第二天又通知隔日三面,而我等了十来天还是没有后续的通知。挂的反思挂在一面/笔试之后,我反思了一下,自己项目最亮点的是用openGL实现了IBL,但是IBL的细节居然没讲清楚,只是抱着IBL specular项当中的cos-roughness预计算贴图大讲特讲,这非常糟糕。前面答的漂亮的C++面经,其实在项目经历面前没什么含金量,而我没答好IBL,这直接杀死了我的一面。加之我投腾讯投的有点迟,我参加笔试的时候一轮的oc都已经拿到一周了,总结为寄吉比特/雷霆游戏 - 游戏研发实习生背景3/7 投递,3/22回复说进了笔试,但是笔试时间另行通知;3/31通知4/2晚上笔试,不接受时间调整,至此过了快一个月了。笔试内容这里聊一下笔试内容,笔试做的我有点不开心,简单是确实简单,但是完全是计算机基础知识+智力题,做到选择题最后几题甚至开始甲乙丙是山东策划福建程序湖北测试的逻辑推理题,又花时间分又少;填空题后面也是巨长无比的代码,一段代码里面四五个函数,每个函数三四个参数,堆在一起看得人想吐,而且点名批评第五题程序阅读题,命题人似乎生怕不能在一道题里把C++的所有运算符全用上,各种下标符套函数套位运算,非常浪费时间,别跟我说这是阅读代码的能力,这很显然是一个没有实际意义的教学代码,我本科C语言期末考试老师出这种题也被大家骂惨了其实也不该抱怨,毕竟这个考试可能就想筛选计算机基础知识学得不错的本科生,但是题量又大、时间又短,20条选择6个程序阅读2个编程只给90分钟,这就非常难受了,心理上知道这个试卷很rz但是自己又做不了多好感觉吉比特的笔试和其他家确实有比较大的差异,不是说今年巨卷吗,不是海笔海筛吗,同为海笔,我宁愿是四道编码题A0条技不如人输给acm金牌哥啊。回想起来感觉自己还能做得更好,心态上怎样从来不会左右最终的结果,反思一下整个春招实习求职已经过半,还是没有一家比较有希望,不禁一阵凄凉雷火伏羲精英实习 - 游戏研发工程师(客户端引擎方向)背景3/13投递,今天4/11,还是没有回复,官网进度也是等待筛选结果;但是发现4月1号起雷火又更新了一些实习岗位,我又补充投了雷火的客户端岗。面到这个时候,手头的机会基本全都凋零了4/13 发邮件约了客户端的 4/22笔试4/22 笔试也不理想,当初为了逃避刷算法跑来学渲染,果然遭报应了笔试里面算亵渎给我整吐了,当初刷视频刷到过某老师讲算亵渎,刷到过戴佳伟对的对的对的不对不对不对,当一个梗开始攻击你,你会发现你只会玩梗春季实习求职心得在之前的半年里,除了学校毕业课题、实验室任务、开题等不得不花很长时间应对的挑战,我剩余的能够支配的约四个月时间全部用来学习了图形开发,用了将近100小时系统学习了Learn OpenGL这个专业性与学习难度都非常适合的教程,做了一些自己当时很满意的效果。虽然也在刷C++算法,但是现在大厂的原创题确实很难,还有很长的路要走总结几个心得:补充认知。游戏技术岗这块,我发现我自己是这样的, 群里很多人也是这样的:对各个厂各个岗位认知很少,看了几个面经就觉得只要学了xx就行,甚至有时候会看到一些懂哥的暴论:某某岗进去现学都行,啥都不用之类。点击就送的神话在2023年还是听听笑笑罢了。我没有思考过我进厂做什么,做这件事需要的核心技能是什么。推荐一个TA职业规划经验:技术美术职业概述及入坑指南Kerry佬。一句话:任何时候,如果你觉得自己这个岗位这个方向已经找不到东西学了,那么很可能你已经陷入了重大的错误中了。 我之前过于迷信互娱图形面经,觉得自己学完了openGL,又看了一批图形面经,和这个面经作者比相差无几,甚至他是秋招我是实习,那我已经无敌了。这种想法真的很搞笑。不要因补充认知感到担忧和焦虑。即便看三四个小时经验贴,搜一两天游戏入职员工的分享,也不要感觉焦虑。就像考研不调研就冲进去考一样,求职如果不能知晓学什么更重要,注定会浪费大量时间。补充认知 before 补充知识。如果真的会焦虑,也可以把资讯调研和技能学习穿插起来进行。反复锤炼自己的项目,千万不要有在项目中的细节没答出来。我的openGL确确实实是我自己手写的,但是其中一些openGL状态的配置是我抄书的,没有记住,完美面试中吃了大亏;IBL作为图形项目的最大亮点,在腾讯面试中却没有说清楚,这非常糟糕。谨防基础知识不扎实,对于渲染管线了解不全面。很巧的是完美和腾讯的面试官都问到了两个知识盲点:透明和半透物体的渲染/alpha-test; 还有延迟渲染。两个面试官,这两个问题都问了,我都没有回答好。这中间我有很大的责任:腾讯面试结束后我自我感觉良好,对于alpha-test和混叠没有答上来根本没有去订正补缺,而是忙着刷力扣准备算法笔试;同时由于只看openGL,openGL对于延迟渲染这个话题的介绍其实讲到了early-Z这个比较接近的topic,而延迟渲染确实没有系统介绍。openGL管线是属于前向渲染的。虽然我说几场面试都比较基础,不难,但是事实上如果有两三个关键问题没有答出来,这次面试是99%寄了——基础搞不懂是没有借口的。虚表内容说不清,透明物体渲染说不清,项目细节说不清,哪怕剩下来20个问题都答出来了,你告诉我面试官凭什么要你呢。心态非常重要。我在整个招聘的两个月期间,一会儿自信到飞起觉得自己稳了,一会儿一场面挂了心如死灰感觉学什么也没用了。这让我想起考研中我也是个心态非常浮动的选手,经常因为旁边人一句话心态爆炸。学任何东西都不是一天三天十天的事儿,连续干很长时间才能在这个领域从0到1实现突破。下面打算学什么最近认识到,游戏是一个对性能天然有着偏执追求的行业。我以前觉得C++面经都是真正的八股文,为了考人而考人,现在我觉得我当初大错特错了。C++面经,尤其是对于内存布局、stl库的底层的了解是非常重要的,如果不了解这些内容,对于系统的性能优化几乎是无从做起的。因此后面会进一步精进C++,《C++ Primer》之后打算学习《深度探索C++对象模型》打磨项目,目前最倾向的两个方向一是重构一下软渲器,自己实现一个延时渲染的、能够有效处理多光源复杂场景的实时渲染项目;二是做一个引擎内嵌,仿照上面TA经验贴中刷权重的工具广刷面经,多补基础,绝不再允许自己秋招时出现诸如延时渲染这种关键概念都不知道的情况《游戏引擎架构》是一本非常badass的书,颇有点一书讲完游戏引擎的意思,甚至还附带了包括C++ best practice、渲染引擎代码的知识,打算除了音频等专精章节全书通读一下
点赞 102
评论 27
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务