设计模式¶
图形学¶
1.前向渲染管线流程¶
- 应用阶段:CPU准备提交到GPU
- 几何阶段:顶点、曲面细分、几何、裁剪、屏幕映射
- 光栅化阶段:三角形设定(图元装配)和三角形遍历阶段
- 像素处理阶段:片元着色器,透明、模板、深度、抖动(色彩混合)阶段,帧缓冲 其他的还有
- 视口变换的作用是什么,空间的维度是如何变化的
- 视口变换时深度值如何处理?(存入深度缓冲
- NDC是什么?
- 光栅化的定义与作用
- 法线矩阵有什么用
- 如果对一个模型仅沿X轴缩放,如何利用M矩阵计算光照?法线乘逆转置矩阵
2.光照模型¶
- Lambert
- half-Lambert
- Gourand
- phong
- Blinn-Phong
- Cook-Torrance
- BRDF
- bsdf和brdf的区别?各自的应用场景?
3.阴影处理¶
- ShadowMap:
- 原理
- 采样方法
- Shadow Acen
- PeterPanning
- 软阴影
- PCF
- PCSS
- ESM理论:预滤波,到e指数的公式
- VSM:
- 深度纹理(平方)?
- 计算平方和方差
- 漏光?
- SDF:Ray Marching
- CSM级联阴影:
- 分割视锥体
- 球型优化
- 阴影过渡问题:深度,抖动,线性插值,球距
4.后处理¶
- bloom
- 边缘检测:拉普拉斯算子
5.PBR¶
- 渲染方程及其意义
- lambertion
- cook-torrance的BRDF:
- D:法线分布,算和半程向量一致的朝向,决定高光大小。
- G:几何函数,、挡住其他微平面反射出的光纤,决定粗糙度。
- F项,菲涅尔:不同表面角反射光线占比,F0(平面基础反射率),F99。决定金属度。
- 金属度,粗糙度的实现
- IBL
- 片段的法线
- 卷积的假设?epic Game预计算镜面部分的卷积(分割近似求和法)
- 预滤波环境贴图:根据环境采样,CubeMap,等距柱状投影图,各个角度六张图合一张大图
- 如何让卷积加速、更高效?蒙特卡洛,重要性采样
6.光线追踪¶
- whitted-style光追停止反射的问题(直接光照,间接光照)这就会导致射线爆炸
- 单像素多射线(蒙特卡洛求均值解直接光照)
- 俄罗斯轮盘赌(RR,设定概率p继续递归,返回的值是L/p,最终得到的期望仍然是L)
- 重要性采样
- AABB
- BVH
- 光源
7.粒子模拟¶
- ECS
- 局部缓存
- GPU Instancing优化
8.弹簧布料模拟¶
- 显式欧拉,隐式欧拉,半程欧拉
- 弹簧质点模型
- 布料结构,剪切力
- 布料碰撞
9.水面模拟¶
- LOD
- Flow Map(滚动法线),FFT
- 波动方程:正弦,Gerstner
- 光照:切线、副切线、法线,Fresnel和光照模型
- 反射:摄像机RT,SSR,Fresnel(夹角越小反射越明显)
- 折射:通透感-SSS,深度查找
- 颜色:关闭深度写入,结合SSR(颜色和深度),根据背景进行混合采样。
- 浮沫:高度(贴图),topdown相机+噪声(岸边白沫)
11.IK¶
- 分析可达(骨链总长)
- 终止条件(迭代,终止条件)
- 解析法
- 数值法:
- CCD:循环坐标下降
- FABRIK:前向和后向到达
- Forward:末端关节移动到目标点,其余节点以此平移
- Backward:前端移动回去,和子关节做连线,取长度的位置
- 多次迭代
- Untiy创建足部ik
- 权重:抬起的脚为0,放下的脚为1,中间时ik的过渡混合
- 射线记录y值,计算法线加角
- 盆骨(根节点)偏移,不然ik可能达不到对应位置
11.图形API(如OpenGL)¶
- VAO
- VBO
- EBO
- FBO
- GLFW的作用?
12.ComputeShader¶
- 设定步长,传入数据
- 设置索引方式,ID
- 优化:合理设置32的2次幂为倍数
- 根据数据布局选择2D/3D分发
- step()代替if
- CPU计算常量,减少重复运算
13.JobSystem¶
14.草地模拟¶
15.集群模拟¶
16.Lua¶
17.MVVM与MVC--UI架构¶
18.批处理¶
19.ECS¶
20.单例模式¶
21.引擎¶
渲染、物理、资源系统、
22.玩法与特效¶
- 事件与消息系统
- 消融,模糊,2d动态及反射水,雾,bloom
- 单例、观察者、有限状态机
- 粒子系统、
- 数据镜像世界玩法扩展
- 怪物和图块组合玩法