渲染流水线
说到流水线,大家可能会想到做工厂中生产物品的流水线工程。举一个例子,大家就会深刻的理解。
炒一份蛋炒饭可能需要经过:准备食材5分钟、炒饭5分钟、打包5分钟。总计15分钟。如果炒100份饭的话,可能会需要1500分钟,为了缩减时间,我们就提出了流水线的方法:将这三个步骤独立出来,就是准备3个人,路人甲负责准备食材、路人乙负责炒饭、路人丙负责打包。
所以说总结一点就是:流水线可以缩短需要批量流程(如炒饭等)的时间。
那么渲染流水线是什么呢?
答:批量生成一张张图像(最终呈现在屏幕上)的流程。
我们主要学习的就是如何生成一张图片的详细过程。
类比炒饭:准备那些食材,怎么炒饭、怎么打包?
渲染流程:如何生成一张图像,图像中的颜色如何设置等等。
渲染流水线的工作任务:从一个三维场景出发,生成(或者说渲染)一张二维图像。
👀️ 理解
CPU获取场景中模型的顶点数据(坐标)、纹理(映射顶点的颜色)等
CPU将获取的信息传递给GPU(调用Draw Call),通过GPU渲染到屏幕上。
渲染流程的三个阶段
渲染流程:应用、几何、光栅栏
应用:我们要摄像机照射到的区域里所有物体的信息。将这些信息转化为一个个的点、线、三角面等。
几何:处理这些顶点
光栅栏:上色
顶点着色器
CPU传过来模型的顶点信息Vector3[] vertices;
遍历这个vertices数组
GPU实际上不会如下面的代码一步一步的执行,而是所有顶点并行执行。(可以理解为开启多个线程)
for(int i = 0; i < vertices.Length; i++){
// 调用顶点着色器,将一个顶点的位置传入
DrawVert(vertices[i]);
}
而顶点着色器会会处理这个顶点
让这个顶点进行坐标变换(将顶点坐标从模型空间转换到齐次裁剪空间)
让这个顶底沐浴光照(逐顶点光照)
片元作色器
对一个片元进行着色。
有一个数组,存放的是一个片元里面的所有像素插值。
而片元着色器是对每一个像素插值进行处理
评论区