首页 >> 大全

「图形基础」笔记2. 图形处理单元GPU

2023-11-25 大全 26 作者:考证青年

图形处理单元The Unit

硬件图形加速一开始用于管线的尾端,用于执行三角形扫描线的光栅化,然后慢慢扩展到更高层的应用程序阶段。专用硬件相对于软件的优势仅仅是速度,但速度至关重要。

创造了GPU这一术语,以此区别与之前只有光栅化功能的芯片,这是一个分界线。从此,GPU从可配置的复杂固定功能的管线逐渐演变为高度可编程的“白板”,开发者可以在其上实现自己的算法了。

各种可编程着色器是控制GPU的主要手段。

顶点着色器允许在每个顶点上执行各种操作(包括转换和变形)。

像素着色器处理单个像素,允许对每个像素计算复杂的着色方程。

几何着色器允许GPU创建和销毁飞速写入的几何图元(点、线、三角形)。计算得到的数据可以被写入多个高精度缓冲区,并作为顶点或纹理数据复用。

为提高效率,管线的某些部分仍然是可配置的,不是可编程的,但大体趋势是可编程和更灵活。

1. GPU管线概述

几何阶段与光栅化阶段都是分为几个具有不同程度的可配置性和可编程性的硬件阶段。

下图用不同的颜色表示了几何阶段和光栅阶段中每个子阶段的可编程或可配置性。

图1

顶点着色器是一个完全可编程的阶段,通常用于实现“模型和视图转换”、“顶点着色”和“投影”这几个功能阶段。

几何着色器是一个可选的,完全可编程的阶段,主要对图元(点、线、三角形)的顶点进行操作。它可以用来执行逐图元的着色操作,销毁图元或者创建新的图元。

裁剪、屏幕映射、三角形设置和三角形遍历阶段都是固定功能阶段,实现同名的功能阶段的功能。

像顶点着色器和几何着色器一样,像素着色器也是完全可编程的,用来实现“像素着色”这一功能阶段。

最后,合并阶段介于完全可编程的着色器阶段和其他固定功能的阶段之间。虽然它是不可编程的,它是高度可配置,可以被设置去执行各种各样的操作。当然,它实现了“合并”这一功能阶段,负责修改颜色缓冲区,Z缓冲区,交融缓冲区,模板缓冲区,和其他相关的缓冲区。

图形处理单元(gpu)__图形图像处理笔记

随着时间的推移,GPU管线已经远离硬编码的运算操作,而朝着提高灵活性和控制性改进。编程着色器的引入是这个进化的最重要的一步。

2. 可编程着色阶段

现代着色器阶段(例如,支持 Model 4.0的 10以及以后)使用通用着色器核心(- core)。这是说顶点,像素和几何着色器共享一个编程模型。

我们使用类似C语言的着色器语言来进行着色器的编程,如HLSL,Cg和GLSL,这些程序被编译成机器无关的汇编语言,也称为中间语言(IL, )。之前的着色器模型允许直接使用汇编语言编程,但是在 10上汇编语言仅可做为调试输出使用。这些汇编语言在单独的阶段,通常是在驱动中,被转化成实际的机器语言。这样的安排可以兼容不同的硬件实现。这些汇编语言可以被看做是定义一个作为着色语言编译器的虚拟机。

这个虚拟机是一个处理多种类型寄存器和数据源、预编了一系列指令的处理器。由于很多图形操作使用短向量(最长4个分量),所以该处理器包含了4路SIMD(单指令多数据流),每个寄存器都包含4个独立的值。32位的单精度浮点数的标量和向量是基本的数据类型,对32位整数的支持是最近才被加上的。浮点向量通常包含的数据有位置(xyzw),法线,矩阵行,颜色(rgba)和纹理坐标(uvwq)。整数通常被用于计数器,索引以及位掩码(bit mask),也支持聚合的数据类型如结构体,数组以及矩阵。而为了便于使用向量,向量操作如调和(,也就是向量分量的重新排序或复制),和掩码(,只使用指定的矢量元素),也是支持的。

绘制调用是指调用图形API来绘制一组图元,这会驱使图形管线的运行。每个可编程着色阶段拥有两种类型的输入:

纹理是一类特殊的输入,曾经一直是一张贴在表面的彩色图片,但现在可以认为是任意存储着大量数据的数组。需要强调的是,尽管着色器有各种各样的输入,可以使用不同的方式进行处理,但输出却被严格限制,这也是着色器与通用处理器执行程序的最大不同。

底层虚拟机给不同类型的输入输出提供了特殊的寄存器,输入只能通过只读常量寄存器或常量缓冲区来访问,这也是为什么在整个绘制调用期间它们的值是不变的。可用的常量寄存器的数量远大于用于输入输出的寄存器数量。这是因为的输入输出需要单独存储每个顶点和像素,而类型的输入只被存储一次,且在整个绘制调用期间被所有的顶点和像素复用。该虚拟机也包含了通用功能的临时寄存器,被用作暂存空间( space),所有类型的寄存器都可以在临时寄存器中使用整数进行数组索引。着色器虚拟机的输入和输出如下图所示。

图2

图形计算中的常见操作在现代GPU上执行速度非常快。通常情况下,最快的操作是标量和向量的乘法,加法以及他们的组合,如乘加运算(-add)和点积运算(dot-)。其它操作如取倒数,平方根,sin,cos,指数以及对数往往会稍微贵一点,但依然很速。纹理操作是高效的,但是他们的性能可能受到诸如等待检索结果的时间等因素的限制。着色语言使用类似于 *和+的操作符来表示常用操作(如加法和乘法),其它操作使用固有函数( )的方式来表示,如atan(), dot(),log()等等。对于更复杂的操作,例如向量归一化和反射,叉积,矩阵转置,以及求行列式等,也用固有函数来表示。

流控制(flow )这个术语是指使用分支指令来改变代码执行流程的操作。这些指令用于实现高级语言结构,如“if”和“case”语句,以及各种类型的循环。着色器支持两种类型的流控制:

评估一个着色器的性能,要看其在一段时间内处理顶点或像素的个数。如果流对某些元素选择“if”分支,而对其他元素选择“else”分支,那么对于所有元素,两个分支都必须进行评估(未使用的分支将被丢弃)。

着色器程序可以在程序加载或运行时离线编译。和任何编译器一样,有生成不同输出文件和使用不同优化级别的选项。一个编译过的着色器被存储为为字符串或者文本,并通过驱动程序传递给GPU。

3. 可编程着色的演变

可编程着色的框架的思想可以追溯到1984年Cook的着色树(shade tree)[1]。

一个简单的铜着色器的着色树和其对应的着色语言代码如下图所示。

图3

_图形处理单元(gpu)_图形图像处理笔记

着色语言( )是从80年代中后期根据这个可编程着色的框架思想开发出来的,目前仍然广泛运用于电影制作的渲染中。在GPU原生支持可编程着色之前,有一些通过多个渲染通道实现实时可编程着色的尝试。

着色模型对比

下表比较了各种着色模型的能力。在这个表格中,“VS”代表顶点着色器和“PS”代表像素着色器(而SM 4.0 引入了几何着色器,其能力与顶点着色相似)。如果没有出现“VS”和“PS”,那么该行适用于顶点和像素着色器。

表1

4. 顶点着色器

顶点着色器( )是完全可编程的阶段,是专门处理传入的顶点信息的着色器,顶点着色器可以对每个顶点进行诸如变换和变形在内的很多操作。

顶点着色器是功能管线上的第一个阶段,虽然是进行任何图形处理的第一个阶段,但其实一些数据操作在这个阶段之前就发生了。在所称的输入装配(input )的阶段,会将一些数据流组织在一起,形成顶点和基元的集合,发送到管线。例如一个物体可以由一个位置数组和颜色数组表示。输入装配将通过创建具有位置和颜色的顶点来创建这个物体的三角形(或线、点)。第二个对象可以使用相同的位置数组(连同不同的模型转换矩阵)和不同的颜色数组来表示。这允许一个物体被绘制多次,每个实例有一些不同的数据,所有这些都只需一次调用。 10中的输入装配还对每个实例、图元和顶点加上一个标识符号,该标识符号可以被任何后续的着色器阶段访问。对于早期的着色器模型,必须将这些数据显式地添加到模型中。

三角形网格由一组顶点和附加信息描述,这些信息描述顶点如何形成三角形。顶点着色器是处理三角形网格的第一阶段。描述三角形成的附加数据对于顶点着色器来说是没什么用的;顾名思义,顶点着色器只处理传入的顶点。一般来说,顶点着色器提供了一种修改、创建或忽略与每个多边形顶点相关的值的方法,比如它的颜色、法线、纹理坐标和位置。通常顶点着色器程序将顶点从模型空间(Model Space)转换到齐次裁剪空间( Clip Space);至少,顶点着色器必须始终输出此变换位置。

顶点着色器在2001年首次由 8引入。由于是管线的第一个阶段,调用相对较少,因此可以选择在GPU还是CPU上实现。如果在CPU上实现最后依然需要将输出数据送到GPU进行光栅化。这使得从旧硬件到新硬件到转换只是速度问题而不是功能性问题。目前几乎所有的GPU都支持顶点着色。

顶点着色器本身与通用核心虚拟机( Core )非常相似。传入的每个顶点由顶点着色器程序处理,然后输出一些在三角形或直线上进行插值后获得的值。顶点着色器既不能创建也不能消除顶点,并且由一个顶点生成的结果不能传递到另一个顶点。由于每个顶点都被独立处理,所以GPU上的任何数量的着色器处理器都可以并行地应用到传入的顶点流上。

接下来的章节将会解释一些顶点着色器的效果,比如阴影体的创建,动画的顶点混合和剪影渲染。顶点着色器的其他用途包括:

下图是使用顶点着色器产生变形的例子:

图4

左图,一个普通茶壶。中图,经过顶点着色程序执行的简单剪切(shear)操作产生的茶壶。右图,通过噪声(noise)产生的发生形变的茶壶。

顶点着色器的输出可以以许多不同的方式来使用,通常是随后用于每个实例三角形的生成和光栅化,然后各个像素片段被发送到像素着色器,以便继续处理。而在SM 4.0中,数据也可以发送到几何着色器( )或输出流( )或同时发送到像素着色器和几何着色器两者中。

5. 几何着色器

几何着色器随着2006年底 10的发布被加入到硬件加速图形管线中。它位于管线中的顶点着色器之后,是可选的。几何着色器作为SM 4.0的一部分,并不能用于早期的着色模型(

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了