随着3D技术的发展和普及,越来越多的电脑爱好者和游戏迷们开始关注它的真正奥秘。本文将对3D技术作一个简要的分析。
(一)目前流行的3D技术
这里我们所谈的3D技术是特指在PC上广泛使用的即时3D运算技术。3D技术给人们的是一个更为灿烂广阔的三维空间,世界上有很多公司曾经或正在为3D技术的发展做出了不懈的努力。
没有规矩不成方圆,任何技术都要有个规范。目前在PC上较流行的3D运算标准主要有OpenGL、Glide和Direct3D。
OpenGL是一个主要适用于专业图像要求的规范,本身就源于SGI的图形工作站。应用面相对较小,这里也就不多提了。
Glide是由3Dfx公司开发专为VooDoo系列3D加速卡而设计的,没有其它显示卡支持此标准。Glide由于功能比较单一,应用几乎全在游戏方面。
Direct3D是微软公司DirectX SDK集成开发包中的重要部分,适合多媒体、娱乐、即时3D动画等广泛和实用的3D图形计算。Direct3D以其良好的硬件兼容性和友好的编程方式很快得到了广泛的认可。现在几乎所有的具有3D图形加速的主流显示卡都对Direct3D提供良好的支持(包括VooDoo系列)。现在的3D游戏大多基于DirectX SDK开发,所以都以Direct3D作为标准的3D游戏引擎。在时间允许的情况下也为Glide进行一下优化。但是目前在多媒体软件方面采用即时3D动画的还相对较少。其实Direct3D的使用价值决不应只在游戏方面。采用Direct3D技术的即时3D动画能在多媒体演示等许多领域发挥出令人叹服的效果。
微软一向将技术的改进放在首位,在DirectX6中Direct3D进行了全面的改进。最新的Direct3D Immediate Mode的3D效果已全面超过了Glide,而DirectX7即将发布,DirectX8正在制作当中。DirectX的最大优势就在于最佳的兼容性、全开放和快速发展,而这也正是PC的优势。
(二)Direct 3D的一些常用功能和用途
作为一个3D运算标准,一是速度二是质量。目前的Direct3D运算主要依靠3D图形加速显示卡与CPU的配合工作。一张好的3D加速显卡除了应提供Direct3D超过软件方式十倍以上的加速功能外,还应提供良好的图像过滤质量和全面的3D特性。很多测试软件都提供了3D性能的全面测试,但方式不同常常让人摸不着头脑。下面简单介绍一些Direct3D的工作方式和常用功能(指在DirectX6中)并使用共享软件〈See3D〉体验一下实际的效果:
众所周知,3D场景中的所有物体都是由多边形构成,组成物体的多边形越多物体看上去就越精细但是CPU的处理负担也越重。现在带有3D加速的显示卡大多有辅助CPU处理多边形的能力,但是CPU的浮点运算仍然对多边形处理能力起着至关重要的作用。一般来说PentiumII300(赛扬300A)的浮点运算已能够满足大多数多边形运算的需要。但要注意处理多边形只是3D场景处理的第一步,此时能得到的还只是没有颜色的物体造型框架。
将多边形的各条边填充上封闭的面(face)才能得到3维实体。
目前的3D应用中大多采用gouraud方式使物体的各个face之间产生平滑的过渡,gouraud是可以由显示卡完成硬件加速的。现在的3D加速卡不可能没这功能,而且使用时速度都不会受影响。为了提高物体的质感,还可以加上一个高光和过渡阴影,这两个功能对于现在的显示卡也不稀罕。
虽然得到了光滑的3D物体,但是要表现带有真实感的细腻物体这还远远不够。为了让3D物体的外观能有更细致的表现而又不增加过多的face,就要采用纹理贴图映射。它是在多边形交错顶点设定贴图坐标,然后将2D图像依据贴图坐标来定位映射到3D物体的各个face上。这样就得到了一个比较理想的3D物体效果了。
当然看似并不复杂的技术却需要各方面的软硬件配合才能到那令人满意的效果,其中还有很多能改善图像质量的3D特性被确立为标准功能。下面是Direct3D的一些常用功能:
**Texture filter(贴图过滤)
贴图过滤的作用是处理3D图体表面的纹理贴图映射,不同的处理方式会带来截然不同的效果。
最差的处理方式是Nearest filter,这是采用“近似插值补偿”的方法进行过滤,缺点是贴图会产生粗糙的马赛克现象。
目前最常用的贴图过滤是Bilinear filter,这种方式提供Direct3D对贴图进行双线性过滤。这样可消除贴图在放缩时的粗糙现象。
这是最基本的3D效果,合格的3D加速显卡应该在启用此功能时毫不影响运行速度。另外还有更高级的处理方法,如anisotropic(各向异性过滤法),这只有高档的3D加速卡才能支持。如果显示卡支持此
功能,〈See3D〉同样可以起用。
〈See3D〉中Texture filter的默认状态是Bilinear filter(双线过滤)
**mipmap filter & Trilinear Filter(贴图分级细化和三线过滤)
mipmap(贴图分级细化)是一种特殊的贴图过滤方式,主要用来解决纹理贴图映射在物体距离过远时引起的深度错位现象。mipmap使用贴图分级细化的方式使贴图在缩小和过度倾斜时避免扭曲感。
它与Texture filter类似,也分两种方式:Nearest filter和Trilinear Filter。Nearest filter同样是近似插值补偿法,而Trilinear Filter则是用来过滤mipmap所产生的生硬边缘。可以说mipmap只有在Trilinear Filter状态下才能发挥理想效果。
〈See3D〉中mipmap的默认方式为Trilinear Filter(三线过滤)。可在菜单中的Setup中更改,如打开和关闭画面没有明显改善,就说明你的显示卡对mipmap以及Trilinear Filter功能的硬件支持有问题。
**Dither(误差分散)
这是一个仅使用在16位色3D渲染时的效果,用误差分散的方式来模仿真彩色显示质量。现在的3D加速卡几乎都有此功能,它能有效改进画质也不会降低速度。〈See3D〉中默认使用的是16位色3D渲染,所以“误差分散”功能自动打开,如将3D渲染的色彩深度调节至24位或32位,Dither自动关闭。
**Full-scene Antialiasing(全屏边线柔化)
这是一个比较新的3D效果,它提供Direct 3D对屏幕中可见的多边形进行边线柔化。这样可以有效地消除三维物体边线有尖锐锯齿的现象。因为是一个比较新的3D功能,许多老的3D加速卡还不支持此功能,即使是支持的加速卡,启用此功能时大多也会降低运行速度。如果显示卡支持此3D效果〈See3D〉会自动将“Antialiasing”功能打开,如运行速度过慢,可在菜单中的Setup里将它关闭。但要注意此功能是无法软件实现的。如果使用此功能时效果良好且没有大量降级速度,那说明你真的拥有一张不错的3D加速卡。
**Fog(雾效)
在3D场景中雾效常被用作景深效果和天气环境的烘托。常用的雾效有Vertex Fog(顶点雾效)和Range-base Fog(范围雾效)。顶点雾效是以三维物体的多边形顶点为基础产生雾效,是3D雾化效果中最常用的一种。其实范围雾效是一种加强型的顶点雾效,可以加强顶点雾效得环绕感。即使是早期的3D显卡一般也支持顶点雾效,不过有些加速卡会在启用时降低一定的速度。〈See3D〉中默认使用的是VertexFog,如想使用Range-base Fog可在菜单中的Setup里将它打开。
**Hardware Z-buffer(硬件Z-缓冲)
Z-buffer是用来确定3D物体间前后位置关系的,没有它3D物体的深度就会一片混乱。硬件Z-buffer的优劣主要有两个评价标准,一是精度,而是速度。如果在运行〈See3D〉时发现物体有交错抖动的问题,说明显示卡的Z-buffer精度太低,可将3D驱动改成RGB emulation(软件方式)作一对比。Z-buffer通常都采用16bit,但也有一些新的3D加速卡支持24bit和32bit方式。在〈See3D〉中Z-buffer默认为显示卡能支持的最高值,,也可在菜单中的Setup里自行更改。几乎没有什么3D加速卡对Z-buffer不提供硬件支持,但要注意显示内存的不足会影响Z-buffer的工作。
**Alpha blend(Alpha混合)
通过Alpha通道的方式将物体或贴图进行半透明、透明、光斑等特殊效果的总称。在DirectX6的Direct3D中粗分也有26种之多,很少有显示卡能全部支持的,但也很少有3D软件会全部用到的。篇幅限制不可能一一详术,简单的说多半光影特效是由此辅助完成的。很多3D加速显卡在进行大规模的Alpha混合处理时会明显降低处理速度。
〈See3D〉中“Alpha混合”功能是不能关闭的,其它3D软件也是一样。如果混合时出现错误(比如焰火呈现不透明方块状),则说明你的显示卡“Alpha混合”支持不完整。要知道我们用的可是最常用的几种。
**Texture format(纹理贴图格式)
纹理贴图格式是3D纹理贴图的基本规则,同样需要3D加速显示卡提供硬件的支持。常用的纹理贴图格式有8bit、RGB 565(16bit)、RGB 1555(16bit)、RGB 4444(16bit)、RGB 888(24bit)、RGB8888(32bit)。32Bit纹理贴图格式对显示卡的要求较高,并需要大量贴图缓存。购买较高档的3D加速显示卡时,应注意它能否支持RGB8888(32bit)纹理贴图格式。〈See3D〉中用到的纹理贴图格式有RGB 565、RGB 1555、RGB 4444三种,都是16bit贴图格式。如果连这么常用的贴图格式都发生了错误,那真该考虑换一张显示卡了。
**D3D Display Mode(D3D显示模式)
Direct3D与一般的Windows显示模式有很大区别,分辨率和色彩支持都有不同。普通3D加速显示卡都只支持16位色显示模式,而在Windows普通显示时却能支持24位色和32位色。不过也有一些功能较强的显示卡支持高于16位色的Direct3D显示模式,这能提高画面质量,但也会降低一定的速度。〈See3D〉提供很全面的D3D显示模式支持,分辨率从160*120到1024*768,支持16位色、24位色、32位色的3D渲染。