字节朝夕光年游戏引擎开发面经

擅长临床白癜风研究的专家 https://jbk.39.net/yiyuanfengcai/ys_bjzkbdfyy/
前情提要

考研本校计算机,考的还凑合,但是不想读了。加上自己之前自学了一点点图形学基础知识,于是考完猛学一个月Unity然后开始海投

投递状态:春招提前批,目前已OC

注:本面经所有的答案均为我面试时实际解答,包含大量图形学民科个人理解,不保证正确,仅供参考

附上我的垃圾简历:

一面

Q:从cpp源代码到exe经过了哪些过程?

编译生成汇编代码、汇编生成机器代码、链接拼接各个模块

追问:编译之前有没有要做的?

处理各种宏和include,将引用的代码拼接过来,对宏进行替换

Q:c和c++差异?c++执行更快吗?

c++能通过继承、虚函数等机制实现多态

c运行更快

Q:STL中vector不断push,内存上会有何变化?用指针指向vector元素应该注意什么?

达到阈值内存就扩容两倍(扩容倍数和编译器版本有关)

注意扩容后数据搬离,指针指空,变为野指针

Q:怎么理解c++的虚函数?什么是纯虚函数?

能够允许通过基类指针调用派生类函数

纯虚函数必须由子类实现

Q:为何析构函数可以为虚?子类不实现析构函数会怎样?

鼓励子类实现,以在析构函数中释放资源。不实现的话会调用父类的析构函数,可能造成子类资源未释放导致内存泄漏

Q:谈谈static关键字怎么用,有何效果?

修饰变量:只能在同一文件中被访问的静态变量

修饰函数:可以不实例化某个类,就调用该类的static函数

Q:进程和线程有何不同?线程同步有哪些方式?一个线程有几个栈?有没有无锁线程同步方式?

进程是资源分配的最小单位,线程是处理机调度的最小单位

线程有独立的调用栈

无锁队列(这个当时没答出来)

Q:分别谈一谈PBR里面的D、F、G项?菲涅尔项会带来怎样的视觉效果?

这里答得不太好,面试官想问物理意义,我答成公式组成了。应该这么答

D表示反射光强度在法线附件的分布,微平面向量和面法向越接近,强度越大。通过粗糙度改变波瓣形状

F表示菲涅尔效应,掠视金属时反射较多的光而俯视时反射光较少

G表示掠视时的几何遮蔽,通过史密斯法叠加入射和出射两个方向

Q:PBR材质贴图很多,纹理槽位不够应该怎么处理?

合并多个属性到一个通道,比如roughness和metallic可以存在8bit纹理的高低4bit上

追问:还有别的方法?

虚拟纹理,将小贴图合并成大贴图,按需调入

Q:PBR贴图格式需要注意什么?

albedo可以sRGB格式,而roughness和metallic需要保存在线性空间

Q:GPU渲染管线有哪些流程?

应用程序、几何处理、投影、裁剪、光栅化、像素着色、各种test

Q:除了fs、vs还有哪些着色器?它们的作用?写代码时用过哪些着色器?

几何、细分、计算着色器




转载请注明:http://www.aierlanlan.com/rzgz/391.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了