图形渲染管线

什么是渲染流水线

在概念上可分为三个阶段:1.应用阶段;2.几何阶段;3.光栅化

应用阶段:(开发者主导)场景数据,摄像机位置、模型、光源等,做一些粗粒度的剔除优化,设置每个物体的渲染状态,但最重要的输出渲染所需的几何信息(点、线、三角面等)即渲染图元,传递到下一阶段几何阶段

渲染起点是CPU,应用阶段可分为三个阶段:

  1. 数据加载到显存,渲染的所有数据加载到内存,再把网格、纹理等数据加载到显存(VRAM)。

  2. 设置渲染状态,定义如何渲染。使用的那个着色器、光源属性、材质等。

  3. 调用Draw Call ,发起方CPU,接收方GPU,命令只指向一个需要被渲染的图元列表,不包含其他材质信息。

几何阶段:处理需要绘制的几何信息,需要绘制那些、如何绘制、在哪绘制。负责处理图元,进行逐顶点、逐多边形、空间转换等操作。输出屏幕空间的二维顶点左边信息、每个顶点对应的深度值、着色等信息,传递给下一阶段。

光栅化阶段:处理上一阶段传递的数据来产生屏幕上的像素,并渲染出最终的图像,决定每个图元中的那些像素会被渲染,对上一阶段得到的逐顶点进行插值,然后再进行逐像素处理(两个重要的目标:计算每个图元覆盖了那些像素,以及计算这些像素的颜色)。

GPU流水线

GPU得到CPU发送的渲染命令后,会进行一些列流水线操作,把图元渲染到屏幕。几何阶段和光栅化阶段都是GPU承载,分为若干个细小的流水线,提供了不同的可配置性和可编程性。

顶点数据为输入,应用阶段加载到显存,再有Draw Call 指定。

  • 顶点着色器(Vertex Shader):完全可编程,实现(模型在不同空间下的坐标)顶点空间变化、顶点着色;每输入一个顶点就会调用一次顶点着色器,无法得到顶点与顶点间的关系,顶点间相互独立性,主要工作:顶点坐标转换(最基本的转换:模型空间到齐裁剪空间,硬件再做透视除法,最终得到归一化设备左边NDC(Normalized Device Coordinates))和逐顶点光照、计算顶点颜色过程等。确定模型上顶点处材质的光照效果。
  • 曲面细分着色器:可选着色器,细分表面;
  • 几何着色器:可选着色器,逐图元着色操作或产生更多的图元---表面细分。
  • 投影正交投影和透视投影---->将模型从三维投射到二维空间转换的过程,将视体变换到一个对角顶点分别是(-1,-1,-1)和(1,1,1)单位立方体内,这个单位立方体通常也被称为规范立方体。
  • 裁剪:剔除不在摄像机视野内的顶点裁剪掉,剔除三角图元的片面,可配置---自定义裁剪平面。
  • 屏幕映射:图元的坐标转换到屏幕坐标系中。不可配置和编程,决定了顶点对应屏幕的位置以及距离这个像素有多远(-1,1)。OpenGL左下的坐标系,Directx左上的坐标系,注意图像的翻转。

  • 三角形设置和遍历是固定函数(Fixed-Function)的阶段。计算三角网格的边界数据的过程,遍历检查每个像素是否被一个三角网格所覆盖,如果覆盖则生成一个片元(fragment)----包含了多种状态:屏幕坐标、深度信息、法线、纹理坐标等,最后输出得到一个片元序列。
  • 片元着色器:可编程,逐片元着色的操作。并不会影响每个像素的颜色值,而是计算后得到一些列的数据来描述一个三角网格(一个片元)如何覆盖像素的,存储这些数据,传递给下一个阶段
  • 逐片元操作:(输出合并)修改颜色、深度缓冲、混合等,不可编程,高配置性。1.决定每个片元的可见性(比较像素的Z值和Z缓冲区中的Z值);深度测试、模板测试。2.如果一个片元通过了所有测试,需要把这个片元的颜色值和以存储在颜色缓冲区中的颜色进行合并(混合)得到最终的颜色

补充

1.为了避免看到正在进行光栅化的图元,GPU使用双重缓冲策略,场景的渲染是在幕后发生的,即后置缓冲,渲染到后置缓冲后,交换前置缓冲中的内容,而前置缓冲是之前显示在屏幕的图像。

2.

3.DrawCall

CPU和GPU之间使用命令缓冲区(Command Buffer)实现高效率的工作。

过多的Draw Call 会导致CPU花费大量的时间在提交命令上,而GPU则可能处于空闲状态。

减少的方式批处理:多个Draw Call合并为一个。

4.固定渲染流水线---兼容旧设备,舍弃。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>