您的位置:首页 > 其它

Shader入门理论(二)渲染流水线之GPU

2018-03-28 18:03 274 查看

 GPU流水线

当GPU从CPU那里得到渲染命令后,就会进行一系列操作,最终把图元渲染到屏幕上
几何和阶段光栅化阶段可以分为若干更小的流水线阶段,这些流水线阶段由GPU来实现,每个阶段gpu提供了不同的可配置性或可编程性



从图中可以看出GPU的渲染流水线接收顶点数据作为输入。这些顶点数据是由应用阶段加载到显存中的,再由DrawCall指定的。这些数据随后被传递给顶点着色器。

几何阶段:

顶点着色器 是完全可编程的,他通常用于实现顶点的空间变换,顶点着色等功能。 是流水线的第一个阶段,他的输入来自于CPU。顶点着色器的处理单位是顶点,也就是说输入进来的每个顶点都会调用一次顶点着色器,顶点着色器本身不可以创建或者销毁任何顶点,而且无法得到顶点与顶点之间的联系。这一阶段的处理速度很快。顶点着色器需要完成的工作主要有:坐标变换和逐顶点光照,除此顶点着色器还要输出后续阶段所需要的数据



坐标变换。 顾名思义,就是对顶点的位置坐标进行某种变换,在顶点动画中是非常有用的。例如我们可以通过改变顶点位置来模拟水面,布料等,一个最基本的顶点着色器必须完成的任务就是把顶点坐标从模型空间转换到齐次裁剪空间。
o.pos = mul(UNITY_MVP, v.position);
类似上面的代码就是把顶点坐标转换到齐次裁剪坐标系下,接着通常再由硬件做透视除法后,最终得到归一化的设备坐标。过程如图



曲面细分着色器: 可选的着色器,用于细分图元。
几何着色器:也是一个可选的着色器,他可以被用于执行逐图元的着色操作,或者被用于产生更多的图元
裁剪:这一阶段的目的是将那些不在摄像机视野内 的顶点裁减掉,并剔除某些三角图元的面片
一个图元跟摄像机的关系有三种:完全在视野内,部分在视野内,完全在视野外,完全在视野内的就会传递给下一阶段,完全在视野外的不需要渲染不予理睬,而那些部分在视野内的就需要做一个处理,这就是裁剪



屏幕映射:这一阶段是不可配置和编程的,他负责把每个图元的坐标转换到屏幕坐标系中



光栅化阶段:

三角形设置三角形遍历阶段也都是固定函数,



接下来的片元着色器则是完全可编程的,用于实现逐片元的着色操作。





最后逐片元操作阶段负责执行很多重要的操作,例如修改颜色,深度缓冲,进行混合等,他是不可编程的但有很高的可配置性













此部分关于理论的太多又不想删去,就直接截图记录作者的本意。
----------------------------------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: