参考may佬《技术美术百人计划》
容易混淆的Clip Space vs NDC,透视除法
冯乐乐《unity shader 入门精要》
图形1.1 渲染流水线
整体流程
- 应用阶段:准备场景数据、粗粒度剔除、进行渲染设置、输出到几何阶段
- 几何阶段:顶点着色器、曲面细分、几何着色器、顶点裁剪、屏幕映射
- 光栅化阶段:三角形设置、三角形遍历、片元着色器、逐片元操作
- 逐片元操作:裁剪测试、透明度测试、深度测试、模板测试、混合
CPU流水线(应用阶段)
准备基本场景数据
场景物体数据
- 变换数据:位置、旋转、缩放
- 网格数据:顶点位置、UV贴图
光源及阴影数据
- 光源类型:平行光、点光、聚光
- 位置、方向、角度等数据
摄像机数据
- 位置、方向
- 远近裁切平面
- 正交/透视(FOV)
- 视口比例/尺寸等
其他全局数据
加速算法/粗粒度剔除
碰撞检测
加速算法
遮挡剔除
- 可见光裁剪
- 可见场景物体裁剪
- 八叉树
- BSP树
- K-D树
- BVH
设置渲染状态 准备渲染参数
绘制设置
- 使用着色器
- 合批方式
绘制顺序
- 相对摄像机的距离
- 材质RenderQueue
- UICanvas
渲染目标
- RenderTexture
- FrameBuffer
渲染模式
- 前向渲染
- 延迟渲染
调用drawcall 输出渲染图元到显存
CPU通过调用draw call来告诉GPU开始进行一个渲染过程;一个draw call会指向本次调用需要渲染的图元列表
- 顶点数据
- 位置
- 颜色
- 法线
- 纹理UV坐标
- 其他
- 其他数据
- MVP矩阵
- 纹理贴图
GPU流水线
几何阶段
顶点着色器(Vertex Shader)
- 可编程
- 把顶点坐标从模型空间转换到齐次裁剪空间(投影坐标系) ,顶点着色器的输出就是在裁剪空间上。