abs3dblend350.gif (9778 bytes) 

揭开3D纹理的面纱

七月案例分析 ] 穷人的劳斯莱斯 ] FSAA有什么价值 ] 动力之源 ] QDR:内存的未来之星 ] OpenML挑战DirectX ] 新一轮3D之战 ] 双雄对峙 ] 后来居上的Sensaura ] [ 揭开3D纹理的面纱 ] DVD播放机选购指南 ] 新3D之王 ] 新一代nVidia剖析 ] ATI的新曙光 ] TNT2 Pro挑战极限 ] 优秀的内存优化工具Cacheman ] Quadro DDR之野望 ] 怎样设计"JS牌"音箱 ] 袖珍内存优化工具RAMFree ] 余音绕梁A3D 3.0 ] 新一代A3D声卡SQ3500 ] 3D新纪元 ] 3D奇兵GP-1 ] 我有两颗强劲的“芯” ] 新世纪野人揭秘 ] 划时代的GeForce 256 ] 图形处理器——GeForce 256 ] 新世纪的野人 ] 神秘高手Glaze 3D ] 超频是我们的生命 ] 声卡芯片的过去与未来(下) ] 声卡芯片的过去与未来(中) ] 声卡芯片的过去与未来(上) ] 关于Permedia2 ] 3D加速芯片的过去与未来(下) ] 3D加速芯片的过去与未来(上) ] Intel的3D新杀手——i752详解 ] 奔腾III的新搭档i752 ] 划时代的TNT3 ] 野人又回来了 ] 细说S3 Savage4 ] 兼容CPU挑战Intel ] 论文(1998) ]

3border_l.gif (2501 bytes)

3border_s.gif (1818 bytes)

Abs3D主页
Abs3D留言
Abs3D搜索
Abs3D目录

3border_s.gif (1818 bytes)

3border_s.gif (1818 bytes)

Abs3D转移

http://abs3d.yeah.net
http://abs3d.126.com

Abs3D镜像

http://abs3d.webprovider.com
http://abs3d.myrice.com
http://yunzhu.163.net
http://3dabs.webprovider.com

3D纹理揭开面纱

朱云

2000.4

(独家授权于《电脑报》)

    323日,nVidia公司宣布微软将在其新一代DirectX中采用nVidia开发的Volume Texture Compression Format(体积纹理压缩格式),简称VTC。这标志着压缩格式的3D纹理第一次正式进入了主流3D软件和硬件领域,不但将可能缓解因特网上传输高质量纹理导致的高带宽需求,也将进一步使高质量的PC游戏更为真实、细腻。

3D纹理的缘起

    我们知道,现有的纹理贴图,就是将各种不同的2D平面图形贴在空间中3D物体的表面上,同种物体使用同样的2D纹理,以此来简化表现不同种类物体的不同表面效果,既节省了系统存储和处理物体表面信息的资源,又比较真实的反映出了客观(或想象)的世界。2D纹理就是一张张的平面图形(往往是正方形的),因此只包括一个平面上的像素点(称图素,texel),每个点在纹理内部只有2维的相对坐标(贴在物体上后就有3维的实际坐标了)。2D纹理由于过于简化,因此在各个方向上看起来并没有质地上的不同,如果物体是平滑的就很难表现出局部的高低,光线从不同角度照射也基本没有区别。

    为了达到更真实多变的纹理贴图效果,各硬件、软件公司想出了很多改进方法,其中3D纹理是最为彻底的革新途径。3D纹理可以看作是各种不同的立方体材料,内部包括整个体积的像素点(称体素,voxel),每个点在纹理内部空间中有3维的相对坐标你把它想象成有内部花纹的大理石(或水晶)立方体就行了。3D纹理贴图其实称作3D立方体的雕刻和变形更为合适,因为不再需要将图案贴在表面,而是将3D纹理部分地取舍和扭曲,把它变成最终物体的形状。这样我们就有了非常接近于实际物体的材料来构成虚幻的3D世界(最终取消纹理、让每个物体都各不相同的3D系统还非常遥远),尽管我们付出的系统资源将随着纹理的复杂程度呈立方级数增加(2D纹理耗费的系统资源只随着纹理的复杂程度呈几何级数增加)。

3D纹理的发展

    很难准确的说3D纹理是从何时开始出现的:当年3DlabsPermedia 3中提出有少许高度的纹理概念,MatroxG400开始使用凹凸纹理,其他3D芯片也可以实现简单的凹凸纹理,后来又出现了多种环境贴图纹理(从各方向上看起来有些不同):有G400凹凸环境贴图(3层纹理)、nVidiaGeForce 256的立方环境贴图(6层纹理)和ATIRage 6C的全部各种环境贴图(从1层纹理到6层纹理)。现在,真正意义上的3D纹理终于有了真正的内部3维相对坐标(相当于数十层、甚至数百层2D纹理),至今已经有包括Rage 6C3D纹理和开头说到的nVidiaVTC

3D纹理的优点不言而喻,就是更复杂多变,为新一代更加细腻、拟真的3D图形系统提供了发展基础。3D纹理的缺点也同优点一样明显:首先是非常大的数据量会占用难以想象的系统资源,存储方面的解决办法就是下一节要讲到的3D纹理压缩,3D处理的过程中进行纹理数据的过滤和半透明混合等工作也都比较困难棗3D纹理的双线性过滤涉及8个点的数据平均(2D纹理是只要4个点),接近于2D纹理三线性过滤的运算量(9个点);3D纹理的半透明混合则涉及很多层体素点数据的色彩混合,运算量也相当大;另外,3D纹理仅仅是现在这样直接被“雕刻”成物体倒还简单,今后不可避免的将对3D纹理进行几何变形,以往T&L引擎(以及CPU)只负责物体顶点的几何变换,这样一来就得计算3D纹理中每一个点的空间坐标,难以想象的浮点几何变换的运算量恐怕不是短时间内能实现的。

3D纹理的压缩

    让我们来直观地了解一下3D纹理的数据量。2D纹理一般是正方形的,如256x256(图素)、512x512等,最大的可以达到4096x40963D纹理则一般是立方体的,如32x32x32(体素)、64x64x64等,最大暂时也只能有256x256x256。因为256x256x256就是16M个体素点,再乘上每个点16位(2个字节/Byte)或32位(4Byte)的色彩精度就是32MB64MB的数据量,也就是说现在主流的显示卡内存只能装下一个低档次的3D纹理(Voodoo时代,2D大纹理的标准就是256x256/16位)。因此3D纹理一定要经过压缩才具有实用价值。

    一说到图像压缩,大家肯定会想到JPGGIF等静态图像压缩格式和MPEG动态图像压缩格式,但实用的纹理压缩算法必须符合几个条件:一要能高速、实时解压缩,不影响纹理贴图过程的速度,所以JPEG(静态图像专家组)、Wavelets(子波压缩)等高压缩率、低速度的的方法就不合适了(试过S3TC纹理压缩程序的朋友就能发现,S3TC格式的图形文件,比高压缩系数的JPG等格式的文件大得多,一般只比BMP格式小2~4倍);二要能够部分解压缩,就是说我们不能把整个纹理全部解压缩(有大量数据互相相关的算法就是这样,如MPEG必须有上一帧图像为基础才能计算下一帧)后再进行纹理贴图,因为没有“地方”放解压缩后的数据(需要全部存放就失去压缩的意义了),实际上只能在贴图过程中用少量高速CACHE随时缓冲当前使用的部分纹理的数据。

    2D纹理共有三种主要压缩方法:Videologic最早的VQVector Quantization,矢量压缩)、S3S3TC(微软在DirectX 6中使用时称为DXTCOpenGL里仍称S3TC)、3dfxFXT1DXTC改进版),最大压缩率都在1/6~1/8。这些压缩方法都是建立图形单位(多个图素单元组成)的索引表,再用索引表中的地址(索引号)来代替原数据,将数据量较大幅度减少。不同的是S3TCFXT1在纹理的多个部分建立不同的索引表,因此对小纹理的压缩效果同大纹理一样好;而VQ只为整个纹理建立一个索引表,纹理越大压缩率越高。

    2D纹理压缩方法很容易扩展到3D纹理领域。nVidiaATI都没有公布自己的3D纹理压缩方法的细节,但我们可以估计到由于S3TC2D纹理压缩的事实标准,nVidia的新3D纹理压缩标准VTC应该以它为基础(最近nVidiaS3达成了互相使用专利的许可协议),至少有相当多的类似之处。有一点可以肯定,目前3D纹理压缩需要极大的压缩率,才能使天文数字的3D纹理数据量变得平易近人;这也不是不可能的,因为数据量越大,重复的图形单位就越多,也可以采用更大的图形单位编制索引表棗VQ的极限压缩率就高达1/25,如果VTC能达到1/100左右的压缩率,主流的1024x1024x1024/32位的纹理就能被控制在可以忍受的32MB~40MB大小。

3D纹理的实现

    由于3D纹理的贴图和压缩都需要强大的硬件支持,估计软件模拟是难以实用化的。nVidia宣布将在今年年中开始使用VTC标准,届时正是GeForce2(代号为NV15)和NV11全面推出之时,因此我们可以顺理成章地推断至少GeForce2一定会具有VTC标准3D纹理贴图及压缩的硬件加速功能。ATI代号为Rage 6C的新产品的上市日期很可能同GeForce2相近,ATI的硬件3D纹理功能也将在Rage 6C中亮相。不同的是,nVidia强调3D纹理数据的线性存取,而ATI注重已有的OpenGL兼容性。

    新的3D特性没有软件的使用也是不行的,而API的接纳和支持尤为重要。OpenGL 1.2已经能够支持S3TCT&L3D纹理,但对纹理压缩采取开方性的“放任”态度;DirectX中的Direct3D是从5.0版开始完善起来,而且普及程度超过了OpenGL3dfx“私有”的Glide,从6.0版开始包括来自S3S3TCDXTC),从7.0版开始使用也是来自nVidiaT&L,现在新版的DirectX将支持VTC 3D纹理压缩标准,看样子就是预定今年夏天发行、打算在各方面超越OpenGL8.0版。

    在软硬件同时到位的情况下,希望3D纹理能得到游戏工业的广泛接受,再不要象S3TC那样叫好不叫座,至少也得接近T&L的普及水平才能算成功。

纹理技术的前景

    3D纹理是继T&L之后,主流3D体系结构的又一次重大变革和提高,以游戏为目标的主流3D的发展第一次领先于以制图为中心的专业3D。但同时3D纹理也是消耗掉3D芯片每半年翻一番的处理能力的一个“好出路”,不然还有多少人打算买新的3D显示卡呢?

    由于3D纹理有着鲜明的优势和弱点,3D纹理和2D纹理将在很长的时间内共存,直到系统资源极大丰富或者新的算法能够生成复杂而且低数据量的纹理时才会有所改变。将来一方面更多层次的(甚至是深度不同的)2D纹理能表现出更丰富的效果,另一方面3D纹理用来表达重要的、复杂的物体,两者相互取长补短才能达到图形质量、速度之间的最佳平衡。另外,3D纹理的使用对开发人员提出了截然不同的挑战:谁会为了大理石内部看不到的花纹浪费大量时间呢?因此3D纹理的接受和使用一定是一个长期的过程。

3border_l.gif (2501 bytes)

Abs3D主页 ] 回上一层 ]

Send mail to webmaster@abs3d.webprovider.com with questions or comments about this web site.
Copyright © 1999 Absolute 3D
Last modified: July 08, 2000

[an error occurred while processing this directive]