渲染管线有什么作用?流程是什么?

渲染管线也称为渲染流水线或像素流水线或像素管线,是显示芯片内部处理图形信号相互独立的的并行处理单元。在某种程度上可以把渲染管线比喻为工厂里面常见的各种生产流水线,工厂里的生产流水线是为了提高产品的生产能力和效率,而渲染管线则是提高显卡的工作能力和效率。

渲染管线的数量一般是以像素渲染流水线的数量×每管线的纹理单元数量来表示。

渲染管线的数量是决定显示芯片性能和档次的最重要的参数之一,在相同的显卡核下,更多的渲染管线也就意味着更大的像素填充率和纹理填充率,从显卡的渲染管线数量上可以大致判断出显卡的性能高低档次。但显卡性能并不仅仅只是取决于渲染管线的数量,同时还取决于显示核心架构、渲染管线的的执行效率、顶点着色单元的数量以及显卡的核心频率和显存频率等等方面。一般来说在相同的显示核心架构下,渲染管线越多也就意味着性能越高。

渲染管线流程作用:输入3D模型,输出2D图片。

顶点处理,面处理,光栅化,像素处理

顶点处理:进行坐标变换和光照计算。生成可用于渲染到投影空间的顶点坐标、颜色、纹理坐标。通过一系列的坐标系转换,将模型的顶点在摄像机前进行位移,并最终投影到摄像机的投影屏幕上。顶点变换这一阶段包括顶点的坐标变换、逐顶点雾化、材质属性和光照属性处理。


本地坐标系:以模型自己为中心。比如旋转、胳膊的摆动,等是以本地坐标系为参考。

观察坐标系:以摄像机作为原点。

观察坐标系转投影坐标系:将每个物体模型的位置从观察者所在的坐标体系中,转到观察者投影平面上。


面处理(通常引擎处理)

包括 面组装 面截取 面剔除

面组装:

通常采用Triangle Strip

面截取:摄像机视角以外的顶点将被截取掉。

面剔除

1.求法线判断正反面 法线:面的两个向量相乘 结果是与该两个向量垂直的,也就是这个面的法线。

2.视锥剔除:去掉在视锥外的面的部分。(就是距离镜头特别近的和距离镜头特别远的。

判断方法:每个物体都有一个距离摄像机距离的Z值。通过硬件提供的深度缓存(Depth Buffer或者Z-Buffer)来判断。


3.遮挡剔除:去掉在覆盖在其他面后面的面的部分。也需要深度缓存的支持。(深度缓存其实就是一张0-255的图层,每渲染一个像素都会进行当前像素深度值的检测,如果当前像素的深度值小于已经存储的深度值,说明这个像素更靠近摄像头,会把后面的遮盖住,这时候更新深度值为该像素。

光栅化:以向量为基本结构的面转换成一个个点阵形式的像素。

像素处理:对每个像素区域进行着色,对像素贴上贴图。输入:像素的位置、深度、贴图坐标、法线、切线、颜色等。输出是每个像素的颜色、透明度。

完整流程:


所有的渲染管线工作都是在GPU中进行,结果放在显存中,GPU每次输出一个颜色值,放在显存里,显存有交换链,显存每次输出一帧,后面一帧进行运算绘制,前面一帧显示完,后面一帧绘制完,进行交换,前面一帧缓存清空,再进行绘制。


固定管线:DX提供的渲染流程很多地方没办法加入自己的算法

可编程管线:Shader 可以加入自己的算法


来源:CSDN(博主Vermouthstx),百度百科
https://blog.csdn.net/Vermouthstx/article/details/79901580
https://baike.baidu.com/item/%E6%B8%B2%E6%9F%93%E7%AE%A1%E7%BA%BF/2297474

推荐阅读