您当前的位置: 首页 > 

幻世界

暂无认证

  • 0浏览

    0关注

    237博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Shader理论《二》GPU流水线之几何阶段

幻世界 发布时间:2020-06-28 16:44:47 ,浏览量:0

欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群,行业纵横颇多,每个人精通领域各异,旨在交流,

接上篇博客。

GPU流水线

当GPU从CPU那里得到渲染命令后,就会进行一系列操作,最终把图元渲染到屏幕上

几何和阶段光栅化阶段可以分为若干更小的流水线阶段,这些流水线阶段由GPU来实现,每个阶段gpu提供了不同的可配置性或可编程性,如下图从图中可以看出GPU的渲染流水线接收顶点数据作为输入。这些顶点数据是由应用阶段加载到显存中的,再由DrawCall指定的。这些数据随后被传递给顶点着色器。

几何阶段:

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

坐标变换。 顾名思义,就是对顶点的位置坐标进行某种变换,在顶点动画中是非常有用的。例如我们可以通过改变顶点位置来模拟水面,布料等,一个最基本的顶点着色器必须完成的任务就是把顶点坐标从模型空间转换到齐次裁剪空间。

o.vertex= UnityObjectToClipPos(v.vertex)

类似上面的代码就是把顶点坐标转换到齐次裁剪坐标系下,接着通常再由硬件做透视除法后,最终得到归一化的设备坐标。过程如图

曲面细分着色器: 可选的着色器,用于细分图元。

几何着色器:也是一个可选的着色器,他可以被用于执行逐图元的着色操作,或者被用于产生更多的图元

裁剪:这一阶段的目的是将那些不在摄像机视野内 的顶点裁减掉,并剔除某些三角图元的面片

一个图元跟摄像机的关系有三种:完全在视野内,部分在视野内,完全在视野外,完全在视野内的就会传递给下一阶段,完全在视野外的不需要渲染不予理睬,而那些部分在视野内的就需要做一个处理,这就是裁剪;与顶点着色器不同,这一步是不可编程 的,即我们无法通过编程来控制裁剪的过程,而是硬件上的固定操作,但我们可以定义一个裁剪操作来对这一步骤进行配置

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

这一步骤输入的坐标仍然是三维坐标系下的坐标,屏幕映射的任务是吧每个图元的x和y坐标转换到屏幕坐标系下,屏幕坐标系是一个二维坐标系,他和我们用于显示画面的分辨率有很大关系。

假设我们需要把一个场景渲染到一个窗口上,窗口的范围是从最小的窗口坐标(x1,y1)到最大的坐标(x2,y2),在窗口坐标变化的时候其实也就是一个缩放的过程,在此过程中屏幕映射不会对输入的z坐标做任何处理。实际上屏幕坐标和z坐标构成了一个新的坐标系叫做窗口坐标系。这些值会一起被传递到光栅化阶段。屏幕映射得到的屏幕坐标决定了这个顶点对应屏幕上哪个像素以及距离这个像素有多远。

注意:屏幕坐标系在OpenGL和DirectX之间是存在差异的,OpenGL把屏幕左下角当成最小的窗口坐标值,而DirectX则定义了屏幕左上角为窗口的最小坐标值

欢迎加入Unity业内qq交流群:956187480

qq扫描二维码加群,行业纵横颇多,每个人精通领域各异,旨在交流,

关注
打赏
1660704426
查看更多评论
立即登录/注册

微信扫码登录

0.0392s