Web3d 面试问题整理

INFO

该题来自海尔智家,非常的有深度的一篇面试题总结

  1. 光栅化是在做什么?

  2. drawcall 是指什么过程?

  3. 都用过什么类型的贴图?

  4. 管线中都用过什么测试?α测试 深度测试 模板测试

  5. mvp 矩阵是什么,做什么用?M:Model(模型矩阵)V:View(观察矩阵)P:Projection(投影矩阵)

  6. 旋转、平移是齐次矩阵中哪个值在变?举个例子

  7. 半透物体渲染顺序

  8. 透明物体太多导致什么问题?=> overdraw 是怎么回事?

  9. 延迟渲染是什么回事,可以用在哪,为什么要用延迟渲染,发生在管线哪一步,正向渲染在多光源的情况下有什么浪费?

    延迟渲染将渲染过程分为两个主要阶段:

    1. 几何阶段:不直接输出颜色到屏幕,每个像素的几何信息,如位置、法线、反射率、材质属性等 存到多缓冲区Gbuffer
    2. 光照阶段:将所有的光照计算集中在屏幕空间,一次性高效地处理大量光源
  10. projection 矩阵除了投影还可以用来做什么?(视椎体剔除)

  11. Gbuffer 是什么

  12. MSAA 在管线的哪个阶段介入?为什么会失效?本质上是硬件能力还是软件能力?=> Framebuffer 无法更细致的采样

    光栅化阶段,硬件能力。所以发生在片元着色器阶段的延迟渲染会造成MSAA失效。

  13. Shader 中为了避免使用 if 会用什么替代?step、smoothstep,为什么要替代?

  14. AO 本质是处理什么?直接光还是间接光?(间接光)

  15. 物体都受空间中哪些光的影响?

  16. SSAO 中的屏幕空间指的是什么?

  17. shadowMap 生成原理(硬阴影),软阴影是什么

  18. 兰伯特和 Phong 的光照公式

    兰伯特模型用于描述漫反射

    Idiffuse=kdImax(0,NL)
    • Idiffuse:漫反射的光强
    • kd:漫反射系数(物体表面的颜色或反射率)
    • I:入射光强
    • N:表面法线向量
    • L:指向光源的单位向量
    • NL:两向量点积,表示光照与法线的夹角

    特点: 只与入射角度有关,物体表面看起来“柔和”,没有高光。

    Phong 模型在兰伯特基础上,增加了镜面高光

    I=kaIa+kdImax(0,NL)+ksImax(0,RV)n
    • I:最终像素光照强度
    • ka:环境光系数
    • Ia:环境光强
    • kd:漫反射系数
    • ks:镜面反射系数
    • N:法线向量
    • L:指向光源的单位向量
    • V:指向观察者的单位向量
    • R:反射向量,计算公式 R=2(NL)NL
    • n:高光指数(控制高光的锐利程度)

    特点: 除了漫反射,还有镜面高光,能表现出光滑或有光泽的表面。

  19. PBR 完整公式,Lo 和 Li 是什么,有什么关系?(递归关系)这个在 threejs 里估计被删掉了,预先渲染会递归处理,实时渲染不会

  20. 光线追踪是什么,在光照公式中哪一步改进

  21. 不同物体 F0

  22. 毛发渲染怎么做

  23. BRDF 都是什么参数

  24. SDF 是什么

  25. InstancedMesh 是怎么减少开销的,本质上是软件的能力还是硬件的能力? (其实是显卡的优化)

  26. 噪声和随机数有什么区别?

  27. 各种抗锯齿算法,哪个效率最低,哪个速度最快,哪个效果最好?

  28. 骨骼绑定是什么原理?

  29. unity 和 threejs 在除了跨平台能力之外还有什么区别?

  30. webpack 和 vite 区别,为什么 vite 更快

  31. vue 解决了 jquery 的什么问题?

后续补充其他相关问题

  1. 片元着色器中为什么要尽量避免使用 discard?

    https://zhuanlan.zhihu.com/p/620436609

    discard 会导致 early-z 失效。那么为了解决这个问题用全透明代替 discard 又会有什么问题?-> 影响到GPU拾取