考研本校计算机,考的还凑合,但是不想读了。加上自己之前自学了一点点图形学基础知识,于是考完猛学一个月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还有哪些着色器?它们的作用?写代码时用过哪些着色器?
几何、细分、计算着色器
用