真正的文本处理呢,很不幸在 DOS 之后已经被完全淘汰了。所以没有什么“文本加速卡”之流的东西,是因为现在的显卡,即使完全没有文本处理的功能,也能在 Windows 下正常的工作。到这里,也许有人要问了:Windows 里的文字,不是“文本”吗?答案是:对你来说,它是。可是对电脑来说,它就不是文本了。Windows 里的文本,也是图形。那些文字是被 Windows “画”出来的。打开控制面板里的“字体”,你看到了什么?种类繁多的字体是吧。这些都不是存放在显卡里的,而是在硬盘上。当 Windows 接收到在窗口上打印一行字的命令的时候,它会调度“画”字程序,从硬盘里读出字体,然后画到屏幕上来。现在就明了了:Windows 的界面是完全基于图形的。所以图形加速卡对于 Windows 来说是十分重要的。好了,现在,让我们忘掉“文本”吧!
很久以前,绘图工作全部是由我们伟大而神圣的 CPU 来完成的,那时候的显卡,就是真正意义上用来“显示东西的卡”。它的工作就是把 CPU 处理好的数据“搬”到显示器上来。那时候 CPU 的工作可真是辛苦。现在好了,CPU 越来越快,可是做的工作却越来越少了。我先来说说图形加速的几个阶段。2D 图像加速,Windows 加速 和 3D 图像加速。
现在让我们把第二步分解来看:没有 2D 加速:1、读 32 Bit 数据(入门篇里的哦!),把这 32 Bit 数据写入目的地。2、重复 1 直到一行所有的像素被处理完。而有了 2D 加速后的工作只有:1、发送命令让显卡去拷贝这一行。这样看来,2D 加速确实能很大程度的释放 CPU 的负担。所以大家现在随便提起一个窗口移动一下,很平滑不是吗?显卡负责了窗口的移动。
二、诡异的 Windows 加速
Windows 对于每位 PC 程序员来说,都可以用“诡异”二字来形容。Windows 有太多专有的东西,以至于显卡也要为 Windows 本身制定一套加速计划。拥有全部的 Windows 加速功能的显卡几乎没有,而且现在的 CPU 的速度足以弥补 Windows 没有全部硬件加速的缺陷。总的来说,包括 鼠标光标的加速,图标的加速 和 特别的窗口加速等等。
鼠标加速就是用显卡的硬件来处理 Windows 的鼠标光标。大家现在看到的鼠标光标 和桌面上的其他内容其实不属于同一个层。是画在显卡单独划分出来的“顶层”里的。具体的内容也就不用太详细的介绍的,总之我告诉大家一个辨别的方法。打开一个动画窗口,也就是内容一直在变动的窗口,然后把鼠标光标移动上去。如果光标不断的闪动,那么显卡没有给鼠标光标加速。反之如果鼠标光标纹丝不动,那么显卡给鼠标光标加速了。
图标的加速,就是显卡来画 Windows 图标的功能。这个功能真是少只又少,不过对于目前 Windows xp 惯用的 32Bit 透明图表,现代的图形加速卡能起到一定程度的加速功能。
人人都喜欢渲染 3D 动画(一看就头晕的除外)。看到虚拟的主角在屏幕上跳来跳去,杀来杀去,拯救世界,谁不激动啊!说起 3D 加速,由于它太复杂了,我准备分 5 个部分来讲,涵盖从简到繁,从过去到未来的 3D 加速基础知识,好让大家能多了解一点我们默默无闻的 3D 加速卡们的工作。
3.1: 彩色三角形
世界就是这样开始的。人们想到了用三角形来表示 3D 的物体。其实很简单,学过高中几何的同学都知道,三点确定一个平面。所以三角形永远都是平面的。这样一来,复杂的曲面物体被近似的用小的平面来表示,在绘画上面会方便很多。来看画一个三角形的过程:前面的文章我已经讲了绘制矢量图的过程。其实一个三角形也相当于一个矢量图。它由三个顶点组成。而绘制的过程一样有两步:1、找到三角形将会坐落在屏幕的哪个地方。2、用颜色填充这个地方。也就是我提到的 设定(Setup) 和 光栅化(Rasterize) 的过程。而由于对象是三角形,我们给这两个过程另起名字叫做:三角形设定(Triangle Setup) 和 三角形光栅化(Triangle Rasterize) 过程。呵呵,有点儿现代图形学的意思了吧!一开始的 3D 图形,只有颜色,没有现在人们所说的贴图啦,纹理啦等等,所以生成的图像都是光突突的感觉。那个时候根本还没有出现 3D 游戏的概念,而专业人士是不会在乎这些的……
3.2: 贴图?皮肤… + 颜色混合
人们显然不会满足永远看着光秃秃的三角形组成的东西在屏幕上乱跳。于是慢慢的有人想到:我们给三角形贴上纹理贴纸怎么样?说起纹理,看看你家里的家具,它们表面的木纹啦什么的,还真的和三角形用的纹理贴图有点相似之处呢!纹理贴图在 3D 图形领域所扮演的角色,和现实家居里的墙纸,贴纸确实功能差不多。而当时在纹理贴图发明的初始时间,还有人强烈的反对它呢!有人认为纹理贴图是没有用的东西,以至于那段时间有公司竟然出品过不支持纹理贴图的显卡(没有 TMU 的显卡,你能想象的出来吗?公司的名字我忘了)!不过纹理贴图还是显示出了它强大的魅力。现在的 3D 图形技术里,纹理贴图也算是单独的一门学问了。
上面所说的功能,人们早就把它们做到一些显卡芯片里了。这样一来,这些所有的工作,都被从 CPU 里解放了出来。好啊!可是 CPU 还是不知足:I want more freedom! 人们想尽方法把 CPU 的负担减轻。所以,最后,就连 三角形设定,三角形光栅化 过程之前的 潘多拉盒,也被解放了出来。这就是:几何变换 和 光照运算(Transform & Lighting, T&L)。
说到这里,就不得不讲一下这两个纯数学的过程。几何变换:大家都知道,我们在屏幕上看到的 3D 图形,是以某一个视点为观察点绘制的。这是怎么完成的?还有,3D 物体如何在整个场景里移动?这就牵扯到了图形处理之前的话题:3D 空间几何。每一个 3D 物体都有一个说明其位置,方向的数据阵列,我们把它叫做 矩阵(Matrix)。这个矩阵储存了物体在场景里的位置,旋转方向,缩放大小等等的信息。所以在物体移动的时候,我们不需要更改所有三角形的位置,仅仅修改 矩阵 里的信息,整个物体就一动了。而 矩阵的应用不仅如此。最后要把整个场景变换成一摄像机为中心的 3D 空间,这个过程也和 矩阵有关。
回顾:原理篇里,我简要的讲了一下图形加速是什么,显卡是怎么给图形处理加速的,以及长长的 3D 加速发展史。其中 3D 加速的 5 个阶段都是里程碑式的,希望每个图形爱好者都能了解一下。另外,网友们在后面提到了“辐射度”(Radiosity) 渲染的概念,这个概念也是 3D 图形学里的另外一个分支。它的原理与 Ray-Tracing 又有很大的不同之处。这样最后的技术竞争将会更加的激烈…
正题:进阶篇---- 显卡的职责
如果要从头开始讲光栅化图形学的一切,不仅我写不完,也不可能写完。因为我的知识也是有限的,我只能把我认为现阶段主流,有用的知识写出来。学习呢,要抱着开放的心态,即使明天你所学的知识被判死刑,也不要觉得自己没有用了,因为学习的过程中所得到的经验,将使你更快的学到新的知识。今天,我们来讲 3D 加速卡的图形处理过程。
在前面的“原理篇”中,大家也应该知道 3D 图形处理需要经过的 4 个阶段了吧,快想!看你能不能在我之前把它们说出来 …… 对了,它们是:
一、几何变换(Transform)
大家知道,3D 物体是由三角形组成的。每个三角形呢,有三个顶点。而只要把这三个顶点的位置移动了,那么这个三角形也就自然跟着移动了(%$%$$#&%$#)。所以,几何变换所对应的处理对象就是顶点(Vertex)。大家想一想,一个物体在 3D 空间能做哪些动作呢?最基本的应该有:平移,旋转,缩放,扭曲,投影 等等… 具体的过程以及运算呢,我想学过大学的线性代数的朋友应该很清楚,我不想在这篇里谈的太深,所以,大家只需要把几何变换看成一个黑盒子,左面输入未经处理的顶点,右边输出处理好的顶点。具体的过程,大家可以在网上查找一下 矩阵(Matrix) 的操作。
回顾:“显卡的职责”里,我重点的给大家介绍了一下显卡作为 3D 加速卡时的工作流程,与每个流程的大概功能。我们再来回顾一下有哪四个过程:几何变换,光照,设定 和 光栅化。对了,在几何变换后面,还附加有裁剪。这就是光栅图形的基本生成步骤了。可是呢,显卡也不光是为了玩游戏的,否则就该叫“游戏卡”了。好,让我们来看…
还有,感谢网友们的支持和厚爱,正是有你们的支持,我才有信心一直写下来,希望大家都能学到有用的知识
正题:拓展知识 ---- 显卡的接口和功能
其实除了 3D 处理,显卡还有很多的功能,尤其是具有视频相关的一些功能。不过,这些功能有些是做为扩展功能被制造商附加在显卡上的,所以我下面说的,并不是每个人的显卡都有这些功能哦!我们先来看最简单的:
很多朋友都问:VIVO 是什么?顾名思义,VIVO – Video In Video Out,即 视频输入输出。相对于 TV-OUT 来说,VIVO 最大的不同就在于它的视频输入上。这种显卡可以通过同轴信号接口 或 S-Video 接口把 NTSC/PAL 图像信号接收进来,也就是说,它可以完成视频信号的采集功能。大家都知道,把显存里的数字信号输出到模拟信号接口,需要 DAC(数字/模拟转换器)的帮助,而 NTSC/PAL 信号也属于模拟信号,那么采集它们的时候,就要进行互逆的过程了:ADC(Analog/Digital Converter 模拟/数字转换器)。VIVO 功能一般都通过外置的芯片来支持,因为需要 ADC 的过程。而一些最新的图形核心,把 VIVO 功能也集成到了里面(…) 如 GeForce FX 5900 系列。
拥有 VIVO 功能的显卡数量就没有只拥有 TV-OUT 功能的显卡那么多了。有少数的厂商才给某些型号的显卡配备 VIVO 功能。这样的功能对于需要录制影片节目,或拥有摄像机的朋友来说,比较实用。因为它可以把影片或摄像机的信号输入电脑,保存在硬盘上。可是要想通过显卡看电视,VIVO 功能是不行的。因为它缺少了接受电视信号所特有的部分:高频头。
四、TV 接收功能
拥有TV 接收功能的显卡,属于真正的多功能复合卡。它的种类就更加少了。如果大家见过 TV 卡(就是单纯用来接收电视信号的扩展卡) 的话,一定见过它上面那个用金属包着的,大大的,方方的,怪怪的盒子。这个就是高频头。高频头所起的作用就是把从空中,或有线电视网络接受到的调制好的电视高频信号,转换成可供采集的视频信号。正因为是高频信号,所以很容易受到干扰。所以优质的高频头用料,做工都非常的棒,而价格也很昂贵。我们最常见的带 TV 接收功能的显卡有 ATI 的 AllInWonder 系列显卡 等等。
有了 TV 接收功能,你的电脑就变成电视机了 呵呵。很多 TV 接收卡还附赠了遥控器,以使你的电脑看起来更像个电视(1万多元买个小电视……)。最重要的是,你不仅能看电视,还可以把好看的节目录下来,以后慢慢回味,或留作纪念。
五、数字时代的开始:DVI
显卡上配 DVI 接口,大概在近两年里才开始兴起。DVI 的全称是 Digital Visual Interface。即:数字视频界面。相比 VGA 接口的模拟信号,DVI 输出的则是数字信号。这样,显示信号将 100% 的被完好的传输到显示器里。DVI 所对应的是数字显示设备,即 LCD 液晶显示器,Plasma 等离子显示器 等等的显示装置。原因是液晶显示器和等离子显示器的显示原理都是基于数字信号的,这样当接受到 DVI 所输出的数字信号后,就可以方便的直接将它显示出来了。
关于 DVI 的详细信息,我给大家一个网址,这是 DVI 的制定组织 DDWG 的网站,大家可以到这里找自己想要得信息:http://www.ddwg.org/
这里我想解释两个大家常见的问题:
5.1 DVI 转 VGA 的接头是怎么回事?
其实 DVI 接口在制定的时候,保留了模拟信号输出的通道。DVI 一共有两种接口:DVI-D (Digital only) 和 DVI-I(Integerated)。DVI-D 的信号就是单纯的数字信号,而 DVI-I 则是保留模拟信号通道的 DVI 接口,大家可以找一个 DVI 接口的显卡来看 (怎么不贴图?哦,你自己找找看实物,印象比较深嘛!),它的左边有一个十字形的接口,这个呢,就是模拟信号的通道,而右边则是三排规则的接口,这个就是 数字信号通道啦!
所以,可以利用 DVI-I 的模拟信号通道,来输出模拟信号。到这里,大家就别再问 DVI 能转 VGA,VGA 怎么就不能转 DVI 的傻傻问题了哦 呵呵
5.2 液晶显示器的 VGA 接口又怎么解释?
这个问题,是不太好解释(#%@#%#@%#@)。按道理说,LCD 液晶显示器都应该配备 DVI 接口来接受纯净的数字信号,这样现实效果会好很多。VGA 信号输入到液晶显示器后,还要进行 ADC 的转换,才能被显示出来。这样看:如果用 DVI 接口来接液晶显示器的话,路径是这样的:
显存的数字信号 => 编码 => DVI => 显示器 => 解码 => 显示
其中的“编码”和“解码”过程,是 DVI 标准所制定的,不过因为是纯数字无损编码,所以没有任何损失的
3D 立体眼镜的原理,就是通过让左/右 眼看到不同的图像,来让大脑认为你看到的东西是“立体”的。怎么能看到不同的图像?!是这样的:当 3D 立体眼镜被激活的时候,游戏的 3D 场景渲染过程会发生一些变化。这时候显示器将以换页交替的方式,轮流的显示出左/右眼的画面(怎么做的?就是移动游戏里摄像机的位置啊!)。而此时,3D 眼镜便偷偷的轮流挡住你的右眼和左眼(通过液晶片的变色),这样显示器显示左眼画面的时候,你用左眼看;显示器显示右眼画面的时候,你用右眼看…你看到立体画面了!呵呵 基本的原理就是这样的。
回顾:“显卡的接口和功能”篇中,我给大家大概的介绍了一下显卡拥有的各种接口,以及这些接口的基本原理和功能。其中 VGA 和 DVI 是使用最广泛的接口,我也做了相对较详细的介绍。读完前四章,大家应该对显卡的功能有了一定的了解了吧。可是我看到有很多朋友对于 3D 加速卡除了游戏的另外一个领域非常的陌生,所以,今天我来介绍:
正题:解惑篇--游戏的东西,专业的东西
说起专业绘图卡,大家有什么感觉呢?是不是“哇,好神圣!买不起!和我没关系!...”的敬而远之的态度呢?呵呵,其实 3D 加速卡最初是在专业领域发展起来的。我们现在用到的游戏卡,只不过是一种“军转民”的产品罢了。所以,在了解到 3D 游戏卡的同时呢,我们大家也因该对它的前身—专业 3D 绘图卡有所了解。好了,让我们来看专业绘图卡的职责。
大家来想象一下,如果游戏中所有的三角形,都不去填充,而只用直线把它们的三个边画出来… 你会看到什么??哇,乱死了!是乱七八糟的一堆… 呵呵,这就是 3D 绘图人员每天所面对的东西。
这就是成品渲染。当你调整好所有参数,包括摄像机的位置和灯光以后,按动“渲染”( Render )按钮,电脑在做的就是这一步。稍微复杂的场景,这一步通常要花费数小时的时间,有的甚至于要好几天才能完成。为什么这么慢呢?!你如果打开预览窗口的图像,和渲染好的成品对比一下,马上就能发现区别所在:成品比预览图细腻真实的多。其实这一步是完全由 CPU 来完成的。而它们所使用的算法的复杂度,也远在显卡的光栅图形之上。有的是用了 Ray-Tracing 光线追踪来计算物体的材质和光线的反射/折射,有的甚至利用到了辐射度( Radiosity ) 来计算物体表面接受光线照射的强度。这些真实的算法异常的复杂,而且灵活度很高。所以目前的 GPU 的可编程特性根本不能“代劳”,唯有我们可怜的 CPU 孤军奋战了。
到这里,大家应该明白,专业绘图卡在绘图软件的使用过程中充当了预览视口加速的功能。别认为只能加速预览视口没有什么大用处,其实绘图工作者们有 90% 的时间是用来绘制图形的,也就是图形加速卡在 90% 的时间里,都在为系统起着重要的加速作用。好了,看着激动人心的 Hollywood 特效大片,欣赏着美轮美奂的 3D 动画片的时候,让我们为默默无闻的专业绘图卡门致敬…
后记:这篇文章写的乱七八糟的,连我自己都不知道在写些什么 总的来说,我是想给初步涉及专业绘图领域的朋友做个引路人,让他们对自己的工作环境有一些浅显的了解。其实,我本人对专业绘图应用领域,也只是稍知一二,真的是书到用时方恨少啊!希望大家一起努力学习新的图像技术,来为我们建筑 3D 世界的梦想添一份力气!