渲染流程
applicaton Stage(应用阶段)——>Geometry Stage(几何阶段)———>Rasterizer Stage(光栅化阶段)
应用阶段
cpu主导的阶段,可编写程序有着绝对的控制权
工作任务
- 准备场景数据(摄像机的位置,视锥体,场景包含的模型,光源信息…)
- 粗粒度剔除(culling)
- 设置每个模型的渲染状态(材质,纹理,shader)
几何阶段
工作任务
- 决定需要绘制的图元是什么,怎么绘制(GPU进行)
- 顶点坐标变换到屏幕空间,传递给光栅处理
光栅化阶段
工作任务
- 将上一步传来的数据渲染出最终图像(GPU进行)
- 决定每个渲染图元中的哪些像素会被绘制在屏幕上。对上一阶段得到的逐顶点数据(纹理坐标,顶点颜色)进行插值,进行逐像素处理。
渲染流水线的起点是CPU,应用阶段
- 把数据加载到显存
- 设置渲染状态
- 调用Draw call
图 1-1 GPU的渲染流水线实现
NDC —归一化的设备坐标(Normalized Device Coordinates)
opengl unity z∈[-1,1] DirectX z∈[0,1]
- 三角形设置 计算光栅化一个三角网格所需信息(上一步得到边界顶点信息,这一步得到该面积内的像素渲染信息)
- 三角形遍历 (扫描变换Triangle Traversal)判断三角网格覆盖了哪些像素,并使用三个顶点信息对整个覆盖区域进行插值。
片元着色器
纹理采样
逐片元操作
- 决定每个片元的可见性
- 通过测试的片元存储在颜色缓冲区与颜色进行合并
片元---->模板测试------>深度测试----->混合------->颜色缓冲区
书籍参考
【1】 《unity shader入门精要》