3D核动力——从显卡看API的发展(下)

硬件时空

虽然DirectX在家用市场全面领先,但在专业绘图领域,OpenGL仍是主角,很多3D图形开发人员都乐意使用开放、先进的OpenGL API,比如NVIDIA的许多经典演示Demo都使用了OpenGL引擎,以展示显卡的最新特性,id Software更是OpenGL标准的坚定不移的支持者,大名鼎鼎的DOOM和Quake系列游戏都见证了一个时代……

高档图形接口——OpenGL

OpenGL(Open Graphics Library)意为“开放的图形程序接口”,它源于SGI公司为图形工作站开发的IRIS GL,后者是一个工业标准的3D图形软件接口,功能虽然强大,但移植性不好。于是,SGI公司便在IRIS GL的基础上进行开发,并在跨平台移植过程中发展成OpenGL。

OpenGL是个与硬件无关的软件接口,可以在不同的平台(如Windows 95、Windows NT、UNIX、Linux、MacOS、OS/2)之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是3D图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS等3D图形设计软件制作的DFX和3DS模型文件转换成OpenGL的顶点数组。

16-d14-3.jpg
OpenGL经典游戏《QUAKE》画面

目前所有3D显卡都支持OpenGL,后者不仅在游戏处理上显示了强大的实力,而且在专业3D设计领域,其价值也得到了最大化的体现。为了更清晰地了解OpenGL,下面我们就来回顾一下它的发展历程。

1. OpenGL 1.0

16-d14-2.jpg

OpenGL由成立于1992年的OpenGL Architecture Review Board(OpenGL架构评估委员会,以下简称ARB)组织管理,ARB成员以投票方式产生标准,并制成规范文档公布,各软硬件厂商据此开发产品。

1992年,SGI公司发布了OpenGL的1.0版本,随后又与微软共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在普通电脑上使用。OpenGL 1.0一经推出便以崭新的理念迅速得到业界的支持,并成为事实上的标准。

2. OpenGL 1.1

1995年OpenGL 1.1版本上市,该版本比1.0的性能有很大提高,并加入了一些新的功能,包括新增了一些在三维图形开发中经常用到的功能,解决了一直困扰着三维图形程序员的问题。

这些新增功能主要分为纹理处理功能(新增纹理格式用于提高纹理使用性能,使得整个纹理场景绘制效率更高)、多边形偏移(Polygon Offset)功能和OpenGL 1.1顶点数组功能。改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标志的传输速度,引入了新的纹理特性等等。Intel 740、Trident 9880、SiS6326、NVIDIA Riva TNT等显卡都支持OpenGL 1.1。

16-d14-4.jpg
支持OpenGL 1.1的i740显卡

小贴士:

微软虽有自家的DirectX,但没有完全排斥OpenGL。随着id公司以OpenGL 3D图形接口开发的《雷神之锤2》游戏在市场上大获成功,微软也加快了对OpenGL“包容”的步伐。微软起先是把OpenGL集成到Windows NT中,后来又把它集成到Windows 95 OSR2(Windows 97)中。到Windows98时代,OpenGL已经成为系统的标准组成部分之一,而且执行性能也得到了相应的优化和提高。

虽然Windows对OpenGL的支持只是基于Direct3D的一个层,实际应用中会涉及转换,但这也使得许多支持OpenGL的电脑3D游戏得到广泛应用,让许多在Windows95平台上运行的3D图形设计软件如AutoCAD R14、3DS MAX R2等也可以运用支持OpenGL标准的3D加速卡来提高它们的3D图形处理速度和普及度。

在Windows平台上,OpenGL驱动主要有两种模式:纯软件和ICD。纯软件模式下,所有渲染操作均由CPU转换完成,速度很慢。ICD(Installable Client Driver,可安装客户端驱动程序)是一个完整的OpenGL驱动模型,它的作用就是让OpenGL程序能利用3D加速卡的硬件资源,实现加速。换言之,只要硬件支持,ICD便可硬件加速整个OpenGL渲染管线(如变换、光照、光栅化等)。现在硬件厂商提供的OpenGL驱动程序都是依照ICD模型开发的。

3. OpenGL 1.2

OpenGL 1.2是1.1的后续扩展程序,对那些采用像素缓存、颜色矩阵和卷积运算的图像操作,其性能有明显提高。支持OpenGL 1.2的显卡包含ATI Radeon8500/9000系列、NVIDIA的GeForce2/GeForce3系列等等。

4. OpenGL 1.3

2001年8月,ARB又发布了OpenGL 1.3规范,它增加了立方纹理贴图(应用于更高质量的环境贴图和光照)、纹理环境、多重采样(独立对点、线和多边形的反锯齿渲染进行排列)、纹理框架压缩(可以在显存中存储更高质量的纹理材质)等扩展指令,但是改进力度不大。

“可以帮助开发人员创造出实时电影般效果”,OpenGL 1.3让GPU能用包括多重纹理、立方体贴图、多样本反锯齿在内的一些特性实现特效,可以更容易地开发出在图像效果和真实性方面更具水准的应用软件。但OpenGL 1.3受到许多方面的限制,尤其是在对接口可编程能力上。

支持OpenGL 1.3的显卡包含ATI Radeon9500/9600/9800/X300/X600系列,NVIDIA的GeForce4 MX/TI系列等等。

5. OpenGL 1.4

2002年7月,ARB正式发布OpenGL 1.4,新版本的性能和功能比1.3版有所增强,仍然保持了完整的向下兼容性。

OpenGL 1.4的新特性有:深度纹理和阴影纹理(允许实时阴影和相关图像渲染)、顶点设计框架(用户可对几何、光照和阴影进行编程)、自动纹理贴图(为动态纹理提供快速升级和高质量纹理过滤),以及用于高几何吞吐量的多重描绘阵列、用于精确2D和图像渲染的窗口光栅定位、用于高级雾化效果的用户定义的雾化坐标、用于柔性阴影和渲染效果的点参数、新型结构缓冲模型和模板功能等。

支持OpenGL 1.4的显卡包含NVIDIA GeForce FX5200/5600/5700/5800/5900系列、Intel GMA900集成显示芯片等。

6. OpenGL 1.5

在OpenGL 1.0推出后的相当长一段时间内,OpenGL唯一的改进就是增加了一些扩展指令集。2003年7月,OpenGL 1.4标准的扩展版本——OpenGL 1.5标准问世了,其功能/性能有了很大提高。OpenGL 1.5新增了OpenGL Shading Language,该语言是OpenGL 2.0的底核,用于着色(Shader)对象、顶点着色及片断着色(Fragment Shader)技术的扩展功能。

16-d14-7.jpg
代号为NV43的GF6600支持OpenGL 1.5

此外,OpenGL 1.5的新功能还包含顶点Buffer Object(进行顶点配列方式以提高透视性能)、Shadow功能(用于比较Shadow映射的函数)、隐蔽查询(为提高Curling性能采用非同步隐蔽测试)、非乘方纹理(提高多纹理映射等纹理内存的使用效率)等。

支持OpenGL 1.5的显卡包含NVIDIA GeForce6系列、ATI Radeon X700/X800系列等等。

7. OpenGL 2.0

2004年8月,OpenGL发展历史中最引人注目的OpenGL 2.0被推出,3Dlabs在新的OpenGL2.0中增加了不少新的特性。最重要的更新是加入了可编程特性,提高了对时间和内存的控制,提高了系统的性能。另外一个更为重要的方面是,OpenGL 2.0是完全独立于硬件平台的,而且在兼容OpenGL 1.x标准的同时,提供了更加出色的处理性能。

OpenGL 2.0通过为图形处理器提供可编程特性,为显卡领域带来了一场革命,并且在创建实时3D图形上跨出了重要的一步。OpenGL 2.0的重大改进表现在以下几个方面:

(1)彻底精简复杂的核心;(2)完全的硬件可编程能力;(3)改进内存管理机制、支持高级像素处理;(4)扩展到数字媒体领域,跨越高端图形和多媒体范畴;(5)支持嵌入式图形应用。

可编程顶点处理、可编程片段处理、可编程图像格式是OpenGL 2.0的关键功能。除了内置完整的顶点着色和像素着色语言之外,还支持可编程着色、单次多目标渲染、Point Sprites等。

16-d14-8.jpg
首款支持OpenGL 2.0的PC游戏《21世纪海盗》

许多硬件制造商和软件商在全力支持DirectX的同时,也大力支持OpenGL 2.0,因为OpenGL 2.0标准同样能够对图像处理提供更好的支持。支持OpenGL 2.0的显卡包含NVIDIA GeForce7系列、ATI Radeon X1000系列等。

8. OpenGL 2.1

OpenGL2.1与当前的2.0版本相比,虽然版本号变更不如DX9到DX10那么巨大,但它却增加了多项实用的技术和功能。比如,优化GPU和显存的并行工作效率,提高像素缓冲利用率;增加标准彩色图像质感和sRGB色彩空间应用的灵活性;增加了许多Shader弹性调配机制。

支持OpenGL 2.1的显卡包含NVIDIA G80(GeForce8)系列、ATI R600系列等。

写在最后

随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,虽然在新的OpenGL 2.0/2.1版本中出现了很多类似于DirectX中可编程单元的设计,但用户的认知程度并不高,未来OpenGL发展前景并非一片光明。

除DirectX、OpenGL等主流API外,市场上还曾出现过Autodesk Heidi(QuickDraw 3D)、PowerSGL(NEC PowerVR系列芯片的专用程序接口)等API,但它们并没在市场上流行开来,由于篇幅所限,笔者就不再介绍了。