游戏开发秋招回顾和反思(给明年秋招的同学)
秋招Timeline
25届秋招从7月末开始投递,面试集中在8月,9月基本已经在hr面和等offer阶段,泡池子可能会很久泡到10月底
截止今天,拿意向书的有腾讯天美、米哈游,还在泡池子的有字节,转正挂的有雷火(没消息应该是挂了)。
准备过程
2022.09-2023.03
这一段时间主要在上课、给导师做横向(和游戏毫无关联的前端项目)、科研。研究方向是图形学-物理模拟,这段时间,经常看知乎大佬的科研产出,各种炫酷吊炸天的demo,在Disney、Pixel、WetaFx里的特效应用,也想认真搞科研,说不定未来能去国外读博。但是无奈基础太烂,所以这个阶段基本是补基础-焦虑痛苦的过程。先后大概看了这些课程/书籍:games101(渲染入门)、games102(实时渲染)、games103(物理模拟入门)、games104(游戏引擎)、LearnOpengl、RayTracing in One Weekend、连续介质力学的网课(川大)、RobertBridson 《Fluid Simulation for computer graphics》、蒋尘凡夫siggraph course《mpm tutorial》、taichi图形公开课(刘天天)、games201(胡渊明)。也看/做了些项目:参考了Fluid-Engine-dev写了个小的流体解算器、写了个mpm解算器、玩了一下Houdini的脚本/插件/渲染(连连看)、学了一下稀疏空间数据结构(OpenVDB、SPGrid包括他们的论文)、渲染方面写了个简单的软光栅、简单的path tracing、opengl写的一些实时阴影算法。
然后就是跟导师确定要做mpm,看相关的论文,主要以蒋尘凡夫实验室的为主,用的也是他们组的框架,在这一段过程中,深入的学习了一下这个框架,里面的各种无锁多线程染色方法、模版元技巧、各种设计模式、几何算法都写的引人入胜。
也是在这个过程中,发现自己的数理基础很薄弱,没有认真系统学过数值计算、物理方面的计算力学,也没有特别的高性能计算的功底(SIMD、Cuda),我的能力对于搞图形模拟的科研来说显得捉襟见肘,也大概了解了一下行情,做图形科研如果没有若干篇siggraph和博士学位的话是很难进入工业界的,于是开始转型去实习。
2023.04-2023.05
学/复习了这些内容:C++面向对象基础(侯捷)、实际项目中的C++技巧与设计模式(b站小彭)、图形八股、简单学了一点Unity和C#参与了一个unity横向(至今基本不会)、编译连接原理(程序员的自我修养那本书)、复习408(操作系统、网络、组成原理、数据结构)、随缘略微刷题
2023.06-2023.08
实习:去了家医疗行业的小公司、做虚拟手术的物理引擎,老板人很好,交大毕业40多岁,每天亲力亲为推公式写代码、还给我们讲论文。实习中做了一点几何剖分方面的工作,看论文复现为主,但是最后出于性能、稳定性方面的原因,没能搞出来集成进系统有点愧对老板。值得吐槽的是,传统行业C++版本很落后,用的还是98,多线程用的pthread。
2023.09-2024.04
实习:腾讯-ieg-游戏前沿技术,做美术工具,c++ sdk、DCC和引擎插件(maya/motionbuilder/3dsMax/unreal)。做的工作有点偏动画TA,mentor是育碧出身的TA、leader是nvidia、autodesk出身的引擎程序,半年时间除了些许杂活,做了两项很有意思的工作,一个是pose space deformation,另一个是伪物理的动态骨骼(类似于kawaii physics和magica cloth,但是做在maya端)。这个过程,还是比较符合我的理想中的工作内容的,一些线性代数(各种坐标空间转换、各种形式的线性方程组的最优解法)、一些调研(看一些GDC上的内容、一些paper)。Leader、mentor人都很好,中途被分了个活,我觉得对自己提升不大,主动找leader让换个活,他很爽快的同意了并且让我积极的去做一些预研的工作。最后离职的时候还是很不舍,但还是想去项目组体验一下真实的游戏开发流程。
2024.05-2024.06
为了完成毕业要求,在家赶论文,赶在6月投了篇工作。这一过程,主要在写modern c++和houdini插件。然后也带着看了些八股,拿了网易雷火项目组的暑期实习offer
2024.06-2024.09
实习:网易雷火在研unreal项目。做了1个月编辑器工具,2个月gameplay和ui,了解了一下游戏项目组真正的运作过程,日常996写单子。项目组有很多知乎上活跃的大佬,跟他们学习了很多。这三个月还是比较辛苦的,每天9点半到11点随机回家,跟对象打会儿游戏,然后准备秋招。这一阶段因为在做realtime的gameplay,所以更多的是在学引擎源码,包括动画系统(动画蓝图的执行过程、自定义节点)、引擎数据结构(无锁队列、FTaskGraph)、物理系统(chaos)。在雷火的共享文档中也学习了不少内容,包括ue的gc、反射、合批、性能优化技巧(只看过没实操过)。
在 8月份,开始秋招面试,基本是约会议室面试,每次面完都要赶回来跟策划、ux同学沟通业务,赶单子进度。
面试总结
因为我没有投很多家,面试也比较少,可能存在一些以偏概全的主观论断。
大部分面试都是以聊项目、聊实习、聊论文为主,穿插简单八股和算法题/数学题/智力题。当然也有些面试会着重考察计算机基本功,给的题比较公式化,猜测面试官会开个文档,从c++、数据结构、操作系统、组成原理、编译原理、渲染、几何、动画、引擎一条一条的问过去然后记录。还有些面试会着重考察c++和数据结构基本功,会让我完整的实现一个功能完善的数据结构,自己给出测试用例并自检,然后还会提出新的功能要求。
经验教训
- 算法科研不死磕,如果自己不是这块料,立刻换方向all in工程
- 要有突出的“点”来吸引面试官。如果一个项目/实习/论文能和面试官聊15分钟以上,并且被他不断追问的情况下也能侃侃而谈,那基本稳了。这个“点”,对于游戏开发而言,要么是对引擎某一个子模块/子领域深入调研、断点调试;要么是实践中的对性能优化了百分之多少;要么是搭建了一个很成熟完善的战斗系统之类,并证明他的可拓展性。当然其他的还有很多,只要有大量调研、技术深度、自己的思考......
- 基础要扎实(八股)、代码水平(多写、多用高级技巧和设计模式、多参考开源项目重构自己的项目)
- 暑期实习要优先选未来想去的城市/工作/岗位,这样秋招时就多一个转正的选择。如果确定要转正了,要向leader要核心的活,否则答辩会被argue
- 时间线规划:现在秋招越开越早,提前批一般7月就开了,所以最好4-6月暑期实习,总结整理实习内容之后参加秋招。
- 刷题不重要,题刷的多不如业务匹配度高,他想要你的话不会给很难的题,hot100 is all your need。(我到秋招结束只刷了30道题,友塔给了一道hard,明摆着不想要我,我直接说不会,其他公司的每一题都A了)