荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: belong (属于......), 信区: Hardware
标  题: 图形加速卡技术论坛:5.解惑篇--游戏的东西,专业的?
发信站: 荔园晨风BBS站 (Tue Jul 29 15:15:50 2003), 站内信件

http://bbs.gzeasy.com/index.php?act=ST&f=1&t=37426&st=0#entry447144

回顾:“显卡的接口和功能”篇中,我给大家大概的介绍了一下显卡拥有的各种接
口,以及这些接口的基本原理和功能。其中 VGA 和 DVI 是使用最广泛的接口,我
也做了相对较详细的介绍。读完前四章,大家应该对显卡的功能有了一定的了解了
吧。可是我看到有很多朋友对于 3D 加速卡除了游戏的另外一个领域非常的陌生,
所以,今天我来介绍:

正题:解惑篇--游戏的东西,专业的东西

说起专业绘图卡,大家有什么感觉呢?是不是“哇,好神圣!买不起!和我没关系
!...”的敬而远之的态度呢?呵呵,其实 3D 加速卡最初是在专业领域发展起来
的。我们现在用到的游戏卡,只不过是一种“军转民”的产品罢了。所以,在了解
到 3D 游戏卡的同时呢,我们大家也因该对它的前身—专业 3D 绘图卡有所了解。
好了,让我们来看专业绘图卡的职责。

大家来想象一下,如果游戏中所有的三角形,都不去填充,而只用直线把它们的三
个边画出来… 你会看到什么??哇,乱死了!是乱七八糟的一堆…  呵呵,这就
是 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 是什么?你首先想到的一定是
 Quake!, Doom! @%#%#@%@^#$^% 拜托,我们在讲专业知识哦!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 对广大玩家一定如雷贯耳吧。事实上,现在市面上的游戏,有 80%
的都采用了 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 动画片的时候,让我们为默默无闻的专业绘图卡门致敬…


后记:这篇文章写的乱七八糟的,连我自己都不知道在写些什么  总的来说,我是
想给初步涉及专业绘图领域的朋友做个引路人,让他们对自己的工作环境有一些浅
显的了解。其实,我本人对专业绘图应用领域,也只是稍知一二,真的是书到用时
方恨少啊!希望大家一起努力学习新的图像技术,来为我们建筑 3D 世界的梦想添
一份力气!


--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 61.144.235.40]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店