1.前言
本篇总结主要记录和描述我如何从AI方向切换到游戏引擎/图形方向,以及学习过程和面试过程中的经验。
首先声明(叠甲),总结中的内容不涉及任何一家公司的具体面试内容以及流程安排,只记录个人学习过程和面试经验,以及个人对游戏引擎/图形方向的看法。本人在25届暑期实习中收到两家offer,秋招中共收到六家offer/谈薪,以下经验可能对你求职有一定参考价值。
开始之前首先感谢以下牛客前辈的面经和总结:@IceBear白熊 @KujouAika
2.背景
本科双非电子信息嵌入式方向,硕士某末流211计算机专硕AI方向。研一暑假小论文投递出去后开始准备就业工作,正式开始学图形学的时间点大概是23年10月。本人之前参加过一些竞赛,C++和Python还算熟悉,同时在Acwing和Leetcode上有一些刷题经验,因此重点主要放在图形学的学习上。
-
为什么我选择CG方向作为就业选择?而不是后端或算法?
因为CG好玩!后端学了一点感觉没意思,算法虽然有篇A会,但考虑到论文方向冷门且本人BG毫无优势遂放弃
3.学习路线
-
2023年 10月-12月 :
- 主要学习 LearningOpenGL, Games101 202 104
- 部分其它参考:catlikecoding, GPU Gems, filament....
-
2023年 12月-2024年 3月 :
- 实现自己的渲染器: 编辑器+ECS + Forward/Deferred + 所有常见效果 + ...
-
2024年 3月-5月 :
- 一边面试一边复习,没有学新东西
-
2024年 5月-9月 :
- 往渲染引擎中添加Vulkan支持
以上是学习过程中的大概情况,还有一些资料比较琐碎就不列出了,当学习过程中遇到问题,大部分也能在google中检索到。
3.1 路线总结
选择的项目内容都是自己实现的,但是猜测同岗的选手大部分可能都是类似的项目,虽说不同人的侧重点和实现有所不同,但是换位成面试官难免感觉有点审美疲劳,如果项目能聚焦在一个比较小的方向上/或者具有一定实用性绝对是一个加分项!
3.2 暑期实习投递情况总结
3月开始投递,共投递约19家,其中发笔试的一共8家,约面6家,选择面试的3家,走完流程给offer的两家。 由于没有实习经历且是半路转图形的,游戏公司几乎全军覆没,所幸得了德子的收留,不然就只能去鹅的客户端了
3.3 秋招投递情况总结
8月开始投递,共投递53家(约一半为C++软开岗位),其中发笔试的一共16家(全是图形/游戏岗的笔试,C++软开岗一个笔试都没发,由此可见C++软开选手的秋招难度)
流程情况 | 公司(岗位) |
笔试挂 | 西山居(引擎),雷火(引擎) |
一面挂 | 哔哩哔哩(引擎),网易互娱(引擎) |
二面挂 | 联影医疗(图形图像),IEG游戏发行(游戏客户端) |
三面挂 | IEG魔方(引擎),Funplus(引擎) |
流程走完并谈薪 | 摩尔线程(图形),不鸣科技(引擎),英雄游戏(引擎),叠纸(引擎),字节(游戏客户端),德子(转正/引擎) |
秋招刚开始时特别是八月和九月真的不是很顺利,一来是项目很久没更新了,自己不是很熟练,二来是八股也忘得差不多了,导致面试过程中有些问题自己都忘记了。
转折点是九月的Funplus二面,这场面试结束后感觉状态回暖,这之后所有的流程全部顺利走完,和所有的面试官基本都聊得很好(自认为)
秋招结束之后我回顾了一下,相比暑期我有什么明显的进步吗?
答:其实是没有的,简历唯一多的只是一份实习经历而已(再次向德子表示感谢),但是秋招过程中明显感觉自己的心态和面试技巧都得到了提升,体现在面试中就是交流更加顺畅,自然
因此,实习经历是秋招中非常重要的加分项,如果没有实习的话,我大概率是找不到工作的
4.一些经验
有关图形学的学习,不能通过面经直接获得,但是面经可以作为一个目录参考。
关于这部分的内容,大体上可参考zhihu这位佬的文章【游戏开发面经汇总】- 图形学基础篇 以及白熊佬的这篇面经零基础非科班校招图形/引擎/游戏面经长文分享
下面是一些我自己补充的内容,可以看看自己是否了解该内容:
- 除PCF,PCSS外还知道哪些阴影算法?
- 了解超分算法吗?FSR2.0了解吗?
- 体积光除了用光线步进做,还有哪些方法?
- Forward+了解吗?
- 移动端渲染管线了解吗?和PC端有什么区别?
- GI算法了解哪些?分别介绍一下?
- IBL实现的具体细节?中间做了哪些假设?
- CSM实现的具体细节?有没有遇到抖动问题?怎么解决的?
- F0和F90分别是什么?F0和F90的物理意义是什么?
- BRDF具体介绍一下?有哪些常见的BRDF?
- HDR解决了什么问题?有哪些常见的HDR格式?
- Tone Mapping具体介绍一下?有哪些常见的Tone Mapping算法?
- 几种测试的顺序以及冲突的解决方法?
- 不同平台的shader怎么处理?
- Vulkan的同步机制了解吗?
- Vulkan中的Fence、Semaphore,Barrier有什么区别?
- 如果出现卡点,怎么排查?
- 如果让你设计光源剔除方案,你会怎么做?
- UE的RDG了解吗?
- C++反射你是怎么做的?
5. 补充资料以及优秀项目分享
- 浅墨老师的github(没啥好说的,RIP):https://github.com/QianMo/Game-Programmer-Study-Notes
- Lumos跨平台游戏引擎(1.3k star,代码量相对于许多重型项目还是小很多的,值得学习):https://github.com/jmorton06/Lumos
- 另一个较出名的GL教程,可和LearningOpenGL互为补充:https://ogldev.org/index.html
- Vulkan Examples(可配合vulkan tutorial食用):https://github.com/SaschaWillems/Vulkan
- Shader教程(可参考一下常见图形学算法的实现) :https://lettier.github.io/3d-game-shaders-for-beginners
- 一些不错的技术博客:
- 可看一些talk,了解一些前沿技术
6. 总结
这不是一个游戏引擎/图形方向劝进或劝退的文章,只是记录一下自己的秋招经历,以及一些自己觉得有用的资料。
如果就是想学游戏引擎/图形方向,那么上述经验可能对你有点帮助。但是引擎不是只有渲染,还有诸如物理、动画等等的小方向。总之记住多动手,多实践。如果有问题也欢迎评论,私信,看到的话我会尽力回答。
免责声明:由于市场行情和不同公司HC变动,不保证按照上述流程一定能找到工作,仅供参考。
最后,如果看到这里,那么不管你是什么方向的,被小猫指到的人通通拿到满意的offer,顺利上岸!
全部评论
(11) 回帖