跳转至

⭐⭐⭐技术栈

1.⭐⭐⭐MVP矩阵变换

2 .⭐⭐⭐前向渲染管线流程

应用阶段CPU

  • 应用阶段:CPU准备提交到GPU,DrawCall

几何阶段

  • 几何阶段:顶点、曲面细分、几何、裁剪、屏幕映射
  • 法线矩阵有什么用?法线如何变换?
  • 视口变换的作用是什么,空间的维度是如何变化的
  • 视口变换时深度值如何处理?(存入深度缓冲)

  • 如果对一个模型仅沿X轴缩放,如何利用M矩阵计算光照?法线乘逆转置矩阵(最好会写)

  • 背面剔除原理

裁剪

  • 裁剪空间(6个面),裁剪方法(线段裁剪CS--区域码、LB--交点计算,多边形裁剪SH遍历面的边,并判断是否在内侧,计算边面的交点。)
  • 新顶点的属性插值(法线、颜色、uv)、透视矫正。
  • GPU通过固定单元高效处理裁剪,三角化适应光栅化。

屏幕映射

  • 裁剪空间->归一化设备坐标->屏幕映射(按照屏幕大小放缩)
  • NDC是什么?

光栅化阶段:

  • 三角形遍历:顶点构成AABB,仅处理该区域像素,逐像素测试每个像素中心是否在三角形内。
  • 内外测试:判断点在三角形内,通常使用边函数法或者重心坐标法;
  • 深度插值和属性插值(uv,法线,颜色等):线性插值和透视校正插值,最后生成片元。
  • 抗锯齿:MSAA--多重采样抗锯齿,每个像素进行分割并分别进行内外测试,混合子样本结果。
  • 优化技术:
    • Early-Z:片段着色器前执行深度测试,提前丢弃遮挡片段。
    • HI-Z:层级深度缓冲,快速跳过不可见区域
    • 瓦片渲染:移动GPU将屏幕分块,逐块处理减少带宽和计算量。

像素处理阶段

  • 像素处理阶段:片元着色器,透明、模板、深度、抖动(色彩混合)阶段,帧缓冲 其他的还有

3.⭐⭐⭐光照模型

  • Lambert = dot(N,L)
  • half-Lambert
  • Gourand = L->反射向量R,根据你的视野方向-》高光+漫反射
  • phong
  • Blinn-Phong H = L+v/

  • Cook-Torrance

  • bsdf和brdf的区别?各自的应用场景?

4.⭐⭐⭐延迟渲染、TB等其他管线处理的方式

  • ⭐⭐⭐延迟渲染
  • Early-Z
  • Z-Prepass

4.⭐⭐图形API(如OpenGL)

  • VAO
  • VBO
  • EBO
  • FBO
  • GLFW的作用?

5. ⭐⭐其他比较特殊的管线处理方式

  • Early-Z
  • Z-Prepass

6.⭐⭐阴影处理

  • ⭐⭐⭐ShadowMap:
    • 原理
    • 采样方法?像素点在shadowMap找不到怎么处理?
    • Shadow Acen
    • PeterPanning
  • 软阴影
    • ⭐⭐⭐PCF
    • PCSS
    • E
    • EV
    • VSSM:额外存储?漏光?
    • SDF
  • CSM:
    • 分割视锥体
    • 球型优化
    • 阴影过渡问题:深度,抖动,线性插值,球距

7.⭐⭐⭐批处理

  • 静态合批、动态合批
  • SRP Batching
  • GPU Instancing

8.⭐⭐PBR与IBL

  • 渲染方程及其意义
  • lambertion
  • cook-torrance的BRDF:DGF项,菲涅尔的F0,F99
  • 金属度,粗糙度的实现
  • IBL
    • 卷积的假设?
    • 图形存储:CubeMap,等距柱状投影图,各个角度六张图合一张大图
    • 如何让卷积加速、更高效

9. ⭐⭐路径追踪

  • whitted-style光追停止反射的问题
  • 蒙特卡洛
  • 单像素多射线
  • 俄罗斯轮盘赌(RR)
  • 重要性采样

10.⭐⭐后处理

  • ⭐⭐⭐LUT
  • ⭐⭐⭐Bloom实现原理

11.物理模拟

- 碰撞

11. ⭐透明物体

  • OIT顺序无关
  • 排序、混合
  • 其他管线的影响

12.IK

  • 分析可达(骨链总长)
  • 终止条件(迭代,终止条件)
  • 解析法
  • 数值法:
  • CCD:循环坐标下降
  • FABRIK:前向和后向到达
    • Forward:末端关节移动到目标点,其余节点以此平移
    • Backward:前端移动回去,和子关节做连线,取长度的位置
    • 多次迭代
  • Untiy创建足部ik
    • 权重:抬起的脚为0,放下的脚为1,中间时ik的过渡混合
    • 射线记录y值,计算法线加角
    • 盆骨(根节点)偏移,不然ik可能达不到对应位置

13.蒙皮原理

14.PC和移动端的GPU架构区别

11.数学

  • 给定点集求凸包
  • 如何判断点在三角形内?重心坐标 内角和 射线法
  • 点在矩形内?
  • 如何判断一个多边形是凸多边形
  • 已知法线向量和入射向量求反射向量
  • 叉乘求多边形面积
  • 空间两直线求距离
  • 空间点到空间三角形的最近距离
  • 行列式为0的意义
  • 什么是齐次坐标?
  • 齐次坐标能做什么?
  • 它是怎么去区分是一个位置,还是一个方向?
  • 为什么使用齐次坐标,它有什么好处?
  • 如何判断射线与球体相交? 如何优化
  • 法线矩阵是什么
  • 裁剪空间做了什么
  • 视锥体如何定义
  • 一般使用的向量是几维的?矩阵呢?为什么向量是三维,矩阵是四维的呢?
  • M矩阵是怎么来的?
  • 各矩阵的结合顺序怎么确定?
  • 写出一个旋转矩阵和一个平移矩阵,怎么叠加?
  • 给定M矩阵,能否分解为几种变换矩阵
  • 正交矩阵的定义、特点?
  • 我们的变换矩阵中哪些是正交矩阵?
  • 如何理解特征值和特征向量?写一下相关式子?
  • 旋转矩阵的特征值是?
  • 如果A是二阶矩阵,如何理解特征向量呢?
  • 切变矩阵的特征 如何表示一个平面?
  • 最小二乘法了解吗? 知道欧拉角吗?有什么用?它的优点和缺点是什么?
  • 万向锁遇到过吗?为什么会有万向锁?如何解决?
  • 四元数有了解吗?作用?如何进行插值?
  • 各空间中,哪些是左手系,哪些是右手系,为什么会有变化
  • V矩阵的功能?如何推导?
  • 正交投影和透视投影有什么区别?
  • 视口变换的作用是什么,空间的维度是如何变化的
  • 绕世界坐标中某一物体自身的y轴旋转一定角度,旋转矩阵怎么求
  • 两条线段相交判断
  • 如何判断射线与三角形相交
  • 如何判断射线与(光追)AABB相交?
  • 给定一个极坐标表示的球面,给定两点,求两点间弧长。
  • 圆和矩阵相交性判断?
  • 凸多边形相交性判断?
  • 射线与1w面片求交?如何加速?
  • 矩阵SVD分解?
  • 数学上如何把一个非线性问题表示成线性问题?比如把一个函数值表示成多项式的和?
  • 多元函数全微分
  • 函数如何求极值?极值的充分、必要条件?

其他重要的面经知识

1.抗锯齿

  • SSAA,光栅化阶段
  • MSAA,光栅化阶段
  • FXAA,滤波器实现
  • TAA,多帧加权混合
  • DLSS,机器学习

2.延迟渲染管线流程

  • 法线贴图是怎么存储的?为什么?优点缺点?
  • G-Buffer的构成:位置、法线、颜色和镜面值(对应三张纹理),PBR再加金属度和粗糙度
  • 延迟管线中需要处理复杂材质和光照模型怎么办?比如这一部分物体是某种shading model而另一部分物体是另一种model?
  • 半透物体如何在延迟管线中渲染(此题有坑)?
  • 遮挡剔除的实现算法介绍一些?

3.体积渲染

4.移动端渲染管线

5. forward+

6.

7.蒙特卡洛原理

8.MVP推导

HDR

HDR是什么?为什么? 什么是色调映射?了解哪些色调映射算法?写一下伪代码

MIPMAP原理、作用,如何确定使用哪一层?