泡泡网显卡频道 PCPOP首页      /      显卡     /      评测    /    正文

纹理压缩的奇妙之旅 漫谈X800的3Dc

    当我们提着“Big Freakish Gun”在Q3A中和对手追逐的时候,当我们扮演着“Sam Fisher”蹑手蹑脚靠近敌人的时候,是否注意过那些凹凸不平的周围环境,那些细致的贴图呢?

    3D技术发展到今天,可以说已经到了一个相当成熟的地步,各种3D技术让我们在电脑上体验着虚拟中的现实,然而我们对视觉效果的追求却越来越不满足。

    显示芯片的发展速度表面上让我们应接不暇。但是,这毕竟只是对于一些3D技术的实现和提速罢了。真正引导3D技术发展的还是软件,或者具体地说的解决3D处理过程中的算法问题。这些算法被写进诸如DirectX这样的标准中,再由芯片厂商在他们的芯片中通过电路实现,最终被游戏开发人员在程序中采用,并被我们在游戏中体验到。

    大家知道,这次ATI发布X800显卡,各种随之而来的最新技术一时间让我们有些摸不到头脑。其中一项便是被称之为3Dc的技术。那么究竟这个3Dc技术是怎么一回事,它到底具有什么样的意义呢?就请和supercfc一起来进入这奇妙的纹理压缩世界。

    不小心说漏了嘴,可能已经有朋友注意到了这个“纹理压缩”了。不错,这个最新的3Dc技术其实就是一种全新的纹理压缩技术。其名称的含义也就是3D Compression了,3Dc则是它的缩写。

    什么是纹理压缩,3Dc究竟有什么最新的特点,就请您继续耐心地阅读下去……

导读

    本文将首先从3D技术中的纹理压缩谈起,大致介绍纹理压缩技术从S3TC逐步发展到DXTC时代的过程。

    然后笔者还将介绍:

    · 一种虚拟的3D技术,法线贴图技术
    · 法线贴图技术采用传统纹理压缩技术时的弊端
    · 3Dc技术解决法线贴图的压缩问题
    · 3Dc技术的具体算法压缩比例
    · 3Dc技术的技术优势分析
    · 当前3Dc技术的前景分析困难所在
    · 3Dc技术能否成功的关键和规范问题<

    纹理压缩,英文原文是Texture-Compression,也有称之为材质压缩的,不过笔者喜欢称之为纹理压缩。因为这种技术实际上压缩的是没有往3D模型上贴图之前的图片,还不能称之为材质。

    『小提示-01:材质,通常指3D模型上的贴图效果。例如一个球体被贴上一幅大理石表面的图片后,便拥有了大理石材质。“材质”还包括物体的各种光学系数,例如环境光反射度、漫射光反射度、透明度、高光反射度等信息。』

    『小提示-02:纹理,我们通常形容2D效果时采用这个词,例如一幅拥有大理石纹理的图片。』

    首先我们先来理解一下纹理压缩技术。说得直白一些,所谓纹理压缩就是将预备贴到3D模型上的贴图进行数据压缩,从而节省它们所占用的显存空间容量。我们都知道,虚拟的3D环境或者是模型能够在电脑屏幕被我们看到,除了无数的点、线、面以外,最重要的是这些模型上面都被贴上了贴图。

 仅有骨架,3D图形是远远不能满足人们视觉要求的

    举一个现实中最形象的例子就是扎风筝。最开始我们用竹篾扎成的骨架仅仅是模型的立体几何构成的部分,后来在竹篾附上的丝绸或者是纸带都相当于3D模型的贴图。

 披上“虎皮”,就有点老虎的味道了   

 每个多边形都有一个平面贴图覆盖其上

    这些贴图都将作为一种资源文件被存储在相应的文件夹中,需要用到的时候会由程序调用,然后存储到显存中,通过显示芯片的运算贴到3D模型上。<

    现在的问题就来了,图片在被调用的时候,将耗费巨大的显卡资源。因为如果在实时的3D程序中,需要完成的贴图数量是非常巨大的,一个场景可能会同时需要调用很多个贴图文件。

   

 一张香蕉的贴图,左边是原图,右边是压缩后的贴图

    那么我们就来算一个帐。现在显卡支持的最大贴图文件尺寸是4096×4096像素。如果按照32位色来存储,我们可以轻易的算得一个贴图文件的大小是:4096×4096×32=536,870,912bit,也就是67,108,864Byte,合算是67MB。这意味着什么?这意味着256MB的显存也只能放上不到4张贴图。

   

 放大8倍的比较,左为原图,右为压缩后图片,后者存在细节损失

    『小提示-03:游戏开发者习惯使用的贴图尺寸通常是512×512或1024×1024像素。贴图文件虽然没有那么大,但同时需要调用的贴图数目却非常多,总容量仍然是目前的显存所远远不能满足的。』

    这样的话,再大的显存也是不够用的。于是就引入了我们今天的主题:纹理压缩。

    纹理压缩的原理就是将这些贴图进行压缩后存储进显存,这样就能大大的减小对显存容量的依赖。<

    最开始的纹理压缩技术并不是微软在DirectX中提出的,这种技术的渊源要追溯到5年以前了。最开始采用纹理压缩技术是S3在OpenGL中首先提出的,最初的名称叫做S3TC。

    到了1999年,微软吸纳了这种做法,在他们的DirectX中加入了纹理压缩技术,并且取名为DXTC(DirectX Texture Compression)。

 S3TC技术的原理

    博采众长的微软在这一步走的非常成功,他们的DXTC技术得到了游戏开发者的肯定,也被显示芯片厂商所支持。

    值得提醒的是,纹理压缩的技术虽然看似简单,但是将压缩后的数据存储进显存并不是终结。重要的是需要用显示芯片把这些压缩后的数据进行解压缩,再经过运算贴图到3D模型上。这个过程就需要显示芯片在硬件上支持了,如果不支持,对于压缩后的数据无法识别,照样不能完成纹理压缩,也不能发挥出纹理压缩的优势。

    看到这里,可能已经有一些朋友对纹理压缩有了一定的认识,但是如果简单的认为纹理压缩就是将BMP位图压成JPG一类的东西存储进显存里,然后再解开的话那就错了。

    纹理压缩应用的算法由于涉及硬件复杂度、解压效率、色彩空间变换等等技术问题,要比单纯的压缩图片复杂的多了。就拿我们刚刚提到的DXTC来讲,这其中就包含着5种不同的算法,DXT1一直到DXT5,这5种不同的算法是根据5种不同的情况来使用的。

    纹理压缩技术让游戏开发人员能够轻易的在较小的模型上贴上尺寸较大的纹理贴图,这样就能够让游戏更加逼真。微软的DXTC技术能够对纹理进行6:1的压缩,这就意味着原来一张贴图文件原大6MB,经压缩后存储进显存仅仅为1MB了,这样就能够在同样的显存容量中存储更多的贴图了。

    然而,DXTC纹理压缩技术虽然能够带来性能上的提升,但是这种压缩技术却是一种有损压缩,这也就意味着在压缩→存储→解压的过程中势必会对细节有一定的损失,但是这个损失的幅度并不是很大,所以人们也就接受了这种折中的做法。DXTC技术得到了充分而广泛的应用,几乎所有游戏都采用了这种技术。<    时过境迁,这种技术给人们带来方便和性能提升的同时也给3D程序开发埋下了隐患。这就要谈到我们今天所要介绍的另外一种技术了,这就是法线贴图(Normal Map)技术。

    『小提示-04:法线的概念大家最先接触于初中物理的光反射的部分,大意就是从一个面上的一点射出并垂直于这个面的一条射线。』

    什么是法线贴图技术呢?这是一种用来实现3D效果的一种技术,要想理解这种技术还请您听我慢慢道来。

    我们知道,在游戏中经常会有这样的情况,就是一个平面——这个平面在现实中并不是一个“平”面,例如砖墙的表面带有石质浮雕等等。这样的情况如果要求游戏开发人员将复杂的3D细节都做出来是不现实的,因为即使不计较在建模时候的复杂度,过多的3D细节也同样会大量消耗显示芯片的性能,让游戏根本没有可玩性。

 如何利用贴图实现凹凸效果呢?

    可行的方法就是将这个平面用一个贴图覆盖,用贴图的纹理实现一定的凹凸效果。但是这种方法实现的效果并不是很好,因为如果视角一变化,看起来就会像一张简单的画有图案的平面了。

    后来,聪明的游戏开发者想出了一种方法,就是在贴图过程中对贴图进行一定的处理,从而保证了在视角变换以后仍然保证有较为明显的凹凸效果。<

    我们知道,人之所以能够对景物看出立体感的主要原因是因为人有两只眼睛。两只眼睛看的景象是不同的,所以人们才能分辨出立体感来。但是,由于电脑的屏幕是一个平面,分辨3D效果就只能靠光影效果来实现了。

    举个简单的例子,这就像我们画素描的时候,为了不让一个球体看起来像是一个圆圈,必须让球体的一些区域是亮的,一些区域是暗的。而且从亮部转向暗部的时候是一个均匀的按照物理模型特点的过渡,这样画出来的球体才像个球体,电脑为我们绘制的过程也是一样。

 因为有明暗,我们才能将平面理解成立体

    基于这个道理,我们就不难理解可以通过贴图局部的亮暗变化来实现假的3D效果。换一种说法就是说我们可以通过在贴图上的局部做一些亮暗的变化来做到一种假的3D效果。

 光照因角度不同而呈现不同的明暗

    那么如何实时的对贴图进行转换呢?如果要实现虚拟的光影变换,我们最起码需要知道在一个平面上真正的凹凸的情况,这样才能让显示芯片进行运算,生成一种假的凹凸的效果。

    显然,记录真实的凹凸模型是得不偿失的——如果那样的话就没有任何意义了,我们需要用一种非常简单的方法来记录一个贴图的凹凸情况,于是就诞生了一种全新的方法,法线贴图技术。

    接下来,我们再回到我们刚才谈到的法线贴图的话题上。

    法线贴图就是记录了一个需要进行光影变换的贴图上的各个点的凹凸情况的贴图,显示芯片根据这个贴图的内容,来实时的生成新的有过光影变化的贴图,从而实现立体效果。

    那么,究竟是怎样利用法线贴图记录一个平面或者说是一个贴图的凹凸情况呢?我们知道,物体表面产生明暗变化的直接原因,就是光线照射角度的不同,光线垂直于平面的地方就亮,光线斜射到平面的地方就暗,光线照不到的地方就更暗(应该是黑色,但是由于环境光照所以不会有阴影是真正的黑色)。<

    学过初中物理的朋友一定还都记得,表示光线射向平面的角度时通常使用光线和该点法线角度来表示。这也就意味着,如果我们将一个贴图上所有点的法线记录起来的话,就不难再利用这些信息实现后期的假的凹凸效果了。

    记录这些法线的载体就被我们称为法线贴图。为什么称之为贴图呢?我们知道,一条法线是一个三维向量,一个三维向量由X、Y、Z等3个分量组成,于是人们想出了一个聪明的方法,就是以这3个分量当作红绿蓝3个颜色的值存储,这样的话就生成一张新的贴图了,这就是法线贴图的来历。

 采用色彩通道存储法线向量

    法线贴图其实并不是真正的贴图,所以也不会直接贴到物体的表面,它所起的作用就是记录每个点上的法线的方向。所以这个贴图如果看起来也会比较诡异,经常呈现一种偏蓝紫色的样子。

 法线贴图的生成过程

  

 Doom3中的一张纹理贴图和这张贴图对应的法线贴图

    『小提示-05:事实上,真正的法线贴图并不是记录贴图上每个点的法线的绝对角度,而是记录的是相对于平面的一个差值。这样的话,随着平面的3D变换都能够实现即时的法线运算了。』<

    采用法线贴图技术的优势就是利用很少的资源实现了效果非常好的凹凸效果,而且可以利用我们在开篇的时候提到的纹理压缩技术对法线贴图进行压缩,进一步节省资源。

 前面的那张圆球图案的法线贴图

    法线贴图技术的诞生要比纹理压缩技术晚,这就带来了另外一个问题——纹理压缩的过程中会损失掉一些细节,造成法线贴图的失真,从而导致最后的效果出现误差。

    产生这种结果的根本原因还是纹理压缩技术。因为作为一幅贴图来讲,其中绝大部分信息记录的都是每个点的颜色,如果要对纹理进行压缩的话,势必损失掉一些颜色的信息,这样的损失对于普通的贴图来讲影响是非常小的,因为玩家绝对不会去在意具体的一个点的颜色是否和原来的纹理保持了一致。

    但是,对于法线贴图就不是这样了,因为法线贴图中每个点的颜色反映的是该点法线的角度,也就是该点的凹凸的信息,如果这些信息丢失了,带来的结果就会糟糕的多——阴影失真是小,甚至可能造成贴图错误。<

 局部,没有采用压缩

 局部,采用DXTC压缩

 局部,采用3Dc算法压缩

    这样的结果我们自然不能去埋怨微软的DXTC技术,因为纹理压缩技术早就诞生了,而法线贴图技术却是一个比较新颖的事物。

    那么,如何解决法线贴图的压缩的问题呢?如何保证法线贴图在压缩的过程中失真较小而且能保证较大的压缩比呢?ATI的最新3Dc技术提供了较为满意的答案……<

    这样说来,ATI的3Dc其实并没有什么神秘的,这个技术的核心就是一种专门针对法线贴图的压缩的算法。

    现在我们终于进入了最关键的环节,就是3Dc技术的核心问题,法线贴图压缩算法。我接下来就为大家详细解释一下具体的原理。

    首先,3Dc压缩算法是一种基于“块”的压缩方式。什么叫做基于“块”呢?就是指压缩的过程中将要压缩的内容进行分块,再对每一个单独的“块”进行压缩。

    在3Dc技术中,ATI选择了将一个法线贴图分成若干个4×4像素(纹素)的块,每个块拥有16个像素。为什么这样分,这其中也是有一定的道理的。

    因为作为一个法线贴图来讲,虽然每个点表示了相应位置的凹凸情况。但是,一个平面的凹凸通常不会太细,即使有小尺寸的凹凸情况,也不会比贴图上4个像素还要小。所以ATI选择了以4×4个像素为一个基本的单元,然后对这个单元内的信息进行压缩。

 先将一个法线贴图分成很多4*4像素的块

    接下来我们面对的就是一个4×4像素的小的贴图了,这上面的16个点中分别以红、绿、蓝3个通道的颜色值记录了该点法线的方向,而这个方向恰恰就是该点的凹凸的情况的一个最直观的表达的形式。

 放大看每个独立的“块”

 提取其中任意的一个“块”

    接下来,3Dc技术将这16个点的颜色值中X项和Y项独立提取出来,分成两个4×4的矩阵,然后再针对每个矩阵进行压缩。<

    我们就拿X项作为例子来讲一讲压缩的最底层算法。

    现在我们已经得到了一个由16个数组成的矩阵,或者说是数列也可以,我们就不难从中提取出这16个数中的最大值和最小值,先暂时存储起来。

 将X项分量的值统计出来

    在得到了最大值和最小值以后,我们接下来的步骤就是要进行插值运算了。所谓插值运算,就是在这两个数之间插入一些经处理器生成的数值。具体到3Dc算法中,他们采用了在这最大值和最小值之间等分7份,然后将中间的6个值插进刚刚统计得来的最大值和最小值之间。

 将均分得来的值插到最大值和最小值之间z

    举个简单的例子,例如我们上面的这张图,现在经过统计,得到了最大值是240,最小值是128。我们就不难算出它们的差是112,将这112分成7份,每份就是16。

    所以我们就可以算出这8个数分别为:128、144、160、176、192、208、224、240,这其中除了最小值128和最大值240,剩下的6个数都是经计算得来的。

    『小提示-06:实际上在法线贴图的单通道颜色表示中,采用的是8bit二进制数,最大值是256,最小值是0。笔者举的例子中,240应该对应的二进制数是“11110000”,128对应的二进制值为“10000000”,为了形象的说明插值运算,笔者特意转化成十进制。』<

    有了插值运算的基础,我们接下来就不难理解其中压缩的实现方法了。因为我们在记录数据的时候就能够摒弃原来的16个数了,转而使用两个数(最大值和最小值)就能表示了,两个数自然要比16个数占的空间要小,这也就是压缩的意义所在。

    当然,这个过程中还有特别重要的一点就是将原数据和插值后的数据进行比较,从而让计算机知道那些不是最大值也不是最小值的点,究竟应该取这8个数值中的哪一个。

    再举个简单的例子,例如,在这个4×4的块中,其中第2行第3个像素的X项数值为154,经过比较,我们就将它本身的154舍掉,我们用插值中的156来代替它。

    这些信息也同样需要进行记录,而且这些信息占用的空间相对于具体的数据还要大,因为具体的数据仅仅需要记录那两个最大值和最小值就可以了。

    现在的问题就是我们如何来记录每个点的数值应该取插值得来的8个数值中的哪个数呢?最简单的就是用序号表示了。例如前面我们刚刚举的例子,第2行第3个像素采用了156,也就是8个数中的第3个,我们就用“2”来表示(最小的序号用0,最大的序号用7)。

    而表示序号的时候最大不过取到7,所以在存储的时候就大大的减少了占用的空间,仅仅使用一个3bit的二进制空间就能正好放下。

3Dc算法演示

    我们前面讲的仅仅是X项的压缩,Y项的压缩的道理是一样的。

    这个时候该有人起疑问了:X、Y两个分量都压缩了,怎么不提第3个分量——Z轴分量的事儿啊。在这里3Dc技术再次利用了一个非常巧妙的方法,就是根据这个向量是一个仅仅表示方向的向量的特点,将向量的长度取“256”,然后利用公式X2+Y2+Z2=2562,将Z在后期算出。<

    现在我们就可以通过计算,来看看3Dc技术究竟能够带来多大的压缩比例了:

    我们仍然举一个4×4像素的块的情况,首先我们来算算在没有压缩之前记录这16个点上的信息所需要的空间,由于未压缩之前采用的是32bit的标准位图来存储的信息,RGB等3个色彩通道的颜色值分别表示X、Y、Z的分量值,原来用作记录Alpha通道信息的通道则被浪费了,这样的话这16个点每个点都需要4个8bit的空间来记录相应的信息,总的占用空间就是4×8×16=512bit。

 采用未压缩格式需要512bit

    那么压缩以后呢?每个点需要分别用3bit记录X分量和Y分量的数值的编号,然后再分别开辟两个空间记录这16个点中的两个分量的最大值以及最小值,这么算起来的话总共需要的空间就是 6×16+8×4=128bit。

 压缩后仅仅需要128bit

    前后一对比,我们就能看出,3Dc技术的压缩比例是4:1,还是蛮大的。<

    那么采用3Dc技术压缩法线贴图能够带来什么好处呢?比以往采用DXTC有什么改进呢?

● 压缩比比较大,体现了压缩的优势

    我们看到,3Dc技术对于法线贴图的压缩比是恒定的4:1,这个比例相对于DXTC压缩技术中的6:1的压缩比要小一些,但是对于原数据来讲,能够将原来占用的空间缩减到1/4,压缩的意义也是非常大的。

    因为随着人们对游戏效果的要求不断的增加,法线贴图技术的应用将会越来越广泛,3Dc技术将使法线贴图中广泛应用,节省显存资源,从而起到提升性能的目的。

● 压缩失真小

    我们看到,在3Dc算法中其实是有一定的失真的,这一点也不必隐晦,因为如果在一个取样范围较大的空间实现压缩的话,失真是在所难免的,这16个点中每一个色彩通道的取值范围均有256个,3Dc算法仅仅使用了8个数来表示这些值,其中就有可能舍掉了248个数。

    但是由于我们采用的8个数值在这个空间中是平均分布的,而且每个值都用了和原数据最为接近的一个值来表示,所以每个数值失真的幅度就被控制在了[0,16]的闭区间上。

 3Dc算法让法线贴图保持了较小的失真(点击放大)

    当然这个范围还是一个变化的范围,每个4×4的块中失真幅度的大小还和这个块中的最大值以及最小值有关。就像我们前面举的例子,在最小值为128,最大值为240的时候,失真幅度的取值范围就被限制在了[0,7]的闭区间上。

    显然,随着每个块的具体情况不同,3Dc算法的失真幅度的可能性也是不断变化的,而且由于实际情况中在一个4×4的块中两个极值的差通常会比较接近,所以实际应用中3Dc的失真的影响也会比较小。<

    算法简单,效率高,前面笔者已经轻易的给大家解释了3Dc对于法线贴图的纹理压缩的具体算法,我们可以看到,在3Dc算法中所需要做的步骤一共有以下几点: 

● CPU需要做

    将法线贴图分块 → 分离其中的X分量和Y分量 → 统计每个分量上的最大值和最小值 → 计算得到中间的插值 → 统计每个值的大小,确定每个值应取的新值 → 用3bit的值存储每个点上的新值应该取第几个数 → 将16个3bit的值和最大值最小值送进显存,

● 显示芯片需要做的步骤

    从显存读出数据 → 经显示芯片运算,根据最大值和最小值算出中间的插值 → 根据每个点的序号为每个点找出新值,重新生成解压后的法线贴图 → 接下来的操作就和普通的贴图过程一致了。

    我们可以看到,这个算法的具体操作过程非常简单,这些步骤在通过CPU和显示芯片运算的过程中耗费的资源相对于其他的步骤来讲比较小,所以CPU和显示芯片就能够在更短的时间内完成更多的操作,从而提升了效率,反映在用户的直观感受上就是看到了3D效果但是显示的帧速率并没有太大的降低。<

    一个技术无论多么先进,都不能意味着它一定能够获得成功,RAMBUS就是一个例子。一个技术能够获得成功以及人们的认可的条件是多方面的。那么3Dc技术能不能获得广泛的应用呢?

    在看完了前面笔者对3Dc技术的介绍以后以后,我们对这个技术已经有了一定的认识,根据这个技术的特点,我们可以轻易的看到以下几点。

    首先,3Dc技术有着应用非常广泛的技术基础作铺垫。3Dc技术作为一种纹理压缩的技术,是采纳了目前非常流行,而且已经获得广泛应用的技术的特点而衍生出的一种新技术。它的前辈,S3TC以及DXTC都获得了非常大的成功。所以,人们在接受3Dc技术的过程中并不会觉得非常的生疏,反而会觉得这种技术是一种比较容易接受的技术。

    其次,3Dc技术和目前的技术没有任何冲突的地方,3Dc技术只是一种纹理压缩技术的扩展,并不是否定或者改进了原先惯用的某种技术,所以3Dc技术不会对现有的程序员带来任何威胁。它不会让程序员感到反感。这一点其实是非常重要的。保持住了程序员的习惯并且不用让他们摒弃原来的技术就能够从最根本上给人们建立一种友好的印象。

 程序员能否接受3Dc呢?

    再其次,3Dc技术算法简单易懂,实施容易,我们可以从算法的解释中看出这一点,所以如果要在显示芯片级别加入这一技术的支持,似乎也并不是很难。所以,这项技术在应用上并没有什么技术上的阻碍。

    最后,3Dc技术由于已经公开了具体的算法,所以在技术层面上讲其实已经属于一种开放性的技术了,这使得如果真的有其他的显示芯片的厂商乐意采用这种技术的话,是非常容易的。<

    那么,在有了这些条件以后是否就意味着这种技术就一定能够获得成功呢?这也是一件非常不好说的问题,因为3Dc技术的普及和广泛应用也充满着非常多的阻碍因素。

    首先,这种技术需要显示芯片硬件支持,如果说前期的对法线贴图的压缩工作是由CPU完成,我们可以通过软件的升级来实现的话,那么在数据的解压部分就必须要硬件级别的支持了。

 3Dc技术,目前只有X800系列支持

    这么一来,目前支持3Dc技术的显示芯片就只有R420一款了,这就意味着,3Dc技术的应用范围被限制在了一个非常小的范围里,我们在这里谈了半天3Dc技术也只是虚无缥缈的东西。按照最好的情况发展的话,3Dc技术如果想要得到更为广泛的应用,或者说是进入其他品牌的显示芯片最起码也要等到下一代显示芯片诞生了,最起码也要“秋后算帐”了。

    『小提示-07:因为显示芯片的发布有一个规律,就是每半年一代,今年4月和5月发布了NV40和R420,那么下一代显示芯片就将会在今年秋天偏后的时候推出了,所以称为“秋后算帐”。』

    看来,硬件能否支持是一个3Dc技术应用的敲门砖。

    其次,软件层面上虽然3Dc技术是硬件级别的一种技术,但是软硬始终是不可分离的,虽然真正的操作是硬件完成的,但是,计算机并不知道何时应用这一技术,也就是针对哪些内容采用这一技术。

    这一点非常重要,因为计算机虽然能够根据条件判断什么该做什么不该做,但是人们必须给它一个可以判断的条件,这在具体的操作中就是在法线贴图中做以相应的标记,让计算机知道在什么情况下应用3Dc技术。

    现在的问题就非常明白了,如果想应用这种技术,就必须要游戏开发人员多做一些工作,就是将需要采用这种技术压缩的贴图保存成指定的格式,这样才能程序执行的过程中,读取贴图文件的时候采取具体的操作。

    这么一来,软件对3Dc技术的普及也起着相当重要的作用,如果想让更多的游戏支持3Dc技术,就必须让游戏开发人员认识到这种技术的优越性,并且肯为这个技术多付出一定的劳动。

    那么,也就是说,3Dc能不能获得游戏的支持也是决定能不能实现这一技术的一个原因。<

    最后一个非常重要的因素就是3Dc能否成为一种大家都认可的规范,有一句话说得好,就是“无规矩无以成方圆”,在计算机行业里同样是这个道理,我们接触的各个方面都遵循着不同的规范,如果想让一个技术能够被大家都接受,成为一个大家都必须接受的规范是再好不过的主意了。

    但是,规范能够被认可,被采用,除了技术方面的问题还有就是该规范已经拥有的地位,那么对于3Dc技术来讲,最好的方法就是加入目前最为权威的一个规范,DirectX了。

    微软的DirectX在业界的影响力我们已经不用再说了,其统治地位是任何人都不可动摇的,3Dc技术如果能够被DirectX所采纳,就等于获得了最大的认可。

    然而DirectX究竟能不能像当年采纳S3TC技术一样采纳3Dc技术,这还是个未知数,这完全就要看微软的意思了。

    所以说,3Dc技术能够加入DirectX规范也是困扰着这一技术是否能成功的一个很重要的因素。

    综合以上三点,我们可以看到,3Dc技术作为一个新生事物,取得成功的道路上还有很多的艰难险阻,并不是说技术先进,应用简单就能让这个技术迅速走向广泛的实际应用的。

    既有优势,又有劣势,这似乎是任何新生事物的共同特点,3Dc技术也毫不例外的是这样,在技术层面上,我们看到了其技术先进,算法简单,但是在实际的情况中,该项技术要应用也是有很多困难的,目前支持的硬件产品少,游戏不能直接支持等等因素也制约着这种技术的普及。

    更重要的是,规范问题让3Dc技术究竟能否成为未来显卡技术的一个标准的事情变成了一个谜,人们对于3Dc技术也都持着一种观望的态度。

    前途是光明的,道路是曲折的,任何事物获得成功都不可能在一夜之间实现,3Dc技术也是这样,我们希望它能够获得成功,这其中和纷纷扬扬的N/A之争并无太大关系,因为毕竟这种技术能够在效果和性能两者之间取到一个比较合适的平衡点。在这里我们也希望3Dc技术能够获得更多的人的支持,从而为显示芯片的发展起到一定的作用,为玩家的眼球带来更加逼真的效果。<

0人已赞

关注我们

泡泡网

手机扫码关注