https://docs.qq.com/slide/DUGZtZlVtQVBRaFli
https://www.bilibili.com/video/BV1L54y1s7xw?p=2&spm_id_from=pageDriver
应用阶段
1.准备基本的场景数据
2.加速算法,粗粒度剔除
3.设置渲染的模式和状态
4.调用DrawCall传送给GPU
- 准备基本的场景信息
- 场景物体信息
- 物体的网格信息
物体的变换信息
- 物体的网格信息
- 光源信息
- 光源类型
光源的位子 朝向 角度
- 光源类型
- 摄像机的信息
- 摄像机的位子 朝向
- 摄像机的模式 正交或者投影
- 摄像机的大小宽度比例
- 光源和阴影
- 光源的种类
- 方向光源:颜色 朝向
- 点光源: 位子 范围 颜色
- 锥形光: 颜色 位子 朝向 锥角
- 阴影的信息
- 是否有可接受阴影的物体
- 阴影的信息 如强弱 以及一些优化算法
- 逐片元的构建一个阴影的贴图以备后用
- 光源的种类
- 场景物体信息
粗粒度剔除与算法加速
- 可见光裁剪
- 可见物体裁剪
渲染设置
绘制设置
- 使用不同着色器
- 合批方式
绘制物体的顺序
- 物体的先后顺序
- UICanvas的顺序
- Queue给定的顺序
渲染目标
- framebuffeer
- rendertexture
渲染模式
- 前向渲染
- 延迟渲染
输出到显存(交给GPU)
- 顶点数据
- 其他数据
##几何阶段
顶点着色
视图变换
MVP矩阵
顶点着色
可选顶点处理
曲面细分
如把一个六边形组成的球体分成更多的球体
几何着色器
- 将线段 顶点 三角形等信息继续拆分
投影
正交
没有消失点前后大小相同
透视
有消失点
裁剪
CVV
剔除出在视口范围内的顶点
正面或背面剔除
可以实现是否保留被遮挡的部分
屏幕映射
从连续到离散
把连续分散到像素
坐标系差异
映射到想要的分辨率SSAA?
#光栅化阶段
三角形设置
取三角形的顶点
三角形遍历
对于每个三角形对应的图元进行线性插值保存相应的数据为后续阶段的操作进行铺垫 注意一个像素可能是多个图元的叠加
抗锯齿
SSAA 放大分辨率实现抗锯齿
MSAA 在当前阶段进行 采样多个点 覆盖测试判断该点是否被图元覆盖 遮挡测试就是计算各种深度并将数据保存起来
FSAA以及其他的方法是后处理
逐片元阶段
逐片元着色
-使用顶点的RGB色进行线性差值,或者使用法线信息进行差值
-注意差值后还要加上光照得到片元颜色
颜色混合
- 透明度测试(小于阈值不显示 高于阈值才显示)
- 深度测试=渲染前面的或者后面的
- 模板测试=一个东西和另外一个在一块的时候决定渲染哪一个
- 混合
- 以上的测试都可以进行调节谁在先着色谁后着色的问题
目标缓冲区
帧缓冲区或者渲染贴图
后处理
额外进行的一个图像处理模式
- Bloom炫光
- HDR
- FXAA
- 景深 Depth of View
- 边缘检测
- 动态模糊