先上一下视频连接
【技术美术百人计划】图形 1.1 渲染流水线_哔哩哔哩_bilibili
在看了霜狼老师的百人计划之后,我对渲染流程的细节又有了一些新的理解,下图就是霜狼老师整理的渲染流程
应用阶段
1)首先准备相应的的场景数据,比如模型的顶点,法线,摄像机的位置,灯光的位置阴影等。
2)使用加速算法对渲染的流程进行加速。通过进行粗粒度剔除 ,把不可见的物体剔除出去,这些不可见的物体被剔除之后,就不会进入到几何阶段,也不会进行对应的计算。
3)设置渲染的状态,比如使用前向渲染还是延迟渲染,UI和物体分别是什么渲染参数,渲染的顺序是先透明还是先不透明,也或者是先渲染远处的再渲染近处的,渲染之后的图像是要展示到frameBuffer上还是renderTexture上。
4)打包数据发送给GPU,发送的这个动作也称为一次drawcall。
几何阶段
1)通过顶点着色器函数,对得到的顶点进行第一轮处理,将顶点从模型空间转化为视口空间
2)将处理好的顶点数据,发送到曲面细分着色器中,通过增加顶点增加模型的顺滑度
3)将处理好的顶点数据,发送到几何着色器中,通过输入图元的一组顶点数据,生成更多的图元数据
4)将上一步得到的数据从投影坐标系转换到标准设备坐标系中,也就是NDC,转换方式为xyz/w
5)在NDC中对图元进行裁剪
6)将裁减后的图元通过屏幕映射,转换到屏幕坐标系中
曲面细分着色器就是通过顶点数据和相关算法,生成更多的顶点数据,增加顶点减顺滑程度,提升显示的效果
通过将xyz除以w,将投影坐标系下的物体转换到了NDC,也就是标准设备坐标系,也就有了物体在屏幕上的远近,对于正交摄像机,由于所有的物体w值都为1,所以没有近大远小的效果
对NDC标准设备坐标系中的三角形进行裁剪,对于屏幕之外的三角形进行剔除,对于一半处于屏幕之内的三角形,删除屏幕外的顶点,并在屏幕内生成新的顶点
将NDC标准设备坐标系映射到屏幕坐标系中