Triangle Setup<br>三角形设置
计算光栅化一个三角形网格需要的信息(每条边上的像素坐标)
Triangle Traversal<br>三角形遍历
检查每个像素是否被一个三角网格所覆盖,如果被覆盖的话,就会生成一个片元(fragment)
使用三角形网格的顶点信息对整个覆盖区域的像素进行插值
输出:片元序列
片元不是真正意义上的像素,是包含了很多状态(屏幕坐标,深度信息,法线,纹理)的集合,用于计算每个像素的最终颜色
Per-Fragment Operations<br>逐片元操作
决定每个片元的可见性
模板测试
读取模板缓冲区的值与参考值进行比较
未通过测试舍弃片元
不管是否通过测试,都可以根据比较结果修改模板缓冲区的值
深度测试
将片元深度值与深度缓冲区的值进行比较
未通过测试
舍弃片元
不管深度写入是否开启,都无法更改深度缓冲区的值
颜色合并
将片元颜色值与颜色缓冲区中的值进行合并
开启混合
将片元颜色值与寒色缓冲区的值进行混合操作,存入颜色缓冲区中
Unity中深度测试在片元着色器之前
Early-Z
提高效率,深度测试不通过的片元不需要在片元着色器中进行计算
双重缓冲(Double-Buffering)
屏幕上显示的颜色就是颜色缓冲区的值
对场景的缓冲在后置缓冲中(Back Buffering)
屏幕显示前置缓冲(Front Buffering)中的颜色
后置缓冲完成渲染后,GPU交互前置缓冲和后置缓冲中的内容