计算机图形学故事:固定管线这个名字是怎么来的?

前言

在大部分中文图形学教程中,固定管线都被这样子描述:固定渲染管线,作为早期的渲染方式,通过一系列固定的操作将三维物体投影到二维屏幕上。

也有开发者这样子描述:固定管线其实就是使用的0号着色器。(具体实现可能是这样子,但这只能认为是特例,故这种说法并不严谨)

还有开发者这样子描述:固定管线就是只能调参数不能修改底层代码的渲染架构。

那么,固定管线到底是什么意思呢?

图像计算:从纯CPU图形计算到图形加速卡

在渲染技术发展的早期,所有的图像计算都由CPU独立完成,早期显卡主要是把数字图像信号转化为可被显示器接受的模拟信号,而不参与任何计算。然而,CPU图像计算难以满足日益增强的可视化软件发展的要求。在个人电脑领域,1991年,S3 Graphics发布的P86C911改变了这一局面。P86C911能够加速Windows操作系统中的线条绘制、矩形填充以及光栅操作,同时支持高达1MB的显存和16位色深。被认为是世界上第一款2D图形加速卡的P86C911正式开启了2D图形硬件加速时代。随之而来的是1991年到1995年的CPU-图形加速卡在图像计算上的权力交接。1995年,使用图形加速卡来计算2D图形已经成为了主流。而1996年发布的3dfx Voodoo Graphics,则开启了3D图形加速卡的时代。

使用3dfx Voodoo Graphics的渲染流程大概是这样子的:

  1. CPU完成顶点变换,图元组装和光照计算(基于Gouraud的局部光照)。
  2. 3dfx Voodoo Graphics完成光栅化并写入2D图形加速卡的帧缓冲区,光栅化过程中高效地实现了纹理映射和镜面高光等技术。
  3. 3dfx Voodoo Graphics完成透明度测试。
  4. 3dfx Voodoo Graphics完成深度计算和深度测试并在后续阶段写入2D图形加速卡的深度缓冲区。
  5. 3dfx Voodoo Graphics完成混合等后续阶段(硬件雾化也在该阶段由3dfx Voodoo Graphics完成)。
  6. 2D图形加速卡输出给显示器

等到了1999年,我们熟悉的GPU才被英伟达发明。世界上第一款GPU GeForce 256集成了顶点变换、图元组装和光照计算等重要渲染流程(注意:这是在个人电脑领域最早的L&T固定功能硬件,但在图形工作站上,1982年就有这种硬件了)。而到了2001年,英伟达发布了世界上第一款支持可编程顶点着色器的GPU显卡GeForce 3. 至此,图形渲染的‘可编程’时代拉开了序幕。那么,在可编程时代到来之前,那种由一系列基于专门的硬件实现的固定流程组成的渲染体系,就被开发者们追溯性地称为——“固定管线”。

事实上,现代GPU内依旧有图像计算专用的固定功能硬件,例如专门的光栅化器等,但是更多的已经消失,比如专门L&T器已经消失,L&T过程融入可编程着色器核心体系了。

固定管线

所谓“管线”,本义指运输流体管道,在计算机科学中被抽象为“数据流处理器”。首先,Fixed-function pipeline 固定管线这个词的诞生时间肯定远远晚于固定管线架构的诞生时间,因为“固定管线”是相对“可编程管线”而言的。所谓固定管线,其实并没有公认的定义,连提出者都尚不清楚,不妨可以这样子定义:历史上基于固定功能硬件设计的渲染管线称为固定管线。

值得注意的是,尽管“管线”一词常常出现在硬件领域,但固定管线的管线是指抽象的“数据流处理器”,而“器”既可能是硬件,也可能是软件,同时,这个管线是多阶段的,就像水管一样,可以很多很多段水管拼接在一起,组成一个更长的水管,渲染管线也是一个由多个小管线组成的大管线。

固定管线(Fixed-function pipeline),直译为固定功能管线,固定功能一词则来源于“固定功能硬件”,而“固定功能硬件”常常是指二十世纪90年代到二十一世纪初显卡上的图形计算硬件。这些硬件主要集成了光栅化等各种图像计算功能,通过强大的并行计算电路,不仅极大地减轻了CPU的工作负担,而且为渲染质量的快速进步奠定了基础。

注意:固定管线更多地是一个技术性术语而非学术性术语,而且是一个出现时间相当晚的术语。事实上,现代GPU内依旧有图像计算专用的固定功能硬件,例如专门的光栅化器等。

OpenGL的固定管线模式

OpenGL规范的第一个发布版本OpenGL1.0于1992年正式发布,在这个时候,世界上第一个2D图形加速卡才刚刚诞生不久,而GPU更是连影子都没有。我们都知道,OpenGL1.0确实包含顶点变换、图元组装和光照计算等功能。但这个时候还没有GPU,因此这些工作一般由CPU+固定功能硬件完成。以Windows中最早(1995年)支持OpenGL1.0的Windows NT 3.51为例,在调用固定管线功能时,会先检测是否有支持该功能的硬件,如果有,使用硬件加速,如果没有,使用纯软件计算。而等到GPU诞生之后,这些功能才被迁移到GPU上。而等到可编程渲染管线出现后,OpenGL中的固定管线一般就被设计成了默认着色器的形式。

我们都知道,OpenGL只是一个规范,具体实现由驱动负责。所以,今天,当你的个人电脑上使用OpenGL固定管线模式编写并运行渲染程序时,图形计算既不运行在CPU上(除非你写软渲染器,⑧抬杆),也不运行在固定功能硬件上,而是运行在GPU上。

我们刚刚讲到,固定管线的管线(整个大管线由多个小管线组成)即可以是软件,也可以是硬件,在这个例子中应该就体现的很好。总之,OpenGL固定管线模式经历了一个从CPU+固定功能硬件到GPU的演变过程,而在今天,如果你用纯CPU计算的方式实现了一个符合OpenGL1.0的图形库,我认为他也可以叫采用了OpenGL固定管线模式。但我不认为这可以叫做固定管线,尽管有人也用固定管线指代固定管线模式。

Wiki上的描述

In computer graphics, fixed-function is a term primarily used to describe 3D graphics APIs and GPUs designed prior to the advent of programmable shaders. The term is also used to describe APIs and graphics pipelines that do not allow users to change its underlying processing techniques, hence the word ‘fixed’. Fixed-function can also refer to graphics processing techniques that employ non-programmable dedicated hardware, like the use of ROPs to rasterize an image.

补充:图形工作站

图形工作站是一种专门用于图形计算的计算机,可能是专用计算机,也可能是通用计算机。在图形工作站上,固定功能硬件出现得更早,比如在1992年OpenGL1.0的最早的实现就运行在SGI的工作站上。而OpenGL1.0的前身IRIS GL的实现这运行在更早期的图形工作站上。1981年SGI创始人吉姆·克拉克发明的几何发生器,可能是最早的图形计算固定功能硬件,他能进行顶点变换的加速。而SGI于1982年制造的Geometry Engine(具有顶点变换和光照计算功能)等硬件为高性能3D图形计算奠定了基础。

补充:GeForce 256 和 现代通用GPU

虽然GeForce 256被英伟达定义为第一款GPU,但是GeForce 256并没有通用计算功能,依旧是固定功能硬件。直到2007年发布的GeForce 8800 GTX才允许程序员用c语言变体来绕过图形API直接控制GPU中的计算单元。值得注意的,现代GPU内依然有专门用于图像计算的固定功能硬件,比如专门的光栅化器等,这些固定功能硬件几乎不能通过CUDA等平台调用,理论上讲你可以编写汇编代码走PCI总线去调用这些固定功能硬件,不过在不知道通信协议的情况下,这几乎是不可行的。

评论区

评论列表

正在加载评论...