3D术语速查手册 袁欣 1998年 第34期 39版   1998年最热门的话题莫过于3D,从年初的G100、Permedia2、6326、VOODOO、RIVA128到目前的i740、G200,如果说去年大多数3D处理芯片的性能还比较差,尤其是在运行Quake等3D效果极为强烈的游戏时,往往显得捉襟见肘、错误百出,但今年以来的3D图形处理芯片已经令人相当满意了,支持的3D效果高达数十种,各种3D指标也非常耀眼,这对于购机用户以及广大读者来说是好事,但大量出现在广告、文章中的这些3D特性术语却令我们的读者有雾里看花的感觉。笔者在此用一个版的篇幅详细介绍目前常用的3D特性术语,让你走出迷雾,把它看得清清楚楚。 #1一、3D API   API是Application Programming Interface应用程序接口的缩写,是许多程序的大集合。一个3D API能让编程人员所设计的3D软件只要调用其API内的程序,从而让API自动和硬件的驱动程序沟通,启动3D芯片内强大的3D图形处理功能,从而大幅度地提高了3D程序的设计效率。目前普遍应用的3D API有DirectX、OpenGL、Glide、Heidi。 #1  ·DirectX   微软公司专为PC游戏开发的API,与Windows 95 和Windows NT操作系统兼容性好,可绕过图形显示接口(GDI)直接进行支持该API的各种硬件的底层操作,大大提高了游戏的运行速度,而且目前基本上是免费使用的。由于要考虑与各方面的兼容性,DirectX用起来比较麻烦、在执行效率上也未见得最优。具体组成及功能详情可参看本报第33期(8月31日)“Microsoft DirectX 6.0演武传奇”一文。 #1  ·OpenGL (开放式图形接口)   由Silicon Graphics公司开发,能够在Windows 95、Windows NT、Macos、Beos、OS/2、以及Unix上应用的API。由于OpenGL起步较早,一直用于高档图形工作站,其3D图形功能很强,超过 DirectX,能最大限度地发挥3D芯片的巨大潜力。在Windows 98中已经支持Direct X和OpenGL。在OpenGL的1.2版中增加了对3DNow!标准的支持。 #1  ·Glide   这是3Dfx公司为VOODOO系列3D加速卡设计的专用3D API,它可以最大限度发挥VOODOO系列芯片的3D图形处理功能,由于不考虑兼容性,其工作效率远比OpenGL和Direct 3D高,所以Glide是各3D游戏开发商优先选用的3D API。不过,这样一来就使得许多精美的3D游戏在刚推出时,只支持3Dfx公司的VOODOO系列3D加速卡,而其它类型的3D加速卡则要等待其生产厂商提供该游戏的补丁程序。 #1  ·Heidi   Heidi是一个由Autodesk公司提出来的规格。目前,采用Heidi系统的应用程序包括3D Studio MAX动画制作程序、Autodesk公司为 AutoCAD R13开发的WHIP加速驱动程序。 #1二、3D特性 #1  ·Alpha Blending (α混合)   简单地说这是一种让3D物件产生透明感的技术。屏幕上显示的3D物件,每个像素中有红、绿、蓝三组数值。若3D环境中允许像素能拥有一组α值,我们就称它拥有一个α通道。α值的内容,是记载像素的透明度。这样一来使得每一个物件都可以拥有不同的透明程度。比如说,玻璃会拥有很高的透明度,而一块木头可能就没什么透明度可言。α混合这个功能,就是处理两个物件在萤幕画面上叠加的时候,还会将α值列入考虑,使其呈现接近真实物件的效果。 #1  ·Fog Effect (雾化效果)   雾化效果是3D的比较常见的特性,在游戏中见到的烟雾、爆炸火焰以及白云等效果都是雾化的结果。它的功能就是制造一块指定的区域笼罩在一股烟雾弥漫之中的效果,这样可以保证远景的真实性,而且也减小了3D图形的渲染工作量。^343901a^是游戏《恐龙猎人》中的一个画面,其雾化效果非常不错。 #1  ·Shading(着色处理)   绝大多数的3D物体是由多边形(polygon)所构成的,它们都必须经过某些着色处理的手续,才不会以线结构(wire frame)的面目示人。着色处理分为Flat Shading平面着色、Gouraud Shading 高洛德着色   1.Flat Shading (平面着色):平面着色是最简单也是最快速的着色方法,每个多边形都会被指定一个单一且没有变化的颜色。这种方法虽然会产生出不真实的效果,不过它非常适用于快速成像及其它要求速度重于细致度的场合。   2.Gouraud Shading (高洛德着色): 这种着色的效果要好得多,它可对3D模型各顶点的颜色进行平滑、融合处理,将每个多边形上的每个点赋以一组色调值,同时将多边形着上较为顺滑的渐变色,使其外观具有更强烈的实时感和立体动感,不过其着色速度比平面着色慢得多。   ·Mapping(贴图处理)   分为Texture Mapping材质贴图、Mip Mapping Mip贴图、Bump Mapping 凹凸贴图、Video Texture Mapping视频材质贴图。   1.Texture Mapping (材质贴图):是在物体着色方面最引人注意、也是最拟真的方法,同时也多为目前的游戏软件所采用。一张平面图像(可以是数字化图像、小图标或点阵位图)会被贴到多边形上。例如,在赛车游戏的开发上,可用这项技术来绘制轮胎胎面及车体着装。   2.Mip Mapping (Mip贴图):这项材质贴图的技术,是依据不同精度的要求,而使用不同版本的材质图样进行贴图。例如:当物体移近使用者时,程序会在物体表面贴上较精细、清晰度较高的材质图案,于是让物体呈现出更高层、更加真实的效果;而当物体远离使用者时,程序就会贴上较单纯、清晰度较低的材质图样,进而提升图形处理的整体效率。   3.Bump Mapping (凹凸贴图):这是一种在3D场景中模拟粗糙外表面的技术。将深度的变化保存到一张贴图中,然后再对3D模型进行标准的混合贴图处理,即可得到具有凹凸感的表面效果,如^343901b^所示。   4.Video Texture Mapping ( 视频材质贴图):这是目前最好的材质贴图效果。具有此种功能的图形图像加速卡,采用高速的图像处理方式,将一段连续的图像(可能是即时运算或来自一个AVI或MPEC的档案)以材质的方法处理,然后贴到3D物件的表面上去。 #1  ·Texture Map Interpolation(材质影像过滤处理)   当材质被贴到屏幕所显示的一个3D模型上时,材质处理器必须决定哪个图素要贴在哪个像素的位置。由于材质是2D图片,而模型是3D物件,所以通常图素的范围与像素范围不会是恰好相同的。此时要解决这个像素的贴图问题,就得用插补处理的方式来解决。而这种处理的方式共分三种:“近邻取样”、“双线过滤”以及“三线过滤”。 #1  1.Nearest Neighbor (近邻取样)   是一种较简单材质影像插补的处理方式。会使用包含像素最多部分的图素来贴图。换句话说就是哪一个图素占到最多的像素,就用那个图素来贴图。这种处理方式因为速度比较快,常被用于早期3D游戏开发,不过材质的品质较差。 #1  2.Bilinear Interpolation (双线过滤)   这是一种较好的材质影像插补的处理方式,会先找出最接近像素的四个图素,然后在它们之间作差补效果,最后产生的结果才会被贴到像素的位置上,这样不会看到“马赛克”现象。这种处理方式较适用于有一定景深的静态影像,不过无法提供最佳品质,也不适用于移动中的物件。在^343901d^中,右边的画面没有采用“双线过滤”,从而出现了比较严重的“马赛克”现象;而左边的画面由于采用了“双线过滤”,图像显得非常“柔和”。 #1  3.Trilinear Interpolation (三线过滤):这是一种更复杂材质影像插补处理方式,会用到相当多的材质影像,而每张的大小恰好会是另一张的四分之一。例如有一张材质影像是512×512个图素,第二张就会是256×256个图素,第三张就会是128×128个图素等等,总之最小的一张是1×1。凭借这些多重解析度的材质影像,当遇到景深极大的场景时(如飞行模拟),就能提供高品质的贴图效果。一个“双线过滤”需要三次混合,而“三线过滤”就得作七次混合处理,所以每个像素就需要多用21/3倍以上的计算时间。还需要两倍大的存储器时钟带宽。但是“三线过滤”可以提供最高的贴图品质,会去除材质的“闪烁”效果。对于需要动态物体或景深很大的场景应用方面而言,只有“三线过滤”才能提供可接受的材质品质。在^343901e^中,右边的画面由于没有采用“三线过滤”,竹帘部分产生了严重的“闪烁”现象;而左边的画面采用了“三线过滤”,竹帘细节部分非常清晰。   .Perspective Correction (透视角修正处理)   它是采用数学运算的方式,以确保贴在物件上的部分影像图,会向透视的消失方向贴出正确的收敛。在^343901c^中,当图形画面向前倾斜时,左边的画面由于采用了“透视角修正”技术,画面上的直线保持真实的透视效果;而右边的画面没有采用“透视角修正”技术,因而画面上的直线出现了失真。 #1  ·Anti-aliasing (反锯齿处理)   简单地说主要是应用调色技术将图形边缘的“锯齿”缓和,边缘更平滑。反锯齿是相对来来说较复杂的技术,一直是高档加速卡的一个主要特征。目前的3D加速卡大多不支持反锯齿,但在下一代3D加速卡如RIVA TNT、G200中将支持这项技术。 #1  ·Z Buffer (Z 缓存)   Z-buffering是在为物件进行着色时,执行“隐藏面消除”工作的一项技术,所以隐藏物件背后的部分就不会被显示出来。   在3D环境中每个像素中会利用一组数据资料来定义像素在显示时的纵深度(即Z轴座标值)。Z Buffer所用的位数越高,则代表该显示卡所提供的物件纵深感也越精确。目前的3D加速卡一般都可支持16位的Z Buffer,新推出的一些高级的卡已经可支持到32位的Z Buffer。对一个含有很多物体连接的较复杂3D模型而言,能拥有较多的位数来表现深度感是相当重要的事情。 #1  ·Double Buffering (双重缓冲区处理)   绝大多数可支持OpenGl的3D加速卡都会提供两组图形画面信息。这两组图形画面信息通常被看着“前台缓存”和“后台缓存”。显示卡用“前台缓存”存放正在显示的这格画面,而同时下一格画面已经在“后台缓存”待命。然后显示卡会将两个缓存互换,“后台缓存”的画面会显示出来,且同时再于“前台缓存”中画好下一格待命,如此形成一种互补的工作方式不断地进行,以很快的速度对画面的改变做出反应。