面试考察点:
- 基础是否扎实。
- 代码能力。
- 数学能力。
具体问题考察侧重点:
- 业务水平:能不能讲清楚自己做过的项目(包括项目起源、项目主要任务、项目的目标、项目的结果、对项目的反思)并说清楚自己在项目中扮演的角色、你的工作思路。
- 发展潜力:最常见的问题[以你现在的水平(技术经验)来看,过去你参与的xxx项目有什么缺点,如果是现在的你,会如何处理这些缺点?]考察复盘能力,看是否有总结。
- 解决问题的能力:面试官结合你的经历提出更加深入的问题。主要考察拟解决问题的思路。
具体问题:
-
对原来实习经历中的工作简单描述
-
sdk的实现原理
-
实时渲染与离线渲染的区别
-
具体描述基于GBuffer的延时渲染
- GBuffer的定义:G缓冲是对所有用来存储光照相关的数据,并在最后的光照处理阶段中使用的所有纹理的总称。
- position : 位置向量用于计算(插值)片段位置的lightDir和viewDir
- albedo : 反射率
- normal : 法向量用于表面粗糙
- specular : 镜面强度
- roughness : 粗糙度
- AO : 环境光遮蔽
- 所有光源的位置与颜色值
- 玩家或者观察者的位置向量
- 使用cook-torrance反射模型
- $R_s$ = (frac{F*D*F}{(Nullet V)(Nullet L)}) 其中F是Fresnel反射系数,表示反射方向上的光强占原始光强比率;D表示微平面分布函数,返回的是“给定方向上的微平面的分数值”;G是几何衰减系数,衡量微平面自身遮蔽光强的影响。N、V、L分别代表法向量、视线方向和入射光方向。
- schlick给出了Fresnel反射函系数的一个近似,精度在1%范围内:(F = f_0 + (1-f_0)(1-Vullet N)^5) 其中(f_0)为入射角度接近0时的反射系数,V是指向视点的向量,H为半角向量。
- 微平面分布函数(D = frac{1}{m^2cos^4alpha }e^{-frac{tan^2alpha}{m^2}}) m值用于度量表面的粗糙度,较大的m值对应粗糙的平面,较小的m值对应与较光滑的平面;(alpha)是顶点法向量N和半角向量H的夹角。
- 微平面上反射的光有三种可能:入射光未被遮挡,此时到达观察者的光强为1;入射光部分被遮挡;反射光被遮挡;(G = min(G_1, G_2, 1)),其中(G_1 = frac{2(Nullet H)(Nullet L)}{Vullet H}), (G_2 = frac{2(Nullet H)(Nullet V)}{Vullet H})
- 光照处理阶段
- 对于这个光照处理阶段,我们将会渲染一个2D全屏的方形(有一点像后期处理效果)并且在每个像素上运行一个昂贵的光照片段着色器。
- GBuffer的定义:G缓冲是对所有用来存储光照相关的数据,并在最后的光照处理阶段中使用的所有纹理的总称。
-
指针与引用的区别
- 区别1
- 引用总是指向某个对象:定义引用时没有初始化时错误的。
- 区别2
- 赋值行为的差别:给引用赋值修改的是该引用所关联的对象的值,而不是使引用与另一个对象关联。
- 引用一经初始化,就始终指向同一个特定对象。
- 区别1
-
点乘与叉乘
- 点乘
- 向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。
- 对于向量a($a_1$, $a_2$,……$a_n$)与向量b($b_1$, $b_2$,……$b_n$) 向量a与向量b的点积公式为:a·b = $a_1$$b_1$ + $a_2$$b_2$ + …… + $a_n$$b_n$
- 点乘的几何意义,点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在b向量在a向量方向上的投影,有公式:a·b = |a||b|cosα
- 叉乘
- 两个向量的叉乘,又叫向量积、外积、叉积,叉乘的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量组成的坐标平面垂直。
- 对于向量a($a_1$, $a_2$,……$a_n$)与向量b($b_1$, $b_2$,……$b_n$) 向量a与向量b的叉乘公式为:
- 叉乘的几何意义,在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于a和b向量构成的平面。在二维空间中,叉乘还有另外一个几何意义就是:aXb等于由向量a和向量b构成的平行四边形的面积。
- 点乘
-
多重重要性采样与蒙特卡洛积分
- 蒙特卡洛估计
- 对于函数f(x)求其积分
- 重要性采样:重要性采样是一种减小方差的技术,它利用了这个事实:当分布函数p(x)跟函数f(x)很相似时,下列的蒙特卡罗估计值就收敛更快:FN = 1/N Σi=1,N f(Xi)/p(Xi)
- 它的基本思想是,将采样工作集中到被积函数值相对比较高的地方,那么就可以更有效率地计算出精确的估算值。
- 多重重要性采样(Multiple importance sampling, MIS)用了一种简单而又容易实现的方法解决了这些问题。其基本思想是,当我们估算一个积分时,我们应该从多个采样分布中采样,并且期望至少其中一个分布可以比较好地匹配被积函数,即使我们并不知道到底哪一个更好。MIS提供了一种可以对不同分布中的采样进行加权的方法,这样可以摆脱由于被积函数值跟采样密度不匹配而产生的很大的方差尖峰。这个方法甚至鼓励使用那些为特殊情况而设置的特殊采样例程,因为在这些特殊情况发生时,一般而言确实可以减小方差而又没有什么开销。
- 蒙特卡洛估计