首页 > 网易互娱/完美/虎牙/bigo_图形渲染/引擎开发岗一二终面
头像
箕水胞
编辑于 2020-09-15 21:52
+ 关注

网易互娱/完美/虎牙/bigo_图形渲染/引擎开发岗一二终面

楼主是985专硕,研究方向是图形学-全局光照渲染,产出一篇ismar论文。

简单记录和分享一下校招经历,希望能对大家有帮助,也希望向大佬学习。
七月面的一些提前批基本被吊打。主要也因为项目刚结束,复习不周,深刻反省。
目前网易 \ 完美 \ BIGO \ 虎牙已意向书,感谢兄弟萌,也祝大家顺利。


2020年9月15日21点21分更新腾讯天美一面


//-----网易互娱创新图形引擎二面


一面间隔较久,内容记不太清楚了,主要是c++基础和算法。

项目相关:

详细介绍项目解决的问题,具体方法,渲染质量和性能。

图形学基础:
1.    为什么使用齐次坐标,它有什么好处?
A:    实现平移操作,区分点和向量,支持投影矩阵。
2.    纹理相关,如何在shader中采样,如何获取二维纹理中的具体像素值?
A: glGenTextures()、glBindTexture()、shader中texture()与texelFetch()。
3.    mipmap的实现,如何确定使用哪一层?
A;    1/4下采样并存储,金字塔结构。采样点横纵+1,投影到texture中,判断大致覆盖范围。层与层之间插值。
4.    如何渲染光照?
A:    phong模型,pbr光照模型,光追。
5.    如何渲染半透明物体?
A:    BSDF,内表面散射。
6.    如何确定渲染顺序?
A:    深度缓存,逐像素测试。
7.    什么情况下fs的执行次数会小于vs的执行次数(顶点数)?
A:    一开始答渲染点云,点之间相互遮挡,后来答设置模板缓存,只让很少像素通过模板测试。
8.    光栅化的作用?
A:    连续->离散,确定渲染窗口中一个离散点是否在待渲染的几何体内。
9.    阴影图的实现?
A:    先变换到光源空间,记录深度值,在视点空间内的着色点逐个变换到光源空间比较深度值。
10.    阴影图的改进?
A:    渲染较大场景的级联阴影图(CSM),把场景点云化的不完美阴影图(ISM), 渲染半球面空间的抛物面阴影图(PSM)。

算法:
1.    删除链表中倒数第N个节点,默写吧。
2.    如何确定黑盒函数foo(int)的时间复杂度?
A:    思路,均匀采样n, 用同步等待的方式确定函数执行前后的时间戳,记录执行时间,比较执行时间的增长率(线性、log、幂次)。

//-----网易互娱创新图形引擎HR面


主要在聊一些常见的问题,比如学习经历,如何自主学习,遇到的一些挫折或者有成就感的事情,情绪的一些排解方法等等。

HR跟我解释了这个岗位主要是游戏生态和游戏周边产品的一些开发,比如UU加速器、MuMu模拟器的开发。

还聊了城市偏好,我个人是比较偏好广州,虽然在北京上学。

如果有机会的话还是欢迎来实习。

//-----网易互娱创新图形引擎面试总结


目前刚走完面试流程,技术面每轮都是两位面试官,一位主要负责提问图形学知识,一位主要负责提问C++基础和算法。

面试环节整体氛围好,面试官鼓励你多讲点,回答的好的话也会点头示意。

比较惭愧,楼主本来投的提前批是游戏开发的图形渲染岗。但是在二面的时候发挥的不好,挂了二面。

或许是今年确实比较缺图形方向的人,大概一周后,HR电话约我转这个创新图形引擎岗。

倾向的话,我个人是想从事游戏开发相关的岗位,但是城市比较偏好广州。

已OC。

//-----完美世界引擎开发一面


完美这边投的是提前批,一轮技术面,二轮HR面,三轮工作室制作人终面

项目相关:
详细介绍项目解决的问题,具体方法,渲染质量和性能。面试官追问了很久。

C++基础:

1.    多继承的实现?可能出现什么问题?
A:    派生类继承多个基类,和每个基类之间视作单继承。可能出现二义性问题,在函数调用时需要指明域。
2.    重载与重写?
A:    重载原理是c++根据参数和返回值的重命名机制,重写指派生类重写基类同名方法。
3.    纯虚函数?
A:     virtual int A() = 0; 必须由派生类实现。
4.    内存泄露与智能指针。
A:    动态申请的堆内存不再使用时没有被及时释放。介绍三种智能指针,介绍shared_ptr的实现。
5.    const的用法有哪些?
A:    修饰指针,修饰成员变量,修饰成员函数,修饰形参引用。
6.    STL容器相关

图形学相关:

1.    如何判断点O是否在三角形ABC之内?
A:    叉乘法,分别叉乘AB×AO, BC×BO, CA×CO,如果叉乘结果同向,说明O在ABC之内。
重心坐标法,ABC平面内任意一点可以用ABC坐标表示,O = αA + βB + γC, α + β + γ = 1;如果α、β、γ均大于零,说明O在ABC之内。
2.    了解UE4吗?
A:    只了解皮毛,做过小游戏demo,实验相关尝试过UE4的特效,如粒子和景深。

//-----完美世界引擎开发HR面


基本上还是HR面常问的一些问题。因为我投的工作室是做主机游戏开发的,所以聊了游戏经历之后接着聊了很多主机游戏相关的内容。


//-----完美世界引擎开发终面


二面完当晚收到工作室制作人的终面,说根据前两面的反馈,对我的印象比较好(可能是项目加分?),希望以我提问为主。

主要问了项目组的基本情况,问了他对主机游戏市场以及发展趋势的看法。

还问了希望做什么类型的主机游戏(ARPG? 剧情向?),可能的实习安排,项目组的规模等等。


//-----完美世界引擎开发总结


完美这边就我的感受而言,应该是更侧重于关注你的项目内容和项目经验。

和互娱那边的感觉一样,比较需求图形方向的同学。这边是我走的流程中最快的了(3天3面)。

HR也跟我聊过,不是做主机游戏开发和做手游开发就谁比谁牛,而是牛的点不一样。

楼主个人还是比较喜欢主机游戏的,也有很多忠实的主机游戏朋友。唯一不确定的就是国内主机游戏之后的发展。

如果可以的话,我觉得这个选项也不错。毕竟有兴趣爱好驱动可能会更好一点。

看完黑神话悟空,我也好想做这个.jpg

已OC。

//-----虎牙直播图形渲染一面


C++基础:

1.    class与struct之间的区别与联系。
2.    内联函数在编译期间完成哪些事情?
3.    数组与链表的对比(存储空间,增删改查)。
4.    SLT容器相关。

图形学基础:
1.    阐述opengl渲染管线。
2.    编写shader时,有哪些注意优化的点?
A:    注意数据传输,特别是CPU到GPU的传输,注意if...else的分支,注意有些可能带来额外开销的指令,如discard。
3.    了解alpha blend吗?
A:    了解过相关的图像融合算法。
最简单的方法就是按照均值的思想去按比例混合,但是对纹理的融合来说,有保持纹理对比度或者强度的的融合算法,具体实现我记不清楚了。
4.    如果让你做一些直播上针对人脸的美化,你会怎么做?
比如给你人脸标记的mark,想实现在shader中进行瘦脸的操作?
A:    经过面试官提示后想的。可以在defer rendering的基础上,根据mark信息,修改渲染平面的顶点信息,比如增加顶点成为一个网格,vs中
对网格进行一些距离上的操作,fs计算的渲染结果在映射到编辑后的网格上,就能实现人脸的一些形变。
5.    关于深度测试,有什么优化?
A:    可以在fs之前就进行深度测试,保证剔除掉那些不可见的像素,节省渲染开销。但是要保证fs之内不修改深度值。

项目相关:
面试官对眼动跟踪很感兴趣,详细聊了项目的一些实现细节。


//-----虎牙直播图形渲染二面


项目相关:

开场聊了项目相关,还是比较关注眼动跟踪。
因为疫情,上半年并没有回实验室。委托学长用眼动仪收集了他的眼动跟踪数据。
项目中使用采集到的凝视点位置信息进行相关实验。

C++基础:

1.    C++的多态如何体现?
A:    静态多态:函数重载;动态多态:虚函数;
当时没想起来,其实还有参数多态(类模板,函数模板),强制多态(类型转换)。
2.    构造函数可以是虚函数吗?析构函数呢?
A:    不可以,调用构造函数时,对象还未创建;可以,虚析构函数机制可以避免内存泄漏。
3.    一个类中声明了一个虚函数,取他的sizeof()应该是多少?
A: 类中添加虚函数后,sizeof()为该指针(虚函数表)的大小。当时有点抽,回答成4+4了。
4.    线程池和内存池了解吗?
A:    不太了解(没复习到)。
5.    DLL的加载方式有哪些?
A:    只记得好像有动态加载和静态加载。
6.    常用排序方法里哪些平均复杂度较高?
A:    插入、选择、冒泡,都是相当于两层遍历, O(n2)。
7.    介绍下快排思想。
A:    左右指针、分段递归。
8.    STL相关,vector,set,map

图形学基础:

只问了opengl渲染管线和光照模型。


//-----虎牙直播图形渲染HR面


聊了为什么选择图形学方向,考研经历,论文写作经历,家人看法和意向城市。

因为家里人放养,加上楼主目前没有女朋友,所以工作城市的选择上还是比较自由😅

工作内容上我自然是期望契合我所学知识,希望深耕图形学方向。


//-----bigo图形引擎开发一面


面试官是我师兄的同组同事,太巧了吧。🤣🤣
师兄太强了。

项目相关:

介绍项目。因为楼主在虚拟现实实验室,面试官问到了全景相机图像转VR双眼播放的问题。
还问到了VR环境引起眩晕的原因。(深度感;我们的运动感和视觉误差)

图形学基础:

1.    phong与blinn-phong的不同点?..
A:    计算上,高光项幂次系数,phong是dot(reflect, view),blinn-phong是dot(normal, halfway)。
效果上,phong因为reflect与view夹角大于90度时取0,视角偏差大时会有很明显的光照边缘。
blinn-phong夹角一般较小,需要较大的幂次。
2.    vs中的变换矩阵和空间变换。
A:    MVP矩阵,模型空间,世界空间,视点空间,屏幕空间。
3.    如果对一个模型仅沿X轴缩放,应该如何利用model矩阵正确计算光照?
这里我没有回答出来,面试官进行了详细的解释,是想考察法线与model矩阵的知识。
对法线需要再乘上model矩阵的逆矩阵。
4.    MSAA与FSAA?
A: MSAA在光栅化时,像素内多次采样,根据采样点在三角形内的数量来实现模糊。
FSAA通过边缘检测找到边界区域,用无锯齿线段替换有锯齿线段。边缘检测可以用各种梯度算子解决。
聊到了走样的形成原因和cv的处理。
5.    alpha融合?
A:    源*源因子+目标*目标因子。
6.    opengl与openglES

C++基础:

1.    某个类取sizeof(),各种情况
2.    可以虚析构函数吗?为什么?
3.    多态的种类?
4.    new与malloc的的区别?operator new?
5.    STL相关

面试官人太好了,比如之前我不会的问题,会详细的解释,面下来感觉上了两堂课。


//-----bigo图形引擎开发二面


当晚二面,时间太短了(28分钟左右),问的比较简单。

项目相关:

介绍项目,没有继续追问。

图形学基础:

1.    介绍opengl渲染管线。
2.    介绍光线追踪和路径追踪。
3.    路径追踪的细节,蒙特卡洛积分方法?
4.    用unity和ue4做过哪些效果?

C++基础:

1.    虚函数和多态机制?


//-----bigo图形引擎开发三面


三面基本在问线代和高数的问题,很惭愧,只回答出简单的,全靠平时用到的和大一的知识沉淀。

1.    正交矩阵的定义是?我们的变换矩阵中哪些是正交矩阵?
A:    每行每列相互正交的方阵,与其转置相乘得到单位阵。排除法,平移矩阵的操作体现在在齐次矩阵中的第四列;
缩放矩阵又只针对对角线元素,只有旋转矩阵了。
2.    旋转矩阵的特征值是?
A:    想了好久,是1。
3.    如何理解特征值和特征向量?写一下相关式子?
A:    定义上:Aα = λα,则 λ 称为特征值,α 称为特征向量。从直观的几何上来说,把A看作是一个变换矩阵,对 α 变换后,
α 的方向没有变,只是模发生了线性改变。求解特征方程,得到一个或多个特征根。
4.    如果A是二阶矩阵,如何理解特征向量呢?
A:    只能想到 λ 无解。面试官提示说可能有复数解,想到对二维来说,虚数轴垂直于平面,相当于旋转轴。
在三维空间中拆解这个虚数轴,就会有实数解。
5.    如何表示一个平面?
A:    我说用点法式表示,面试官让写下来。设法向量 N(a, b, c),给定点 P(d, e, f),待求点 A(x, y, z)
则有:PA = (x - d, y - e, z - f); dot(N, PA) = 0;  a(x - d) + b(y - e) + c(z - f) = 0.
6.    数学上如何把一个非线性问题表示成线性问题?比如把一个函数值表示成多项式的和?
A:    脑抽说是傅里叶变换,提示后说是泰勒展开。让写下泰勒展开还写错了漏掉了(x0 - x)n
7.    写一下如何多元函数全微分?比如x1, x2, x3; f(x1), f(x2), f(x3)
A:    至此完全被破防了,写的特别离谱,面试官提示说相当于线代的雅可比行列式。
8.    如何对函数求极值?必要条件?
A:    一阶导数位0,二阶导数不为0
9.    如果求f(x)的极值,但x满足约束条件H(x) = 0?
A:    只能想到代入法。面试官说实际工程中会用一种叫拉格朗日乘子的方法求近似。
10.    最小二乘法还有印象吗?
A:    (完全不记得了。。)面试官跟我讲了讲。
11.    对四元数有了解吗?
A:    工程中用过,四元数表示头盔转向,四元数和欧拉角的转换,欧拉角的万向节死锁。

最后面试官说,看你前面渲染基础挺扎实的,我这次就主要问数学知识。
实话实说,面试下来感觉从面试官那学的比我回答的多,数学知识被破防😅

//-----腾讯游戏引擎开发一面


c++基础:

1.    指针和引用的区别?
A:    指针是取地址,引用是取别名。指针可以改变指向关系,引用一旦确定就不能改变。
2.    无效引用?
A:    引用一个未初始化的指针。其实还有引用一个已经返回的局部变量,没想起来。
3.    调用函数的过程?
A:    函数参数入栈,返回地址入栈,函数地址入栈,局部变量入栈,执行后依次出栈。
4.    虚析构函数?
A:    父类指针指向子类对象,析构时可以先调用子类析构函数,再调用父类析构函数。
5.    智能指针的原理?各个智能指针的特点?
6.    extern关键字的用法?
A.    在一个文件中已定义全局变量,在另一个文件中调用,用extern声明即可。

图形学基础:

1.    为什么使用齐次坐标?
2.    正交矩阵的特点?
3.    view矩阵的功能?如何推导?
A:    世界坐标系到相机坐标系的转换。已知相机的正前方和正上方,相机视为原点,对世界坐标进行平移和旋转。
4.    介绍一下渲染方程。
5.    mipmap的原理?各向异性mipmap?走样产生的原理?
6.    射线与1w面片求交?用octree如何加速?如何判断射线与AABB相交?
7.    给定一个极坐标表示的球面,给定两点,求两点间短弧的距离。
8.    4,4,4,3求24点。设计求任意1~10四个数的24点。



暂时这些,后续继续记录。
基本三大件,C++基础,算法,图形学基础。

复习图形学知识,推荐参考B站闫令琪老师的课程,看完基本够面试官问的了。

算法的复习可以参考微信号labuladong的文章,形成体系后再加大刷题规模。



更多模拟面试

全部评论

(11) 回帖
加载中...
话题 回帖

相关热帖

近期热帖

近期精华帖

热门推荐