霜狼老师TA学习笔记 - 渲染流程(光栅化阶段、逐片元操作)

 

对于一个图元,比如一个三角形,我们通过进行三角形设置获得图元的便捷信息,从而获得顶点所覆盖的像素。

三角形遍历就是遍历三角形内所有像素的过程,我们通过应用阶段获取的数据,知道了三个顶点的位置,并通过三角形设置知道了三角形的边界,通过这些数据,我们要筛选出所有片元内的像素点。

在光栅化的最后,我们还会进行抗锯齿的操作,因为对于每个像素点,他不是只属于一个片元,所以我们在每个像素点内取几个采样点,通过判断采样点是不是在三角形内,来确定当前像素需要混合多少片元的颜色。

上一步我们获得了三角形顶点内所有的像素数据,我们通过三个顶点的位置和颜色推出插值函数,并通过这个函数,获取三角形内所有的像素的颜色,之后使用我们计算出的颜色和光照阴影等颜色进行混合,得到最终的像素颜色。

在颜色的混合阶段,我们首先要进行透明度测试,在透明度测试中,透明度小于阈值的点会被裁减掉不被渲染,剩余的点进入到深度测试和模板测试阶段。

在模板测试中,我们比较所有物体的模板值,我们通过设置模板比较的规则,决定什么物体能通过模板测试。为什么要有模板测试呢,因为透明度测试是根据美术设置的透明度进行测试,深度测试是根据游戏内和摄像机的距离进行测试,这两个流程都不能被我们很灵活的控制,所以加入了模板测试,方便灵活控制部分片元是否显示。

在深度测试中,对于每一个片元,我们通过比较深度缓冲中的片元深度,决定是否要进行片元的绘制,我们可以设置片元的比较函数,默认是深度小的覆盖深度大的,深度就可以简单的理解为距离摄像机的长度。

最后我们对通过测试的颜色进行混合,对于不透明物体,根据遮挡关系决定显示谁的颜色,对于透明物体,进行颜色的混合,并输出到屏幕上。

最后一个阶段,我们还可以进行一个屏幕后处理,具体的方法就是我们获得了输出到缓冲的所有像素,并对这些像素进行一个二次处理,比如边缘检测,高斯模糊,通过这些操作,得到更好的画面展示。

猜你喜欢

转载自blog.csdn.net/HelloCSDN666/article/details/124789170
今日推荐