在586年代以前,
计算机的
3D及视频性能很弱,不能满足多媒体应用和3D 游戏的需求。那个时代,除了我们现在常见的显卡和
声卡外,还存在着另外一种与视频和声音有着密切关系的
板卡,那就是“
多媒体卡”或者称之为“视频加速卡”。
起源
由于当时的
CPU和
显卡性能有限,如果想通过计算机观看VCD级别的电影,就需要额外为计算机添加这样一块
板卡,才可以实现。家用电脑的视频加速一词,大概就起源于与哪个时代。
在586到来之时,CPU的性能得到了很大发展,特别是在
Intel推出具备
MMX多媒体指令集的奔腾(
Pentium)1代时,家用电脑已经具备一定的的多媒体性能。这是,已经可以不依靠专门的“视频加速卡”,只依靠
软件,就可以进行
VCD品质的视频回放。此后,通过软件方式的视频加速技术,也在不断发展。
并且
多媒体时代来临之际,显卡的性能也有了长足发展,极大的促进了多媒体的普及与应用,特别是后来飞速发展的电脑
3D游戏,以及
MPEG-2、
MPEG4、
HDTV高清视频等媒体应用,使得性能再强的CPU,也难以应对,而显卡的发展,恰到好处的补充了CPU在这方面的不足,从而使得显卡在电脑中的地位,不断提升。
分类
硬件加速
简而言之,
硬件加速就是利用硬件模块来替代
软件算法以充分利用硬件所固有的快速特性,以增强计算机的视频性能。
视频播放方面
在视频加速领域,显卡一直扮演着重要的角色,从
MPEG-1到
MPEG-2,再到如今的
H.264和
VC-1,显卡一直肩负着为CPU“减负”的重任,而这其中又经历了长期和曲折的发展,我们先来回顾一下显卡视频硬件加速的发展历史。
3D初频加速
3D加速卡在早期是由
3dfx所开发,Voodoo系列是比较有名的产品,当时没有3D加速卡的称呼,都是称为3D子卡或附加卡较多,后来
3D游戏慢慢成主流,许多3D厂商争相研发3D晶片,当时是2D
显示卡比较多,后来渐渐的把3D功能加在2D显示卡上,使其既可以显示2D影像,也可以跑3D游戏,并最终演变成为
3D加速卡。
展望
随着国家对高清产业的大力支持,以及硬件一日千里的飞速发展,高清的全面普及是迟早的事情。也许过不了多久,当前还被称为“硬件杀手”的
高清解码就将会如同以前的VCD和DVD一样,变成计算机再普通不过的一项基本功能了,而到了那个时候,估计下一代更高一级的“高清”又将出现,硬件和
软件之间相互追赶的竞赛还将继续进行下去。
软件视频加速
所谓
软件视频加速,是指通过软件,对视频及媒体应用,进行优化加速,一般用于专业图形设计软件的加速和
网络视频加速方面,对于普通电脑用户来说,网络视频加速应用的比较多。
网络视频加速软件
由于受到
网速的限制或者遇到
网络使用高峰时段,看视频的时候便会出现很“卡”或缓冲慢等问题,以至于本想好好看视频,却在焦急等待缓冲过的程中度过。视频加速就是在看视屏的时候不仅仅可以从服务器下载视频,还可以通过p2p从同样安装此插件的正在浏览此视频的用户那下载,一定程度上缓解了服务器压力增加用户的浏览速度,不过在享受从别的客户那下载视屏增加自己浏览速度的同时,自己也得给别人上传,和BT的原理一样,会有点伤硬盘
应用
说起专业绘图卡,大家有什么感觉呢?是不是“哇,好神圣!买不起!和我没关系!...”的敬而远之的态度呢?呵呵,其实 3D 加速卡最初是在专业领域发展起来并逐渐转变为民用。所以,在了解到 3D 游戏卡的同时呢,我们大家也因该对它的前身—专业 3D 绘图卡有所了解。好了,让我们来看专业绘图卡的职责。
大家来想象一下,如果游戏中所有的三角形,都不去填充,而只用直线把它们的三个边画出来… 你会看到什么??哇,乱死了!是乱七八糟的一堆… :wacko: 呵呵,这就是 3D 绘图人员每天所面对的东西。
线筐的世界
在专业领域,图形设计者往往要求不单看到物体的表面颜色和材质,更要求看到物体内部的结构和精确的形状轮廓。这样呢,花里胡哨的纹理贴图和材质不仅不能起到应有的作用,反而还会干扰设计者对形状的掌握。所以,快速,精确,大量的绘制线条就成了专业绘图卡的“基本功”了 呵呵。
两点确定一条直线,所以在专业领域,物体不一定要用三角形来表示也一样可以被编辑和显示出来。所以专业绘图更偏向于使用四边形来绘制物体。这样一来看起来整齐,二来容易和外部的一些采集设备,比如 3D 扫描仪的数据接口。
在绘制游戏的过程中,要用少量的三角形,加上大量的纹理
贴图来绘制场景。由于纹理贴图的读取和颜色运算占绝大多数处理时间,所以游戏卡的
显存带宽和像素处理能力就显得非常重要,因此出现了 4 条 乃至 8 条 像素管线并行运作的
显卡,和高达 256bits, 20GB/s 的显存带宽。
而在只绘制线筐这种情况下,专业绘图卡的工作模式以及瓶颈分布也和游戏卡有所不同了:在专业
软件的编辑窗口里,线条填充了所有空间。专业绘图卡需要可以接受的速度处理数量巨大的顶点数据,而这些数据量,通常都在游戏场景的成千上万倍。而画线的过程相比顶点的处理过程,就显得比较轻松了。这种工作方法,使得专业绘图卡需要有非常强劲的顶点处理能力。这点,在顶点处理能力相似的显卡专业性能也相近的表现中也能看得出来。
既然画线条是主要任务,人们当然想让专业卡把它的主要任务完成的更好。所以,人们想到了用一种方法来让画出来的线更漂亮:
线筐反锯齿 (Anti-Aliased Lines)
如果用 Windows 的 画笔 画一条斜线,你看到了什么?(当然是线啦)你看到的是锯齿!其实斜线也是由很短的水平或竖直的线段组成的。这个就是线段
光栅化的缺点。怎么才能让画出来的线更平滑,更漂亮呢?这就要用到光栅化的高级技巧了:
浮点坐标光栅化法则(Floating Point Coordinate Rasterization): 具体的名字可能不是这样的,不过这个名字绝对能说明问题!。以往,在画线的时候,都要把线段顶点的坐标先转换成整数,再画在
屏幕上,比如( 124.5, 11.2 ) => (125, 11 )。因为屏幕上像素的坐标都是整数的,所以这种方法简单快速,可是画出来的线就是那样的充满锯齿…
而浮点光栅化法则呢,就是把
浮点数表示的坐标直接映射到屏幕上,而取该点邻近的四个像素做颜色的权重分配(最复杂的地方哦,别急,我来慢慢讲):比如线上有一个点,它的坐标是 ( 124.5, 11.2 )。那么我们来取这邻近四个点:( 124, 11 ), ( 125, 11 ), ( 124, 12 ), ( 125, 12 )。而用坐标的小数部分表示该点的权重的话,四个点的颜色浓度分别是这样的:
( 124(0.5), 11(0.2) ) : 50% * 20% = 10%, ( 125(-0.5), 11(0.2) ) : 50% * 20% = 10%;
( 124(0.5), 12(-0.8) ) : 50% * 80% = 40%, ( 125(-0.5), 12(-0.8) ) : 50% * 80% = 40%;
这样,就把一个
浮点坐标映射到了四个整数坐标上,由于色彩的浓度是随浮点坐标在整数坐标映射的权重来计算的,所以整个线就变得非常的平滑了。
我上面介绍的只是
反锯齿光栅化的方法之一,有很多种更快速的方法已经被广泛的使用了。由于这些方法涉及到的知识太专业了,所以我就不再多做引申了(其实有的我也不很清楚…)。线筐反锯齿在新型专业绘图卡里做了良好的优化,所以使用专业绘图卡时,可以通过使用线筐反锯齿而得到更清晰精确美观的线筐效果图。
专业 OpenGL 和后起之秀
D3D8/9
说到专业绘图卡,我就不能不提起
OpenGL。OpenGL 是什么?你首先想到的一定是 Open Graphics Library 是由 Silicon Graphics Inc. 于 1992 年提出的专业绘图接口。它被广泛的应用在了几乎所有的计算机绘图领域。包括 SGI, DEC, IBM, PC 和MAC 等等,都提供了对它的支持,所以说 OpenGL 是一个跨平台的专业绘图接口。大家平常玩的游戏里使用的 OpenGL,只是整个 OpenGL 绘图
库函数的很小很小一部分,而这一部分足以让我们的广大玩家体验惊心动魄的 3D 世界了!呵呵。
既然这么神,那么支持它的
软件肯定不少喽!对了。像
3dsmax,
Maya,
SoftImage 这PC 3D 制作工具的“三巨头”就提供了对 OpenGL 图形接口的支持。既然是接口,也就代表了“与硬件无关的隔离层”。所以专业绘图卡只需要专心做好对 OpenGL 接口的支持,也就是支持了所有主流的 3D 制作软件。这也是专业绘图卡价格高昂的原因,因为它的驱动研发也占了很大一部分的成本。
也许有不少朋友还在纳闷:OpenGL 到底是干什么用的?每天听你们说呀说,我怎么没有看见!其实,OpenGL 的常用功能说起来让你吓一跳:画点,画线,画多边形,就是这些。作为游戏,使用OpenGL 提供的这三个功能就足够了。而在专业领域,它提供了
曲线,曲面绘画的支持,三角形分割,顶点变形以及其他一些专业人士津津乐道的功能,而在最新版本的 OpenGL 之中,也引入了可编程图形流水线的概念(比 D3D8 晚了半拍)这样一来,也可以通过对
显卡编程来灵活的实现个性的图像效果。
也许大家从我的话里能看出来,OpenGL 在后来的发展中,正如大家所料的,掉到了 D3D 的后面。说起 D3D,就要提一下 Microsoft 的 DirectX 娱乐多媒体引擎了。
DirectX对广大玩家一定如雷贯耳吧。事实上,采用 DirectX 的 D3D 图形引擎的远远多于OpenGL。这也是受 OpenGL 和
D3D 开发使得定位不同所影响。D3D 更偏向于为游戏设计者提供直接的,功能强大的与游戏绘图直接相关的功能,所以对于游戏设计者来说更具亲和力。
而 D3D 的快速发展也得益于它是独家技术:由 Microsoft 亲自制定,亲自研发,提供详细强大的技术支持。以往的 D3D 总是给人小气的感觉,而 D3D 也把 OpenGL 作为竞争目标而努力的发展;而在
DirectX 8.0 推出的时候,D3D8 从功能和易用性上一举超越了 OpenGL。它首先提出了可编程几何/像素处理流水线的概念。配合当时上市的
nVIDIA GeForce 3 系列显卡的完美硬件支持,从视觉上给了人们全新的震撼。题归正传:当 D3D8 在游戏接口方面超越了 OpenGL 之后,贪婪的
Microsoft(!) 更开始让 D3D 在专业功能上也发展起来。时至今日,D3D 得到了众多专业
绘图软件的支持,比如 3dsmax 从 4.0 起加入了对 DirectX 8.0 的支持,使得近似最终渲染效果的材质/灯光在可编程
GPU 的支持下,在预览窗口里显示了出来。
DirectX 9.0 的绘图组件 D3D9,又是一个里程碑。它重新定义了可编程图形流水线的概念,使全
浮点精度,无失真的图像在 PC 游戏里成为可能。而且 D3D9 引入了另一个新的概念,就是在继承了 D3D8的汇编语言给显卡编程的同时,提供了用高级语言来撰写显卡的程序的功能,这个语言被命名为 HLSL(High Level Shader Language)。到此,D3D 超越了 OpenGL,也使的 OpenGL 新版本的制定开始向 D3D 靠拢。OpenGL 所支持的 Vertex Program / Fragment Shader 就是在 D3D 的 VertexShader / PixelShader 的基础上发展起来的。
D3D 的功能已经足够强劲,也在游戏领域得到了完全的支持。可是要想在专业绘图领域真正的拥有一席之地,还需要各大
专业绘图软件开发商对其表示肯定和投入支持。让我们衷心的祝 D3D 和 OpenGL 一路走好...
预览 vs. 渲染
有很多
专业绘图的初学者,常常分不清两个概念:预览和渲染的区别,以及
图形加速卡是给哪里加速的。下面我就来讲一下这些到底是什么东西
使用过专业绘图
软件的朋友,一定见过它的交互式编辑窗口吧。不同的软件和设置,开有不同数量的交互式编辑窗口,也被称为预览窗口。这些窗口里的内容呢,就是由图形加速卡绘制的(如果启用
硬件加速的话)。一般除了有一个窗口里的物体是由颜色和纹理
贴图填充的以外,其它的窗口里的图像都是线筐。呵呵 说道这里,大家应该明白专业绘图卡对线筐加速的意义了吧。其实,在专业绘图软件里,有且只有这部分的绘图工作是由图形加速卡来完成的。另一部分绘图功能,则超越了
图形加速卡的功能:
这就是成品渲染。当你调整好所有参数,包括摄像机的位置和灯光以后,按动“渲染”( Render )按钮,电脑在做的就是这一步。稍微复杂的场景,这一步通常要花费数小时的时间,有的甚至于要好几天才能完成。为什么这么慢呢?!你如果打开预览窗口的图像,和渲染好的成品对比一下,马上就能发现区别所在:成品比预览图细腻真实的多。其实这一步是完全由 CPU 来完成的。而它们所使用的算法的复杂度,也远在显卡的光栅图形之上。有的是用了 Ray-Tracing
光线追踪来计算物体的材质和光线的反射/折射,有的甚至利用到了
辐射度( Radiosity ) 来计算物体表面接受光线照射的强度。这些真实的算法异常的复杂,而且灵活度很高。因此 GPU 的可编程特性根本不能“代劳”,唯有我们可怜的 CPU 孤军奋战了。
到这里,大家应该明白,专业绘图卡在绘图
软件的使用过程中充当了预览
视口加速的功能。别认为只能加速预览视口没有什么大用处,其实绘图工作者们有 90% 的时间是用来绘制图形的,也就是
图形加速卡在 90% 的时间里,都在为系统起着重要的加速作用。好了,看着激动人心的
Hollywood特效大片,欣赏着美轮美奂的 3D 动画片的时候,让我们为默默无闻的专业绘图卡致敬…
技术发展
2004年12月20日,
NVIDIA正式推出了基于GeForce 6系列
图形芯片(NV 4x)的
PureVideo技术,其目的是为了提升GeForce 6系列图形芯片的视频播放性能,主要作用是获得更低的CPU占用率与更清晰的画面。
总所周知,在电脑上播放的视频绝大部分都是从电视或电影中转换而来。但在转换过程会遇到两个突出的矛盾:一是电视的片源为
隔行扫描,而电脑上是
逐行扫描;二是电影的
帧数为每秒24帧,而电脑上播放的要求是每秒30帧。虽然绝大部分
视频编辑加工
软件都能对其实行转换,但如果对这两个矛盾处理得不好,画面就会出现严重的重叠、模糊等失真。而
PureVideo技术就是为解决这些问题而出现的。
实际上,
PureVideo是一项基于GeForce 6系列
GPU中整合的可编程
视频处理引擎,同时结合硬件与软件技术,能够对MEPG2(DVD)、WMV9以及HD Video等视频播放进行
硬件加速的显卡特色技术。PureVideo的关键技术包括一个集成于GPU中的专门硬件——16路
向量处理器,通过它来完成
高清视频播放的硬件加速,从而达到减轻CPU负担的目的。
PureVideo技术在播放DVD视频、HD Video以及
WMV(包括高清WMV)视频时可以获得比传统视频解决方案更清晰的画面,同时也会降低CPU占用率。而要想发挥这项技术的优势,除了要有一块GerForce 6系列的
显卡外,还需要安装三个
软件:包括WMV视频
插件、Windows Media Player 10(这两个用于支持WMV视频的加速)以及NVIDIA Decoder(用于支持DVD视频加速)。
PureVideo技术针对DVD回放的优化
解码器全称为NVIDIA DVD Decoder,必须要该解码器配合GeForce 6系列
GPU中的
视频处理引擎才能对视频回放起到优化加速的作用。
安装了NVIDIA Decoder后,当插入DVD
光盘或播放MPEG2视频文件时,无论采用什么播放器,当播放器向系统提出挂接解码器的要求时,NVIDIA Decoder就会自动负责解码部分的任务,此时我们可以看到在
桌面右下角
系统托盘中会出现一个NVIDIA的图标。
解码器在默认状态下是按照最佳质量进行的设置,一般不建议读者更改,除非出现画面显示错误才有必要进行调试。主界面右上部分的“Bitrate(
Mbps)”能实时显示所播放文件的
比特率,用户可凭此辨别DVD视频是否为真正的
可变比特率格式。需要注意的是,该
控制面板只有在播放DVD视频(包括DVD光盘和MPEG2文件)时才能打开。
在针对
WMV格式文件的视频加速中,所要采用的
WMV插件主要包含两个文件:
wmp.dll(10.0.0.3646)与
wmvdmod.dll(10.0.0.3663)。根据NVIDIA的官方说明,这款插件可在Windows Media Player10的插件下载中获得。要想实现在Windows Media Player 10中播放
高清格式的WMV文件,这两个插件是必不可少的。
PureVideo技术的另一特点在于它是基于视频硬件级加速的技术,能分担CPU对视频的运算任务,从而减少CPU占用率。
相对
NVIDIA的
CUDA技术而言,AMD采用的Stream技术是一项开放性的技术。实际上,最初ATI采用的流处理技术并非完全开放,而是仅针对单一的一个项目而研发的。 在2006年,ATI就曾经借助非统一架构设计的Radeon X1950XTX显卡为
斯坦福大学的
Folding@Home (
蛋白质折叠的
分布计算项目)项目进行
科学计算。而全新的流处理技术的改进就是要将这一技术全面开放,能够让更多的开发人员参与进来,借助HD4000系列显卡超强的
浮点运算能力,为更多的
并行计算应用进行加速。