现在,我们来看看这个话题:
显示卡的性能与API的关系--OpenGL篇
如上所说,许多人也许并不知道OpenGL,OpenGL是做什么用的。实际上,在上世纪90年代,OpenGL可谓大名鼎鼎,如雷贯耳,那时候微软的DirectX还刚刚出现,功能远不能与OpenGL相比,只不过由于自身原因,OpenGL慢慢走向沉默。今天我们将为你详细讲述OpenGL及OpenGL的发展。
OpenGL实际上是一种3D程序接口(即我们常说的3D
API),它是3D加速卡硬件和3D图形应用程序之间一座非常重要的沟通桥梁。也可以说,OpenGL是一个功能强大,调用方便的底层3D图形库。遗憾的是,由于平台的局限性等原因,D3D应用至今仍主要集中于游戏和多媒体方面,在专业高端绘图应用方面,老牌的3D
API—OpenGL仍是主角。
将OpenGL称之为SGI的OpenGL毫不为过,它源于SGI公司为其图形工作站开发的IRIS
GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的独立财团OpenGL
Architecture Review Board
(ARB)控制。SGI等ARB成员以投票方式产生标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL,现在的ARB投票成员包括SGI、Intel、IBM、nVIDIA、ATi、Microsoft、Apple、3DLabs等业界群英。
OpenGL的发展历程
OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS
GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open
Graphics
Library”,顾名思义,OpenGL便是“开放的图形程序接口”。
1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了Windows
NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件,如用于制作电影《侏罗纪公园》、《玩具总动员》、《泰坦尼克号》而大名鼎鼎的Softimage
3D也可以在微机上运用。
1995年OpenGL的1.1版本面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括改进打印机支持,在增强元文件中包含OpenGL的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。
1997年,由于在Windows
95下大量3D游戏的涌现,游戏开发公司迫切需要一个功能强大,兼容性好的3D图形接口,而当时微软公司自己的3D图形接口DirectX
3.0的3D图形功能实在是糟糕,因而以制作《雷神之锤》等经典3D射击游戏而著名的id公司同其它一些游戏开发公司一道,与软件霸主微软公司对话,强烈要求微软公司在Windows
95中加入对OpenGL的支持。
同时,id公司还以OpenGL为3D图形接口开发了《雷神之锤2》的游戏引擎。《雷神之锤2》上市后大受欢迎,以无以伦比的3D图形特效、身临其境的音响效果等特色,摘取了1997
年由电脑游戏界的权威杂志《PC
GAMER》评选的“年度最佳游戏”、“最佳动作游戏”和“最佳网络游戏”三项桂冠。
当时由于硬件限制,《雷神之锤2》只应用了OpenGL的一部分功能。但是《雷神之锤2》获得的巨大成功,使人们第一次在电脑游戏中体会到OpenGL的强大功能,也迫使微软公司最终在Windows
95的OSR2版(俗称Windows 97)和后来的Windows
98中加入了对OpenGL的支持。这样,不但许多支持OpenGL的电脑3D游戏得到广泛应用,而且许多在Windows
95平台上运行的3D图形设计软件如AutoCAD R14、3DS MAX
R2等也可以运用支持OpenGL标准的3D加速卡,大大提高其3D图形的处理速度。
今年的7月28日,SGI和ARB公布了最新的OpenGL规格OpenGL
1.5。OpenGL 1.5中包括OpenGL ARB的正式扩展规格绘制语言“OpenGL Shading
Language”。该语言将作为即将发布的“OpenGL 2.0”的底核。
OpenGL
1.5的新功能如下:
·顶点Buffer
Object:进行顶点配列方式可以提高透视性能
·Shadow功能:增加用来比较Shadow映射的函数
·隐蔽查询(QUERY):为提高Curling性能采用非同步隐蔽测试
·非乘方纹理(Texture):提高mipmap等纹理内存的使用效率
·OpenGL
Shading Language v.1.0:用于着色(shader)对象、顶点着色以及片断着色技术(fragment shader )的扩展功能
另外以开发API为宗旨的业内团体Khronos Group于同一天宣布支持嵌入系统用的2D、3D图形规格“OpenGL ES
1.0”。另外Khronos Group还制订了“EGL 1.0”,“EGL 1.0”中制定了在多种操作系统中安装OpenGL
ES的标准方法。
OpenGL为ES定义OpenGL的subset
profile的规格。考虑到在嵌入式应用软件中使用,减小了内存使用量。当在软件中安装OpenGL ES
1.0时,只需要50KByte的容量。另外,还可以利用硬件实现固定小数点、浮动小数点以及图形加速器。
另外,KhronosGroup公布了用来制作动态播放媒体的API规格“OpenML”的开发组件“Software Development
Kit(SDK)for OpenML
1.0”的α版。使用该SDK可以制作用来取得、处理、同步以及播放数码媒体内容的程序。α版支持Windows和Linux,通过Khronos
Group的网站免费提供。另外SGI已经公开了该SDK的支持IRIX的版本。
OpenGL的特点
1.硬件无关的软件接口
可以在不同的平台如Windows
95、Windows
NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。
2.可以在客户机/服务器系统中工作,即具有网络功能
这一点对于制作大型3D图形、动画非常有用。例如,《玩具总动员》、《泰坦尼克号》等电影的电脑特技画面就是通过应用OpenGL的网络功能,使120多台图形工作站共同工作来完成的。
由于OpenGL是与硬件无关的3D图形接口,在
Windows、Unix/X-Windows、
MacOS、OS/2等不同版本的窗口相关部分(系统相关)略有差异。由于OpenGL是3D图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS等3D图形设计软件制作的DFX和3DS模型文件转换成OpenGL的顶点数组。
另外,在OpenGL的基础上还有Open
Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用。其中,Open
Inventor应用最为广泛。该软件是基于OpenGL面向对象的工具包,提供创建交互式3D图形应用程序的对象和方法,提供了预定义的对象和用于交互的事件处理模块,创建和编辑3D场景的高级应用程序单元,有打印对象和用其它图形格式交换数据的能力。
目前OpenGL的发展状况
游戏程序员们曾经对OpenGL的技术和画质推崇倍至,以至于微软在Windows系统中引入OpenGL,并且在Windows平台上出现了Quake
II、QuakeIII、重返德军总部等一批优秀的基于OpenGL
API的游戏,而同时期的D3D游戏没有哪一款能在画质上超越这些OpenGL游戏的,一直到微软发布DirectX
7,这种情况还是没有发生多大的改变,DirectX只是作为一个能用于快速开发游戏的API而存在着。
但是当微软在2001年发布了DirectX
8以后,局面终于被扭转了,DirectX
8是DirectX发展史上一个里程碑式的产品,它在2D、3D、视频、音频以及交互式输入设备接口方面进行了许多重要的改进,其中,在3D图形处理方面尤其做了划时代的改进,可以说,作为一个游戏API,DirectX
8已经超越了OpenGL。
出现这样的情况决非偶然:OpenGL是由ARB这一官僚机构管理的,官僚主义带来的自然是OpenGL发展的停滞不前,同时由于要考虑到团队中大多数人的利益,以至于在OpenGL
1.0推出后的相当长的一段时间里,OpenGL唯一做的只是增加了一些扩展指令集,这些扩展指令是一些绘图功能,像是ClearCoat、Multisample、视频及绘图的整合工具(某些是通过OpenML的努力而开发出来的,它本身属于OpenGL
ARB扩展指令之一)。
这正好给也是ARB成员之一的Microsoft找到了借口,他抱怨ARB对市场的反映极为迟钝,因而抛开OpenGL,倾其所有的开发资源,独自全力投入开发DirectX的工作上。更可笑的是在OpenGL
1.4中的一项Vertex编程框架技术还被同为ARB成员之一的微软指控侵犯了DirectX
8的专利;而Direct3D这边却得到了微软倾尽全力支持,技术更新极快,最终完全超越了OpenGL。
但是OpenGL也并不是完全沉没,而是在默默耕耘,继续走自己的道路。继1.5版后,ARB又为我们展示了具有美好前程的OpenGL
2.0版本。
OpenGL
2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3Dlabs。2.0版本首先要做的是与旧版本之间的完整兼容性,同时在顶点与像素及内存管理上与DirectX共同合作以维持均势。OpenGL
2.0将由OpenGL
1.3的现有功能加上与之完全兼容的新功能所组成(如图一)。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底的精简。此外,硬件可编程能力的实现也提供了一个更好的方法以整合现有的扩展指令。
OpenGL
2.0最重要的更新是加入了可编程能力。合成一个提供给开发者更多精简API的“Pure”OpenGL
2.0。通过将特定的OpenGL功能定义为“旧”功能,并加入更具有弹性的可编程新功能,让开发者们能运用可编程能力快速地获取最急切需求的功能。其中,可编程顶点处理、可编程片段处理、可编程图像格式是OpenGL
2.0的关键功能。
顶点处理其功能在于照明,材质和几何图形的弹性。可编程顶点程序将取代部分旧有的OpenGL管线如顶点转换、正规转换、照明、色彩强化、材质坐标产生及转换等,并且允许进行随机个别顶点运算。片段处理其功能为材质存取,插值计算和像素运算。
OpenGL
2.0增加了片段处理器的能力,取代旧有的内插值顶点数据运算、像素缩放、质材存取及应用、雾化等。可编程图像格式将取代固定格式封装和解封装运算,在自OpenGL传送或接收像素数据时,将允许类型与格式进行任意组合。
此外,OpenGL
2.0提供了更好的数据移动和内存管理功能。加强了应用程序对数据移动的控制能力和更好的顶点处理能力,能消除为增进数据流量而产生的数据备份,大幅提升性能。
OpenGL
2.0加入可编程能力可谓是开发者企盼已久的功能。开发者借由OpenGL
2.0提供的可编程能力,以丰富且常效性的功能来取代以往的复杂度,减少对现有及未来扩展指令的需求。与此同时,主要的硬件厂商愿意开放IP,一个困扰ARB多时的问题得到了很大程度上的解决。
而作为ARB准会员的ATi和NVIDIA也致力于彼此技术的整合。OpenGL开放性图形库,其“开放”是重点,ARB承诺所有被OpenGL采用的创意想法都将公开给所有人使用且不需要IP授权。我们期望ARB早日消除障碍,领导业界并为专业性绘图市场带来更多更新的图形技术。
厂商支持情况
ARB中庞大的厂商阵营本身就是对OpenGL
2.0强力的支持,3Dlabs在最新的专业绘图卡中也肯定会加入对OpenGL 2.0标准的强力支持。在其他厂商方面,ATI是支持OpenGL
2.0规范中比较积极的一个,伴随着RADEON
9500/9700等系列芯片的推出,ATI在专业显卡领域也有大的动作。
在前面这些家用显示芯片面市3个月后,ATI公布了FireGL专业显卡,该卡搭配128MB显存,是市场上首款支持可编程浮点结构的专业3D加速卡,在它支持的API中就包括了OpenGL
2.0。FireGL有两个版本,其一是FGL 9700 Visual Processing Unit(VPU,即视觉处理器),其二是较慢版本的FGL
9500(对应RADEON 9500芯片,被成为FireGL Z1),二者都有128MB显存。
FireGL
X1-128MB在去年12月已出现在市场,建议售价为795美元;FireGL Z1也于前不久上市,建议售价为595美元,据称一款256MB版的FireGL
X1也将很快上市。可见,著名的显卡厂商ATI在支持OpenGL
2.0规范上是不遗余力的,这恐怕与NVIDIA的Cg被排除在规范之外不无关系。
虽然最终ARB在Shading上采用了3DLabs的设计方案,但NVIDIA渴望在ARB占据一席之地的迫切之心一目了然。不过,一对老冤家ATI和NVIDIA在ARB的撮合下,也开始进行和OpenGL有关的技术整合。
专业市场的SGI、3Dlabs及家用市场的ATI和NVIDIA都投入到OpenGL
2.0的怀抱中,这样的阵容已足够强大了。剩下的,就看软件开发厂商们如何用好OpenGL 2.0的新特性,为我们创造出更好、更炫目的效果了。
OpenGL的测试软件
1.GL Excess
GL
Excess是一款著名的OpenGL性能测试工具,它的作者是一位来自意大利的小伙子Paolo
Martella,它同样有着华丽的界面、丰富的特效表现和动态光影变化,Demo模式下也有动人的音乐和极具震撼力的音效,但是由于没有足够的3D模型(只有一个),该软件还略显单薄,无法像3Dmark那样进行复杂的大型场景测试。
进入GL Excess,可以看到所有的测试选项集中在左侧的Test Settings一栏中,Project输入测试的名称,CPU/FPU
tests测试CPU的整数/浮点运算能力,VRAM tests是显存带宽、特性测试部分,FILL RATE tests为填充率测试,POLYGON COUNT
tests测试多边形的生成速度。选择上述测试场景,再设置好分辨率(Screen)后就可以Run
Benchmark进行测试了。
测试过程中,您可以在屏幕左下角看到实时显示的帧数。测试完毕后,GL
Excess会自动生成HTML格式的测试结果报告,其中包括各个场景的最高、最低帧速和平均帧速,然后按照各个场景的速度计算显卡在各场景的OpenGL性能,最后再根据这几项成绩统计出总的测试分数,并与其它同分辨率、同色深下显卡的成绩进行比较。
虽然GL Excess与专业测试程序还有明显的差距,但我们还是可以从中了解到显卡的一些主要OpenGL性能,初步体验OpenGL特效。
2.Vulpine GLMark
Vulpine GmbH是一家为3DS
Max、Maya等专业软件开发插件的公司,他们使用自己开发的Vulpine®
Vision®引擎编写了这款OpenGL测试软件。
这款测试软件的画面十分漂亮,一般的测试分为两个场景。第一个场景是由绿色的草地和蓝色的天空组成的广阔平原,第二个场景则是由一个虚拟的女主角,进行了一个科幻世界的探险,当然这个场景少不了整个画面的旋转等令人眼晕的测试。
与GL
Excess单薄的场景相比,GLMark的巨大测试场景才真正是对你的显卡OpenGL性能的严峻考验,它全面衡量显卡的填充率和三角形生成力,在“High
Detail”设置下,第一个“island”测试场景最多要求达到超过15000个多边形/每帧!
除了完全兼容标准OpenGL
1.2指令集外,软件还加入了OpenGL光照(OpenGL Lighting)、顶点阵列(Vertex Array Range)、材质压缩(Texture
Compression)等技术的应用,当然,只有在你的显卡支持的情况下,它们才能被打开。软件要求的最低系统配置为:Intel兼容CPU、128M内存、硬件支持OpenGL
1.2的显示卡。
测试完成后,自动生成结果,取平均帧数为最终结果。在fps/time页面中,有详细的帧数变化曲线,仔细分析一下,你不难从中找到最考验显卡OpenGL性能的画面。测试结果还可以保存到数据库(database)一栏中并和其它平台进行比较,只可惜不能提交结果到网上进行对比。
3.SPEC
SPEC,标准性能评估团体(the Standard Performance
Evaluation
Corporation),是一家注册于美国加州的非盈利性公司,这个组织中立于任何厂商,尽力确保测试软件的公正。并且,据他们所提供的资料表明,他们提供的测试软件因其标准化架构,可以准确评析当前最新,最流行的计算机设备。
其官方主页http://www.spec.org/上,提供包括独立的SPECviewperf
7.0专业OpenGL性能测试软件和模拟实际工作环境的SPECapc for Pro/ENGINEER 2001、3ds max 4.2、SolidWorks
2001、Solid Edge V11、Unigraphics V17等各种专业绘图软件的测试包免费下载,并且包括Microsoft
Windows和
UNIX/Linux等版本。
由于SPEC测试涉及的各类软件过于专业,一般的读者难以接受,这里我们简单介绍一下SPECviewperf。SPECviewperf是一个由C语言编写的openGL(开放源代码)的可执行程序,它是由IBM开发的,后来SGI、Digital以及其他的SPECopc项目开发人员对此作了升级和显著的贡献。SPECviewperf在benckmaking
openGL执行方面提供了巨大的灵活性。
SPECviewperf是一个采用命令行模式的基于C语言应用程序,最新发布的SPECviewperf
7具有6个子测试项目:DRV-08、DX-07、Light-05、proe-01、ugs-01和3dsmax-01。其中:DRV-08项目对应Intergraph的设计浏览软件DesignReview,测试对象是一个英国石油公司石油平台的场景,带有数量非常繁多的管道、设备以及结构模型。
模型的数据容量为50多兆字节,多边形数量是36万个;DX-07项目对应IBM的数据可视化软件Data
Explorer,测试的对象是3个螺旋状粒子轨迹,模型规模为30万个顶点(对系统的负荷甚至比DRV-08更大);Light-05项目对应Discreet
Logic的高级渲染软件Lightscape Visualization
System;proe-01项目对应Pro/Engineer;ugs-01项目对应Unigraphics;3dsmax-01项目对应的是3dsMax。
4.CineBench
2003
Maxon在一般的用户眼中虽然并不是十分的出名,但是历年来它们针对专业图形设计推出了不少的测试方案,CineBench
2003是其最新的显卡测试程序,这款产品针对的是专业的OpenGL设计方案,并且可以支持Intel的HT超线程技术,甚至多达16路的CPU并行设备。在测试的项目上主要针对当前显卡和系统的测试,项目包括有Cinema
4D Shading测试/OpenGL硬件光源测试/OpenGL 软件光源测试等等。
结语:
从上一篇和本篇的叙述中,我们可以详细地了解到,OpenGL很早就是一个专业的3D图形API,只不过它更多的应用于专业设计领域,如CAD和虚拟现实等。但是,OpenGL的发展之路却颇为不顺。由于和微软分道扬镳,在发展中缺乏微软的支持,同时OpenGL的发展却由几个厂商共同把持,这些厂商为了各自的利益(包括知识产权和竞争的关系)均不愿为OpenGL的发展提供技术,因而OpenGL的发展慢了下来。
目前,随着DirectX的不断发展和完善,OpenGL的优势逐渐丧失,至今虽然已有3Dlabs提倡开发的2.0版本面世,在其中加入了很多类似于DirectX中可编程单元的设计,但推广却颇为坚难。由于微软已经退出了OpenGL,因此未来微软也不会再将DirectX中的新技术授给OpenGL,因此未来的OpenGL发展前景比较迷茫,如何发展只有待时间来验证。