在3D计算机图形系统中压缩顶点参数数据的方法和设备与流程

文档序号:11433462阅读:488来源:国知局
在3D计算机图形系统中压缩顶点参数数据的方法和设备与流程
本申请是申请日为2011年09月12日、申请号为201180043684.8、名称为“用于基于图块的3d计算机图形系统的可随机访问的无损参数数据压缩”的中国专利申请的分案申请。本发明涉及用于基于图块(tilebased)的3维计算机图形系统中参数数据的无损压缩的方法和装置。
背景技术
:随着技术的快速发展,3维计算机生成的图像的复杂性也以相同速度增加。人们可以使用顶点和三角网格很容易地为非常复杂的3d对象(像人类运动)建立计算机模型。然后这种3d模型可以被发送至3d计算机图形系统,在该系统中,动感的3d图像可以被生成在计算机屏幕上。计算机生成的3d动感图像被广泛地用在3d计算机游戏、导航工具和计算机辅助工程设计工具中。3d计算机图形系统必须处理对更复杂的图形和更快的显示速度的不断需求。随着显示模型中细节的增加,越来越多的图形基元(primitive)和顶点被使用。另外,由于纹理和着色(shading)技术已经逐步发展,尤其随着可编程着色器(shader)语言的使用,越来越多的信息被关联于顶点数据(顶点参数数据)。在一些情况中,顶点参数数据大小可以是每个顶点大约100个32位字,并且在图像的渲染中可能存在百万个顶点。因此,在3d渲染中顶点参数数据的存储空间可以很容易地达到数百mb。由于3d计算机图形系统需要处理大量的顶点参数数据,该系统的性能经常受到顶点参数数据存储宽带的限制。对于基于图块的3d计算机图形系统而言尤其如此,其中被写入内部存储器中的顶点参数数据可以针对不同的图块(tile)而被多次读取,在该不同的图块中来自基元的顶点需要执行渲染。对于3d计算机图形系统来说,通过压缩3d渲染中使用的顶点参数数据来减小顶点参数数据带宽将是非常有益的。正如本领域技术人员所知晓的,基于图块的3d计算机图形系统将渲染表面划分成多个n×m的像素图块。如三角形、直线或点的基元仅仅针对与该基元重叠的图块而被处理。图1中示出在基于图块的3d计算机图形系统中用于平铺(tiling)的主要步骤。在3d渲染中,包含某些共享顶点的基元和在相似位置中的基元可以及时地连续到达。为了使对于顶点参数数据的存储器访问更有效,基于图块的3d计算机图形系统可以在基元的周围定义图块的边界框,并根据边界框中的图块及其包含的基元来限制引入的基元的数量。这允许来自与这些图块重叠的基元的顶点参数数据被一起组合到基元块中。基元通过索引至这些基元块中的索引来构建。为了控制顶点参数数据的缓冲区大小,这里通常存在着顶点的最大数量和包含在基元块中的基元的最大数量的限制,例如32个顶点和64个基元。图2中示出了来自基元块的数据结构。存在着用于基元块中顶点参数数据的定义(如顶点的数量和基元的数量)的位于开始位置处的基元块报头字,如图2中的20所示。在基元块报头字之后是来自基元块中的许多个顶点的顶点参数数据,如图2中的21所示。在该方案中,在3d渲染期间,来自基元块的一些基元可以被一些图块引用,而其他基元可以在其他图块中被引用。对基元块中顶点参数数据的访问要求对来自数据流的基元块进行随机访问。而且,基元块中的顶点参数数据可能被需要用于不同图块中的渲染,所以顶点参数数据被一次写入但可以被多次读取。对3d顶点参数数据压缩算法的常规要求是快速、无损压缩、以及压缩和解压缩算法本身所使用的最小存储器空间。这是因为要求快速和高质量3d计算机图形系统被实施在集成电路中的小硅面积中。对于基于图块的3d计算机图形系统,顶点参数数据压缩算法的附加要求是具备来自被压缩数据流的随机数据访问以及解压缩中快速且简单的算法的能力。一些常规无损压缩算法(如霍夫曼编码/解码)需要常规大小的数据缓冲区以执行压缩。这对于具有有限硅面积的3d计算机图形系统来说是不合适的。运行长度编码不需要用于压缩的额外数据缓冲区,但是像其他熵编码算法,数据压缩在连续访问的数据流(如视频显示中的彩色数据流)上被执行。如果在基于图块的3d计算机图形系统中被使用,用于基元块的整个顶点参数数据流必须在任何顶点数据可以被访问之前被解压缩。这对于基于图块的渲染而言是极其低效的,尤其是如果基元块包含覆盖许多图块的巨大三角形,在这种情况下整个顶点参数数据流被解压缩许多次,即使来自基元块的仅一些顶点被使用。通常,顶点参数数据值在3d计算机图形系统中被存储为32位浮点值。针对浮点顶点数据值使用定点表示可以很好地压缩基元块中的顶点数据。在定点格式中,浮点值可以由整数和固定数量的小数位一起表示。该方法将引起精确度降低,但是可以在来自顶点的x和y坐标数据上很好地工作。因为计算机图形屏幕上的显示分辨率被固定为像素单元的一部分,因此来自屏幕上所渲染的基元的x和y坐标被从原始浮点值转换成具有有限分辨率的屏幕值。对于其他顶点参数数据(像用于深度的z、rhw和纹理坐标设置),数据的高精确度必须通过3d显示管来维持。已渲染图像中的伪像(artifact)可能由这些顶点参数数据中的表示的被降低精确度而引起。一些顶点数据压缩算法根据顶点的几何位置来压缩顶点参数数据值。例如,顶点被选为三角网格中的原点,顶点参数数据与来自原点顶点的参数数据之间的差值(增量值)被存储,而不是存储全部顶点参数数据值。增量值可以由整数或具有减小的范围以压缩数据流的定点值表示。此种算法适用于来自三角网格的顶点,其中顶点之间的顶点参数数据值在有限的范围内。压缩比率与表示增量值所需的位的数量有关。如长三角形带的常用三角网格可以包含具有以下特征的顶点:对于该种顶点,在基元块中顶点数据值的范围是巨大的。在这种情况中,由于需要许多位来存储增量值而使得压缩将是不可能的。为了在基于图块的3d计算机图形系统中降低顶点参数数据存储带宽,来自输入流的所有基元被预处理以移除屏幕外的、背面的、被修剪的或太小而不能显示的任何基元。在预处理之后,剩余基元被合并至具有固定数量的顶点的基元块中并被写入内部参数存储器中以用于3d处理。因此,基元块中的顶点并不保证属于单个三角网格,基元块中顶点参数数据值的范围可能太大而不能利用来自顶点原点的增量值进行压缩。技术实现要素:本发明的优选实施方式包括可以被用于3d计算机图形顶点参数数据压缩的无损压缩方法和系统。其允许图形顶点参数数据被存储至较小的存储器空间中并因此降低图形设备的存储器需求。本发明能够采用简单、快速并需要非常有限的存储缓冲区的算法。这些算法还使得压缩后具有固定大小的顶点参数数据,从而允许随机访问基元块数据流中已压缩的顶点数据,这对于基于图块的3d计算机图形系统是特别有益的。在第一方面中,本发明提供一种在3d计算机图形系统中压缩顶点参数数据的方法,其中顶点参数数据包括与多个顶点相关的数据块,该与每个顶点相关的数据包括与至少一个参数有关的多字节数据,该方法包括以下步骤:将多字节数据划分成单字节;将来自与每个顶点有关的数据的相应字节组合在一起以形成多个字节块;以及使用压缩方法压缩字节块。这里使用的术语“相应字节”指的是多字节数据中的字节位置。因此,用于描述每个顶点的特定参数的数据值的最高有效字节(msb)被组合在一起以形成msb的字节块。类似地,用于那个参数的每个数据值的最低有效字节(lsb)被组合在一起以形成另一个字节块。发明人发现在图形顶点参数数据中,与完整的多字节值之间的相关性相比,多字节值的相应单个字节之间通常存在更大的相关性,且因此存在更大的压缩余地。不同字节块可以根据他们的内容使用不同压缩算法而被压缩。例如,字节块中所有字节相同的情况与字节被分散在大数值范围中的情况相比,字节块能够更有效地被压缩。顶点参数数据通常是浮点数,诸如32位浮点数据,但是本发明同样适用于定点值数据。顶点参数可以是如x、y和z坐标以及rhw和纹理坐标u、v、s和t。为了允许合适的压缩算法的确定,优选地,压缩字节块的步骤包括评定字节块的内容以及基于字节块的内容选择压缩算法。优选地,评定步骤包括确定字节块中唯一字节的数量及确定这些唯一字节的分布。如果顶点的每个参数的顶点参数数据包括符号位,则所述方法还包括以下步骤:在划分步骤前将符号位移动至最低有效字节。这是有益的,因为通常msb比lsb具有更大的相关性,并且将符号位移动至lsb因此增加了msb字节块的可压缩性但是对于lsb字节块的可压缩性并无太大影响。压缩步骤可以包括使用第一压缩算法压缩第一字节块以及使用第二压缩算法压缩第二字节块。一种优选的压缩方法包括以下步骤:将字节块中至少一个字节存储为字节原点,并将字节块中剩余字节中的每个剩余字节存储为与字节原点的差值。优选地,选择字节块中具有最小值的字节作为字节原点。优选地,所述方法包括将字节块中多个字节存储为单独的字节原点,并且将字节块中的剩余字节中的每个剩余字节存储为与字节原点中的一个字节原点的差值。多个字节原点的使用允许对仅使用单个字节原点不能被压缩的数据进行压缩。优选地,压缩步骤包括将字节块中的最小数量的字节存储为字节原点,该字节原点使得所有的差值都小于预定值。还可以存在着由图形系统设置的最大数量的字节原点,以使如果达到该最大数量且差值仍旧超过预定值,则必须使用不同的压缩方案。字节块中的字节数据优选地以降序或升序进行分类,以允许能够被用于压缩数据块的具有低于预定值的差值的字节原点被计算。优选地,压缩步骤还包括:a)将来自字节块的第一字节和第二字节存储为用于定义字节范围的最大和最小字节值;b)核查随后字节的值,并且如果随后字节的值在字节范围外时,则用该随后字节的值替代最大或最小字节值以形成更新的最大和最小字节值并更新字节范围;c)针对字节块中的每个随后字节重复步骤b),直至定义字节范围所需的位数超出预定位数,然后d)将字节范围拆分成两个字节范围,两个范围中的每一个范围使用预定位数或较少位数可定义;e)核查每个随后字节的值,并且如果随后字节的值在所有字节范围外,则用该随后字节的值替代其中一个范围的最大或最小字节值以形成更新的最大和最小字节值及更新的字节范围;f)针对字节块中的每个随后字节重复步骤e)直至定义字节范围所需的位数超出预定的位数,并且然后重复步骤e)直至字节块中所有字节都在字节范围内;其中字节块中字节范围的数量与压缩步骤中使用的字节原点的数量一致。优选地,所述方法还包括以下步骤:在步骤f)后合并两个字节范围以形成合并的字节范围压缩步骤可以包括将字节块中的每个唯一字节存储在字节表中并参考字节表来形成对字节块中的字节进行编码的字节索引。压缩步骤可以包括以下步骤:识别字节块中的唯一字节;在字节增量表中将至少一个唯一字节存储为原始字节原点;在字节增量表中将剩余的唯一字节存储为与前一字节或字节原点的差值;以及通过参考字节增量表来形成用于对字节块中的字节进行编码的字节索引。压缩步骤还可以包括以下步骤:在字节增量表中将唯一字节中的第一个唯一字节存储为原始字节原点;当与前一字节或前一字节原点的差值小于预定值时,将随后字节存储为差值;以及当与前一字节或前一字节原点的差值等于或大于预定值时,将随后字节存储为进一步的原始字节原点。多个唯一字节可以被存储为原始字节原点,且剩余字节中的每一个剩余字节被存储为与其中一个原始字节原点的差值。然后字节增量表可以包括控制位,该控制位用于指示字节增量表中的随后数据是原始字节原点还是差值。3d计算机图形系统是基于图块的3d计算机图形系统。本发明对于基于图块的系统是特别有益的,因为其允许随机访问已压缩的数据而不必解压缩所有的数据。优选地,所述方法还包括以下步骤:在压缩步骤后合并字节块以形成压缩数据流。在另一方面,本发明提供用于在3d计算机图形系统中压缩顶点参数数据的设备,其中顶点参数数据包括与多个顶点相关的数据块,与每个顶点相关的数据包括与至少一个参数相关的多字节数据,该设备包括:划分装置,被配置成将多字节数据划分成单字节并将来自于与每个顶点相关的数据的相应字节组合在一起以形成多个字节块;以及压缩装置,被配置成使用压缩算法压缩字节块中的至少一个字节块。所述设备还可以包括评定装置,被配置成评定字节块的内容并基于字节块的内容选择压缩算法。顶点的每个参数的顶点参数数据可以包括符号位,则所述设备还可以包括符号位移动装置,被配置成在由划分装置划分数据之前将符号位移动至最低有效字节。在另一方面中,本发明提供在3d计算机图形系统中解压缩顶点参数数据的方法,与每个顶点相关的解压缩数据包括与至少一个参数相关的多字节数据,其中与每个参数相关的解压缩顶点参数数据包括解压缩数据的多个单独字节块,每个字节块包含与来自多个顶点的多字节数据的相应字节相关的数据,该方法包括:使用在每个字节块的报头中指示的解压缩算法来解压缩每个字节块以提供解压缩字节块;以及通过将来自与每个顶点相关的解压缩字节块的字节合并到一起来重组顶点参数数据。解压缩方法基本上是压缩过程的相反过程。因此,根据压缩数据的性质,该解压缩方法还可以包括一个或多个以下步骤:a)从压缩的字节数据流中读取多个字节原点值;b)从压缩的数据中读取差值,从压缩的数据中读取字节原点的索引,并将差值加至相应的字节原点以重构原始字节数据;c)通过读取控制位来根据压缩的字节数据流构造唯一字节表并将差值加至原始字节原点以形成唯一字节至,该控制位指示随后数据是原始字节还是差值;d)从压缩的数据中读取索引值并获取相应的唯一字节表条目作为原始字节数据;以及e)在合并字节块的步骤之后,将符号位从最低有效字节移动至最高有效字节。在另一方面中,本发明提供用于在3d计算机图形系统中解压缩电子顶点参数数据的设备,与每个顶点相关的解压缩数据包括与至少一个参数相关的多字节数据,其中与每个参数相关的压缩顶点参数数据包括压缩数据的多个单独字节块,每个字节块包含与来自多个顶点的多字节数据的相应字节相关的数据,该设备包括:解压缩装置,被配置成确定每个字节块的解压缩算法,在每个字节块的报头中指示该解压缩算法,并且使用该解压缩算法来解压缩该字节块以提供解压缩的字节块;以及合并装置,被配置成通过将来自与每个顶点相关的解压缩字节块的字节合并在一起来重组顶点参数数据。所述设备还可以包括以下的一者或多者:a)用于从压缩的字节数据流中读取多个字节原点值的装置;b)用于从压缩的数据中读取差值、从压缩的数据中读取字节原点的索引并将差值加至相应的字节原点以重构原始字节数据的装置;c)用于通过读取控制位来根据压缩的字节数据流构造唯一字节表并将差值加至原始字节原点以形成唯一字节值的装置,其中控制位指示随后数据是原始字节还是差值;d)用于从压缩的数据中读取索引值并获取相应的唯一字节表条目作为原始字节数据的装置;以及e)用于在合并字节块的步骤之后将符号位从最低有效字节移动至最高有效字节的装置。因为使用本发明中的算法压缩的顶点参数数据为固定大小,所以能够仅针对选择的顶点来解压缩参数数据(3d计算机图形系统在图块的局部区域中进行渲染所需的参数数据)。这对于基于图块的渲染3d计算机图形系统来说是非常有益的,因为其通过避免必须解压缩整个图像而节省了存储带宽。附图说明现在将参考附图来详细地描述本发明的优选实施方式,其中:图1示出用于在基于图块的3d计算机图形系统中进行平铺而执行的主要步骤的概述;图2示出基于图块的3d计算机图形系统中基元块的数据结构的概述;图3示出与用于3d计算机图形渲染的顶点相关联的数据;图4示出z值的字节数据分布;图5示出z值的字节增量值分布;图6示出字节块压缩单元的优选实施方式的概述;图7示出用于32位浮点顶点参数数据块的压缩单元的优选实施方式的概述;以及图8示出用于压缩的顶点参数数据块的解压缩单元的优选实施方式的概述。具体实施方式用于顶点参数数据的常规数据结构可以参见图3,具有x、y坐标、用于深度的z及用于纹理和着色的rhw。可以存在着具有可选的u、v和s、t的多个纹理坐标设置。用于x、y、z、rhw和纹理坐标u、v、s和t的顶点参数数据的值是ieee浮点格式。ieee浮点的值具有32位(4字节),其中8位用于指数以及23位用于尾数加上1位用于符号。来自本申请的输入数据流的基元被基于图块的3d计算机图形系统及时连续地接收并在预处理后被分组到基元块中。因此,基元块内部的基元大部分来自相同的三角网格。顶点参数数据类型的数据分布将在基元块中是完全随机的是不可能的。根据本申请使用的用于对对象进行建模的三角网格,顶点的x和y坐标值应该在显示屏上有限的范围内。深度值z通常是来自模型的3d表面的插值的结果,所以他们最有可能彼此之间在数值上逐渐变化。通常,顶点参数数据中数值之间的逐渐变化对于用于诸如rhw和纹理坐标数据的纹理和着色的数据而言是真实的。因为计算机图形屏幕的显示分辨率被固定于像素单元的一部分及来自屏幕上渲染的基元的x和y坐标在有限的范围内,所以降低精度的定点格式可以被用于来自原始浮点值的x和y值以节省参数数据空间。表示1示出在具有10个顶点的基元块中使用16位定点格式来表示x和y坐标的顶点参数数据的示例。顶点x和yzrhwuvst0715b690b3f758fb43d91e402bf25a7083f6276e9415e0316418225a2172ee6c1f3f76ecc83d69b094bf58da3b3f6276e941895b4741a401a62747470f73f748fdf3d91d691bf25a7083f62fb57415df274418213f43742d7c003f76ece43d699f55bf58da3b3f62fb57418954f641a3eff847737775b3f738fb43d91e4023f25a7083f6276e9415e0316418225a25774c7c003f74ca8f3dcf6776bed10ac63f628536411f0ab441335b6464b246fa93f76c92d3dcfd561bed088333f6276e9411eec6f41331a277487663c63f718fdf3d91d6913f25a7083f62fb57415df274418213f484bcc793b3f72cb793dcf1d82bed162ed3f62fb57411f335f41338770949136b313f6dca8f3dcf6776bed10ac63f628536411f0ab441335b64表1.来自基元块的顶点数据在典型的基于图块的3d计算机图形系统中,顶点参数数据针对基元块中每个顶点而被连续的输出。该数据布置使得顶点参数数据访问在3d渲染阶段更容易,特别是对于不是所有顶点都需要被用于渲染图块的基于图块的渲染中。对于表1中示出的具有10个顶点的基元块,顶点参数数据被输出为“x0,y0,z0,rhw0,u0,v0,s0,t0,x1,y1,z1,rhw1,u1,v1,s1,t1,.......x9,y9,z9,rhw9,u9,v9,s9,t9”。由于高精确要求,表1中示出的32位浮点值的顶点参数数据具有很少的0字节值。对于顶点参数数据分量而言在32位数值之间的字节数据分布中没有清晰的模式,这对于数据压缩算法是基本的。例如,在表1中示出的来自基元块的用于顶点z数据的数据块是“3f758fb43f76ecc83f748fdf3f76ece43f738fb43f74ca8f3f76c92d3f718fdf3f72cb793f6dca8f”。数据分布的随机性使得很难实现来自3d计算机图形系统的顶点参数数据块的高压缩结果。字节块从表1中的数据注意到,对于一列中的大部分数据而言,最高有效字节msb非常相似,且甚至在一些情况中是相同的。表1中列出的10个顶点在z、rhw、v、s和t上具有相同的msb。对于u中的msb,只存在0xbf、0x3f和0xbe这3个公共字节值。对于一列中的值,最低有效字节lsb的数据分布是很随机的。图4中示出3d计算机游戏渲染中来自z数据的32位ieee值中针对4个字节的数据分布。在图4中,横坐标是除以8的字节值而纵坐标是具有相同范围中的字节值的顶点的百分比。字节0是来自32位数值的最低有效字节lsb而字节3是来自32位数值的最高有效字节msb。如图4中的403所示,msb字节(字节3)的数据分布几乎是100%的位于字节范围内,这意味着来自z值的大部分msb字节是相同值。字节2的数据分布被表示为图4中的402,并具有70%的字节值位于字节范围内。最低有效字节即字节1和字节0的数据分布是非常随机的,如图4中的401和400所示。另外,类似于图4,图5中示出每个字节的增量值的分布。从基元块的第二顶点开始,增量值被针对每一字节进行计算,增量值是基元块中当前顶点的字节值与先前顶点的字节值之间的差异。图5中503和502处的字节3和字节2的增量值的分布具有超过90%的峰值。对于字节1,在增量值分布中存在60%的峰值,仅仅最低有效字节(字节0)的分布仍是非常随机的。通过顶点参数数据分布的分析,期望最高有效字节具有好的压缩率而最低有效字节不可能对压缩算法做出很好地响应。在本发明的第一方面的实施方式中,所有压缩算法针对所有顶点参数数据分量分别作用于4个单独的字节数据块上,而不是压缩整个32位浮点值数据块。在该方法中,压缩算法能够利用msb字节中的数据分布来压缩字节块,甚至当32位浮点数据块不能被很好的压缩时。当顶点参数数据在3d处理中被访问以用于渲染时,在原始32位顶点参数数据值被重构之前每个字节被分别解压缩。每个字节块包括报头字,在该报头字中包括块中顶点的数量。基于字节块的压缩非常灵活,其还可以被应用于降低精度的定点值数据块,例如16位定点表示将具有2个字节块以及24位表示将具有3个字节块。对于具有双精度的浮点值,存在着64位和8个字节块。移动符号位ieee浮点值具有32位,其中8位用于指数,而23位用于尾数,加上1位用于符号。符号位占据最高有效位,因此,最高有效字节具有用于符号的1个前导位(leadingbit)和用于指数的7位。很容易理解,对于具有相同指数但不同符号的两个浮点值,msb字节值将跳转128。参见表1中来自顶点0和顶点4的u的msb字节,这两个值0xbf25a708和0x3f25a708具有相同的指数0x7e但一个是正值而一个是负值。通过字节数据分布的分析,最高有效字节(字节3)是最有可能被很好压缩的字节。因此,在负值中,指数值的数据分布特征应该避免受到符号位的干扰。本发明的第二方面的实施方式在顶点参数数据分量(可能具有诸如纹理坐标的混合的正值和负值)的字节数据块压缩前,将32位浮点值的符号位从位31移动至位1。在移动了符号位后,来自上述示例的两个字节3值即0xbf和0x3f将变成如表2所示的相同值即0x7e。表1中来自10个顶点的u值的字节3中的字节值之间的最大距离被从128减小至如表2中的1,因此,结果是压缩性能将被提高。顶点x和yzrhwuvst0715b690b3f758fb43d91e4027e4b4e113f6276e9415e0316418225a2172ee6c1f3f76ecc83d69b0947eb1b4773f6276e941895b4741a401a62747470f73f748fdf3d91d6917e4b4e113f62fb57415df274418213f43742d7c003f76ece43d699f557eb1b4773f62fb57418954f641a3eff847737775b3f738fb43d91e4027e4b4e103f6276e9415e0316418225a25774c7c003f74ca8f3dcf67767da2158d3f628536411f0ab441335b6464b246fa93f76c92d3dcfd5617da110673f6276e9411eec6f41331a277487663c63f718fdf3d91d6917e4b4e103f62fb57415df274418213f484bcc793b3f72cb793dcf1d827da2c5db3f62fb57411f335f41338770949136b313f6dca8f3dcf67767da2158d3f628536411f0ab441335b64表2.移动u的符号位之后来自基元块的顶点数据最低有效字节的数据分布是很随机的,并且不被期望具有好的压缩结果,因此将符号位移动至lsb字节0的底部将对整个压缩比率不会产生很大影响。在解压缩之后,符号位被从位1移动回至位31以重构原始32位浮点值。用于移动符号位以改善压缩性能的方法可以被应用至用不同数量的字节表示的其他格式(如定点格式和双精度浮点格式)的值。唯一字节在本发明第三方面的实施方式中,当来自字节数据块的字节值都相同时,在压缩报头数据中仅需要一个字节和压缩报头中的一个位标志一起来指示压缩的字节块是唯一字节格式。很可能唯一字节格式可以被用在一些顶点参数数据值的msb中。对于表2中列出的10个顶点,z、rhw、v、s和t的msb(字节3)都是相同的并可以使用唯一字节方法而被压缩。在这些情况中,不是字节3中的10个字节而是仅一个字节被输出至压缩数据中,这是原始数据的10%。在优选的实施方式中,来自顶点参数数据字节块的当前字节值与字节块中的先前字节值进行比较以用于复制。如果与先前字节值中的任何一个都不匹配,则当前字节被保持为公共字节。当在字节数据块中仅存在一个公共字节时,唯一字节被存储为压缩字节以替代字节数据块中的所有字节数据。关于3d处理中的解压缩,当字节数据块是唯一字节格式时,唯一字节值被用于基元块中所有顶点的字节值。唯一字节方法对于字节数据块压缩是非常有效的,但是其也局限于字节值都是相同的的字节数据块。字节增量块在来自字节数据块的字节值不都相同的情况中,字节数据块不能使用唯一字节格式进行压缩。但是,在一些情况中,来自字节数据块的字节值偏离不广泛,因此在该字节数据块中的字节值可以在有限范围内。在本发明的第四方面的实施方式中,来自字节数据块的最小字节值可以被用作字节原点以使用字节增量块压缩具有有限数据范围的字节数据块。对于字节数据块中的每个字节,增量值(字节值和字节原点值之间的差值)替代字节值本身而被输出至压缩的字节数据块中。增量值所需的位的数量依赖于字节数据块中字节值的范围。在优选实施方式中,最小字节值作为字节原点被保存在压缩报头中。字节增量块中的所有增量值将是正值,所以无需符号位。对于8位而言,字节值的范围被固定为[0,255]。如果来自字节数据块的增量值范围可以使用小于8位来表示,则字节数据块可以使用字节增量块算法进行压缩。表3示出字节块中表示增量值所需的位的数量。增量范围增量位[0,1]1[2,3]2[4,7}3[8,15]4[16,31]5[32,63]6[64,127]7表3.增量范围所需的位的数量在优选实施方式中,用于增量值的位的数量与8位字节原点值一起被存储在压缩报头中。来自字节数据块的每个字节的增量值作为具有固定数量的位的压缩数据而被输出。来自基元块中顶点的字节数据值的压缩字节增量块可以通过将增量值添加至字节原点值中以重构原始字节值而被容易地解压缩。将来自表2中用于10个顶点的u的32位值的字节3作为示例:移动符号位后的字节3为:“0x7e,0x7e,0x7e,0x7e,0x7e,0x7d,0x7d,0x7e,0x7d,0x7d”。字节3的字节数据块不能使用唯一字节方法进行压缩。存在两个公共字节值即0x7e和0x7d。最小字节值是0x7d,最大字节值是0x7e。最大值和最小值之间的距离是1,其可以使用1位增量值来表示。压缩数据是:字节原点:“7d”,8位。对于基元块中10个顶点的每个字节而言,压缩字节增量块是1位:“1111100100”,10位。总压缩数据包括字节原点和字节增量块是18位,对于字节块而言其是原始80位的22.5%。关于解压缩,从压缩报头知晓,u的字节3是增量块压缩格式,用于增量块的位的数量是每字节1位。8位的字节原点也可以从压缩报头数据读取。块中针对来自3d处理中被访问的顶点u值的字节3的每个字节,1位增量值被从压缩增量块中读取。增量值被添加至原点字节以重构原始字节数据。现有技术方案中描述的用于压缩顶点参数数据的算法使用针对顶点参数数据与来自顶点原点的参数数据之间的全部数值的增量值。来自32位浮点格式的顶点参数分量的增量值通常具有非常大的范围,且用于浮点值的增量的整数表示可能需要许多位,因而降低了压缩的性能。定点格式表示可以在压缩中被用于增量值,但是这增加了压缩和解压缩算法的复杂性。本发明中的字节增量块算法是基于单独的字节数据块的,其不同于先前技术中描述的算法。对于字节数据块而言,使用字节增量块表示的机会被极大地增加,可以参见图5。对于msb字节3和2,超过百分之90的增量值在[0,7]的范围内。即使字节1也具有百分之六十的增量值位于范围[0,7]内。所提供的使用字节增量块算法的压缩性能的提高解决了先前技术中描述的算法的缺陷。字节增量块算法的压缩和解压缩操作仅仅是8位整数表示内的整数加减,因此该算法非常快和高效并容易在计算机硬件中执行。该算法适用于被用于3d计算机图形系统(特别是基于图块的3d计算机图形系统)中的顶点参数数据压缩。具有多个原点的字节增量块注意,表2中来自10个顶点的v的字节1值是“0x76,0x76,0xfb,0xfb,0x76,0x85,0x76,0xfb,0xfb,0x85”。这里存在三个公共值即0x76、0xfb和0x85。这三个公共值中的最大字节0xbf和最小字节0x76之间的距离是0x85,其只可以被表示为8位整数。在这种情况中,字节1不能使用增量块算法进行压缩。基于这三个公共字节值的进一步分析,0x76和0x85之间的距离是0xf,其可以使用4位增量值来表示。因此,整个字节数据块可以在两个单独范围中使用4位增量值来表示。在本发明的第五方面的实施方式中,字节数据块数据可以使用具有多个字节原点的增量块进行压缩。来自上述示例的具有两个范围的字节原点是0x76和0xfb。每个压缩字节需要一个额外位来指示增量值是基于哪个原点的。字节1的压缩数据将是:两个原点:“76fb”,16位。对于10个顶点而言,每个顶点5位(具有4位增量值和1位字节原点索引)的压缩增量块数据是50位。基元块中10个顶点的字节1压缩数据是:“00000,00000,00001,00001,00000,11110,00000,00001,00001,11110”,50位。包括字节原点和字节索引块数据的总压缩输出数据为66位,对于字节数据块而言其是原始80位的82.5%。关于解压缩,从压缩报头知晓,v的字节1是增量块压缩格式,字节原点的数量为2,用于增量块的位的数量是每字节4位。8位的字节原点各自也从压缩报头数据中被读取。对于来自3d处理中被访问的顶点v值的每个字节1,该1位的字节原点索引被首先从压缩增量块中读取,之后读取4位增量值。增量值被添加至由字节原点索引所指示的字节原点以重构原始字节数据。如另一示例,来自20个顶点的字节数据块为:“0x03,0x5b,0x03,0x54,0xf2,0x54,0x03,0x0a,0x5b,0x5b,0x03,0xf2,0xec,0x0a,0xf2,0x0a,0x0a,0x33,0x0a,0x03”。这里存在七个公共字节值即0x03、0x5b、0x54、0xf2、0x0a、0xec和0x33。在这七个公共字节中最大字节0xf2和最小字节0x03之间的距离是0xef,其只可以被表示为8位整数。在这种情况中,字节块不能使用具有一个字节原点的增量块算法进行压缩。在这七个公共字节中最大字节0xf2与字节0x54之间的距离是0x9e,其只可以被表示为8位整数。在这七个公共字节中字节0x5b和最小字节0x03之间的距离是0x58,其可以只以7位整数表示。考虑字节原点的索引需要1个额外位,则字节块不能通过具有2个字节原点的增量块算法来压缩。通过七个公共字节值的进一步分析,0x03和0x0a之间的距离是0x7,其可以使用3位增量值来表示。0x5b和0x54之间的距离也是0x7,而0xf2和0xec之间的距离是0x6。因此,整个字节数据块可以在四个单独范围中使用3位增量值来表示。来自上述示例的四个范围的字节原点是0x03、0x54、0xec和0x33。每个压缩字节需要两个额外的位来指示增量值是基于哪个原点的。用于字节数据块的压缩数据将是:四个字节原点:“0354ec33”,32位。每个顶点5位的压缩增量块(其中具有3位增量值和2位字节原点索引)对于20个顶点而言是100位。在基元块中用于20个顶点的压缩字节数据是:“00000,11101,00000,00001,11010,00001,00000,11100,11101,11101,00000,11010,00010,11100,11010,11100,11100,00011,11100,00000”,100位。包括字节原点和字节索引块的总压缩输出数据是132位,其对于字节块而言是原始160位的82.5%。关于解压缩,从压缩报头知晓,字节数据块是增量块压缩格式,字节原点的数量为4,用于增量块的位的数量为每字节3位。8位的字节原点各自也可以从压缩报头数据中被读取。对于来自3d处理中被访问的20个顶点值的每个字节而言,2位的字节原点索引被首先从压缩增量块中读取,之后读取3位增量值。该增量值被添加至由字节原点索引所指示的字节原点中以重构原始字节数据。增量块算法的压缩比率依赖于表示字节数据块的增量值所需的位的数量。当最大字节值和最小字节值之间的距离不能在具有多个字节原点的情况下以小于8位来表示时,字节块不能被增量块算法压缩。字节值的范围为了使用增量块算法来压缩字节数据块,基元块中字节值的范围必须是已知的。当字节值的范围可以使用小于8位的增量值表示时,可以使用增量块算法。算出字节值的范围的理想方法是将所有字节值排成升序或降序。如果最大字节值和最小字节值之间的增量值小于8位,则使用具有1个原点的增量块压缩。否则将整个范围分成在最大值与最小值之间具有相等距离的多个子范围。如果字节数据范围可以使用小于8位(包括增量值和字节原点索引)来表示,则字节数据块可以在具有多个字节原点的情况下使用增量块压缩来进行压缩。需要用于整个字节块的字节数据值的存储空间以对来自字节数据块的字节值进行排序。如果在计算机硬件中执行,这将增加额外的费用。在本发明第六方面的实施方式中,以下描述一种在不对字节数据进行排序并不使用额外存储的情况下获得多个字节值范围。因为字节数据来自基元块中的输入顶点参数数据,所以字节值的范围使用最小和最大字节值以及该范围中增量值所需的位的数量来进行存储。依据目前的范围来核查来自输入顶点参数数据块的新字节,以确定该字节是否在所述范围内。如果字节不在目前范围内,则该范围通过替代该范围的最小值或最大值并也更新该范围中增量值所需的位的数量来进行更新。当新字节值将用于字节范围中增量值的位的数量扩大到大于预定义的位最大数量(如5位)时,新范围被添加以将第一范围的增量值保持在该最大数量位内。将相对于2个范围通过使用上述相同的方法来核查随后字节。该过程继续,直至范围的数量达到字节原点数量的限制,例如4个字节原点具有4个字节范围。如果字节数据块可以使用字节范围中用于增量值的预定义的位最大数量来表示,则该字节数据块可以使用增量块算法进行压缩。合并字节值的范围在评估过程的最后,当在预定义的增量位最大数量中存在用于字节数据块的2个或更多个范围时,仍旧存在着将上述范围合并在一起的可能性。例如,如果存在着具有6位增量值的2个范围,则它们可以被合并成具有7位增量的1个范围。在这种情况中,一个原点需要7位的情况替代两个字节原点需要6位增量加1个字节原点索引的情况。压缩增量块大小是相同的,但是对于后一情况中的第二字节原点而言节省了8位,所以如果有可能的话在结束时优选将这些范围进行合并。字节增量块算法对于3d计算机图形系统(特别是基于图块的3d计算机图形系统)中的顶点参数数据压缩而言是简单快速并有效的压缩算法。通过使用所描述的字节范围评估方法,随着顶点参数数据到达,字节数据块的范围可以很容易的被计算出。该方法可以在3d计算机图形硬件流水线上实施,而无需巨大的数据存储以对字节数据块进行排序。压缩和解压缩操作可以在顶点参数数据和其他类型的字节数据块上被有效地执行。使用本发明的字节增量块算法的压缩顶点数据的大小是每字节固定数量的位,其包括用于增量值的固定数量的位和用于字节原点索引的固定数量的位。字节增量块算法的其他优点是压缩的顶点参数数据可以在3d处理过程中被从压缩的数据块中随机地进行访问。因为压缩的顶点参数数据在大小上是固定的,所以顶点的压缩参数数据的位置可以被容易的计算。因此,无需每次针对整个基元块来解压缩顶点参数数据,仅用于渲染图块所需的顶点参数数据被从压缩数据块中读取并被解压缩。公共字节表因为来自一些顶点参数数据块的字节值的不同性质,不是所有的数据块都可以使用唯一字节或字节增量块算法进行压缩。例如,来自基元块中的10个顶点的字节值是:“0x03,0x5b,0xf2,0x5b,0x03,0x03,0xec,0xf2,0x33,0x03”。公共字节中的最大字节0xf2与字节0x5b之间的距离是0x97,其只可以被表示为8位整数。公共字节中的字节0x5b与最小字节0x03之间的距离是0x58,其只可以被表示为7位整数。需要一个额外位用于字节原点的索引。字节块只可以通过具有4个字节原点0x03、0x5b、0xec和0x33的增量块算法进行压缩。需要3位增量值来表示0xf2和0xec之间的距离0x6,并需要两个额外的位来用于字节原点索引。压缩数据的大小是4×8位的字节原点加上10×(3+2)位的压缩数据,总共82位。因此,字节数据块不能使用字节增量块算法进行压缩。当公共字节的数量被限制时,公共字节表可以被用于存储公共字节值。在本发明的第七方面的实施方式中,来自字节数据块的公共字节值可以被保存在公共字节表中。对于字节数据块中的每个字节,用于公共字节表的索引代替字节值本身被输出至压缩字节数据块中以为了压缩字节数据块。表索引所需的位的数量依赖于公共字节表中条目的数量。如果公共字节表中条目的数量被存储在压缩报头中,则对于基元块的解压缩,公共字节表的数据大小和表索引所需的位的数量可以被容易的计算出。例如,对于上述字节数据块:“0x03,0x5b,0xf2,0x5b,0x03,0x03,0xec,0xf2,0x33,0x03”。该字节块具有五个公共字节值0x03、0x5b、0xf2、0xec和0x33。这五个公共字节值可以被存储在用于字节数据块的公共字节表中,并且对于每个顶点中的压缩字节数据,3位的索引被输出至公共字节表。字节表:“035bf2ec33”,40位。基元块中用于10个顶点的压缩字节数据:“000001010001000000011010100000”,30位。包括公共字节表和字节索引块的总压缩输出数据是70位,对于字节块而言其是原始80位的87.5%。关于解压缩,从压缩报头知晓,字节数据块是公共字节表格式,公共字节表中条目的数量是5。公共字节表的字节值首先被从压缩报头中读取以形成公共字节表。对于3d处理中被访问的每个顶点数据,3位的表索引被从压缩数据块中读取。该表索引然后被用于在公共字节表中查询用于基元块中的原始字节数据的字节值。公共字节表的压缩比率依赖于来自字节数据块的公共字节值的数量。公共字节值的数量确定公共字节表的大小和用于表索引的位的数量。在优选实施方式中,公共字节表的最大条目可以被预定义,例如16或32,因此用于表索引的位的最大数量分别是4或5。总压缩数据大小是公共字节表大小和顶点参数数据字节块中用于每个字节的表索引。当来自字节数据块的公共字节值的数量很大时,公共字节表的数据大小和用于顶点的表索引可以比字节数据块的原始数据大小多。在这种情况中,字节数据块不能通过公共字节表算法进行压缩。公共字节增量表公共字节表算法的压缩数据大小依赖于公共字节表的大小。公共字节表中条目的数量通过来自字节数据块的公共字节值的数量进行确定,其不能被改变。降低公共字节表大小的唯一方法是将可替代的表示方法用于公共字节表。例如,来自具有10个顶点的基元块中的字节数据块的字节值是:“0x35,0x5b,0x99,0x35,0x04,0xd2,0xd2,0x5b,0x35,0x37”。存在6个公共字节值:0x35、0x5b、0x99、0x04、0xd2和0x37。公共字节可以被布置在以下3个范围中即[0x04,0x37]、[0x5b,0x5b]和[0x99,0xd2],上述范围中具有6位增量值。对于每顶点三个字节原点需要两个位,其使得字节数据块不适合用于字节增量块算法。为了使用公共字节表算法,用于公共字节表的数据大小将是48位,并且用于每个顶点中的表索引将是3位。总数据大小将是78位,这几乎与原始数据大小80位相同(97.5%)。经过仔细研究可以看出,尽管公共字节值大多是不同的,但是字节值几乎均匀地分布在整个范围[0x04,0xd2]中。因为公共字节表中字节的数量在数量上是非常有限的,因此公共字节表中的字节值可以很容易地被排序成升序。在排序之后,上述示例中的公共字节值变为:“0x04,0x35,0x37,0x5b,0x99,0xd2”。公共字节增量表可以被形成为:“0x04,0x31,0x02,0x24,0x3e,0x39”,其中第一条目0x04为8位原始字节值而其余为字节增量表的增量值以及用于10个顶点的30位表索引,这是用于字节数据块的数据的原始80位的85%。在本发明第八方面的实施方式中,公共字节值可以被排序成升序以形成包括起始8位原始字节值和具有固定数量的位的增量值的公共字节增量表。在优选实施方式中,首先来自字节数据块的公共字节值被排序,然后增量值所需的位的数量通过查询表3中到该值的距离值而被获得。如果公共字节表中每个条目的大小小于8位,则公共字节表被使用公共字节增量表替代。关于压缩,公共字节增量表中条目的数量与用于增量值的位的数量一起被存储在压缩报头中。公共字节增量表中的条目被存储为前导8位字节值,之后为具有固定数量的位的增量值。关于解压缩,从压缩报头知晓,字节数据块为公共字节增量表格式。公共字节增量表中的条目的数量和用于增量值的位的数量首先被从压缩报头中读取。公共字节增量表中的增量值被读回以重构具有原始8位字节值条目的公共字节表。每个顶点中用于公共字节增量表索引的位的数量从公共字节表中的条目的数量获晓。用于顶点的顶点参数字节数据的表索引可以从压缩字节数据块中读取以从被重构的公共字节表中查询原始字节值。对于上述示例中的字节数据块,字节增量表中的条目的数量为6,且用于公共字节增量表中的增量值的位的数量为6。用于表索引的位的数量可以很容易地从表条目的数量计算出,在该情况中其为3位。为了根据解压缩来重构公共字节表,来自公共字节增量表的第一字节值被首先读取为0x04。接着,6位增量值被获取为0x31并被加至字节值0x04,从而原始字节0x35被重构。另一个增量值0x02被加至前一个字节0x35上以形成原始字节0x37。随后,来自公共字节增量表的所有增量值被用来通过将该增量值加至前一个字节来重构原始字节值。最终,整个公共字节表被重构为:“0x04,0x35,0x37,0x5b,0x99,0xd2”。对于3d处理中所访问的每个顶点,用于顶点参数字节数据块的3位表索引值被从压缩数据块中读取。然后表索引被用于在公共字节表中查询原始字节值以重构基元块中的顶点参数字节数据。具有控制码的公共字节增量表在本发明第九方面的实施方式中,1位控制码可以被引入公共字节增量表中以允许公共字节增量表中增量值和原始字节值的混合。对于公共字节增量表中的每个条目存在1位控制码以指示该条目是增量值还是原始字节值,例如0用于原始字节而1用于增量值。因为公共字节增量表中的第一个条目总是原始字节值,所以在第一个条目中无需控制码。当来自该表的两个公共字节值之间的距离太大而不能使用小于8位的增量值表示时,公共增量字节表中增量值和原始字节值的混合对减小公共字节表大小而言是有用的特征。例如,来自具有32个顶点的基元块的顶点参数字节数据块为:“0x03,0x6b,0x03,0x47,0x07,0xf2,0xf1,0xf2,0x47,0x03,0x0a,0x03,0x0a,0x6b,0x6b,0x47,0x03,0x0a,0xf2,0xf2,0xec,0xec,0xed,0x0a,0xf2,0x0a,0x03,0x0a,0x33,0x0a,0x03,0x03”。存在着10个公共字节值,即0x03,0x6b,0x47,0x07,0xf2,0xf1,0x0a,0xec,0xed和0x33。这些公共字节可以被排布在3个范围中,该3个范围为[0x03,0x33]、[0x47,0x6b]和[0xec,0xf2]并具有6位增量值。对于每顶点三个字节原点而言需要两个位,这使得字节数据块不适合用于字节增量块压缩。为了使用公共字节表算法,用于字节表的数据大小将是80位,并且用于每个顶点中的表索引为4位。总数据大小将是80+4×32=208位,这是256位的原始数据大小的81.25%。在排序之后,公共字节值为:“0x03,0x07,0x0a,0x33,0x47,0x6b,0xec,0xed,0xf1,0xf2”。公共字节值的增量块为:“0x03,0x04,0x03,0x29,0x14,0x24,0x81,0x01,0x04,0x01”。可以看出,字节值0x6b和0xec之间的距离是0x81,其太大而不能被使用具有小于8位的增量值来表示。因此,字节数据块不能使用公共字节增量表进行压缩。通过使用控制码将对增量值和原始字节值进行混合的算法应用至公共字节表中的公共字节值,具有大增量的字节值0x33、0x47、0x6b和0xec可以以原始字节被表示,如同第一字节0x03一样。剩余的字节可以使用3位增量值表示。具有用于原始字节的控制位公共字节增量表变为:“03,14,13,033,047,06b,0ec,11,14,11”。已混合的公共字节增量表输出包括5个原始字节即0x03、0x33、0x47、0x6b和0xec。还存在着5个增量值即4、3、1、4和1(每一个增量值具有3位)加上用于该表中除了第一条目外的所有条目的9位控制位。对于具有控制码的公共字节增量表,总压缩数据大小是5×8+5×3+9=64位。将用于32个顶点的表索引的128位加上,总压缩数据大小是192位,这是原始字节数据大小256位的75%。与公共字节表算法相比,通过在用于来自上述示例的字节数据块的公共字节增量表中使用控制码来混合原始字节值和增量值,增加了6.25%的压缩比率。在优选实施方式中,关于压缩,用于字节数据块的公共字节增量表中的条目的数量和用于增量值的位的数量一起被存储在压缩报头中。对于上述示例中的字节数据块,公共字节增量表中的条目的数量为10且用于增量值的位的数量为3位。在压缩报头中还存在1位标志,用于指示公共字节增量表与原始字节值混合。关于解压缩,从压缩报头知晓,字节数据块是公共字节增量表格式,公共字节增量表中的条目的数量为10,且用于增量的位的数量为3。从压缩报头还可以知晓,公共字节增量表是增量值与原始字节值的混合,原始字节值具有用于除了第一条目外的每个表条目的控制位。用于表索引的位的数量可以很容易地从表条目的数量计算出,这里是每个顶点4位表索引。为了重构公共字节表,字节增量表的第一字节值被读取,如上述示例中为0x03。然后1位控制码被读取以确定下一个值是8位原始字节还是3位增量值。在优选实施方式中,控制码0意味着原始字节,而控制码1意味着增量值。在增量值的情况中,其被加至先前字节值上以形成原始字节作为公共字节表条目。对于来自上述示例中基元块的3d处理中所访问的每个顶点数据,用于顶点参数字节数据块的3位表索引被从压缩字节数据块中读取,然后其被用于从重构的公共字节表中查找基元块中的原始字节值。如之前描述的,用于公共字节表索引的位的数量是与公共字节表中的条目数量相关的固定数量。用于基元块中顶点的压缩顶点参数字节数据可以通过计算压缩字节数据块中顶点的压缩字节数据的位置而被访问。公共字节表算法对于压缩顶点参数字节数据块而言是有效的压缩算法,特别是当数据分布太分散而不能被使用唯一字节和字节增量块算法进行压缩时。通过采用公共字节增量表和将增量值与原始字节进行混合的控制码的方法进行扩展,所提供的公共字节表算法与现有数据压缩算法相比具有优化的公共字节表及尺寸小的优点。公共字节表算法的性能被提高。在特定实施方式中,压缩过程在两个通道中执行。在第一通道中,来自基元块的输入顶点参数字节数据块被读取以收集字节数据块的统计数据,诸如输入字节数据块中公共字节的数量和字节值的范围。来自字节数据块的第一字节被存储为公共字节表中的第一条目。从字节数据块的第二字节起,当每个字节数据进入压缩单元时,就将其与公共字节表中的字节值进行比较。如果从公共字节表中没有找到针对该字节数据的匹配,则该字节值被加至公共字节表中以作为新条目。同时,字节值的范围使用最大字节值和最小字节值以及该范围内增量值所需的位的数量进行存储。从第二字节起,来自输入顶点参数数据块的每个字节对照着现有范围而被核查,以确定该字节是在范围内还是不在范围内。如果该字节不在现有范围内,则该范围通过替代范围的最小值或最大值而被更新,并且还更新该范围中增量值所需的位的数量,如之前描述的。在第一通道结束时,由于所有字节数据都被从输入字节数据块中读取,所以公共字节的数量以及公共字节表中的条目的数量是知道的。在第一通道后,字节值的范围与表示字节值范围内增量值所需的位的数量也是知道的。在第二通道中,针对字节数据块压缩形成所有统计信息。在特定实施方式中,图6示出3d计算机图形系统中用于顶点参数字节数据块的压缩单元。来自基元块中顶点参数数据的字节数据块601被输入至3d计算机图形系统的压缩单元中。输入顶点参数数据块在收集统计数据的第一通道之后被存储,或者可以被再次读取以避免硬件实现中额外的存储区域。针对输入字节数据块来核查公共字节的数量,如图6中的602所示。如果字节数据块中只存在一个唯一字节值,则唯一字节算法603被用于压缩字节数据块。对于在字节数据块中存在多于一个公共字节值的情况,则在604中核查在第一通道中生成的字节值范围以核查在该范围中是否具有使用具有有限数量的位的增量值来表示字节值的可能性。如果用于增量值的位的数量和用于字节原点索引的数量小于8位,则字节数据块可以使用字节增量块算法进行压缩。在压缩至字节增量块数据中之前,字节数据块的范围针对范围的可能合并而被检查(605)以获得优化表示。在合并范围后,字节数据块被压缩成具有一个字节原点607或多个字节原点,通常达到4个字节原点608、609和610。当字节数据块不能使用唯一字节或字节增量块算法压缩时,公共字节的数量被对照着第一通道中生成的公共字节表中条目的最大数量的预定义值进行核查。在优选实施方式中,当公共字节的数量不多于32位时,公共字节表压缩算法在图6的611处被应用至字节数据块上。字节数据块的表索引所需的位的数量依赖于公共字节表中条目的数量,该条目的数量对于字节数据块而言是固定数量。压缩比率依赖于表索引所需的位的数量和公共字节表的大小。公共字节表的大小是条目的数量乘以8位。在图6的612中,公共字节增量表的大小通过使用用于增量表中增量值的位的数量根据在第一通道中生成的公共字节表中的公共字节值进行计算。当有必要将公共字节增量表的大小降低至最小时,1位控制码被使用。当该增量表大小小于原始字节表的大小时,公共字节增量表算法614被用于压缩。否则,公共字节表算法615被用于压缩字节数据块。如果包括公共字节增量表大小和用于基元块中所有顶点的表索引的总压缩后数据大小小于字节数据块的原始大小,则字节数据块使用公共字节增量表算法616进行压缩。否则,字节数据块不被压缩并作为原始字节数据块618被输出。类似地,如果包括公共字节表大小和用于基元块中所有顶点的表索引的总压缩后数据大小小于字节数据块的原始大小,则字节数据块使用公共字节表算法617进行缩。否则,字节数据块不被压缩并作为原始字节数据块618被输出。当公共字节值的数量多于预定义阈值(如特定实施方式611中的32)时,字节数据块作为原始字节数据块618被输出。压缩后的顶点参数数据结构如上文所述,压缩后的顶点参数数据包含两部分:压缩报头数据和压缩的顶点数据。用于每个顶点参数字节数据块的压缩报头数据包括用于公共字节表或公共字节增量表的压缩格式、唯一字节值、字节原点值和数据。根据用于字节数据块的压缩格式,对于每个顶点而言,压缩的顶点数据是固定大小的。表4中列出本发明中针对压缩算法的压缩的顶点参数数据结构。表4.压缩格式及压缩数据大小在压缩之后,用于字节数据块的压缩格式和表4中列出的其它压缩报头数据一起由压缩单元写入压缩报头数据中。用于每个压缩格式的如表4中列出的压缩的顶点参数数据被输出至单独的压缩的顶点数据块中。当3d处理中基元块中的三角需要顶点参数数据时,压缩格式首先被从压缩报头数据中读取以用于每个顶点参数数据的字节。另外的报头数据可以根据压缩格式被读取,如表4中所示。当字节数据块是原始字节格式时,不存在来自压缩报头的附加数据,用于每个顶点的8位字节数据在压缩的顶点数据块中被输出。关于解压缩,当顶点参数数据的字节被需要时,8位字节数据被读取。当字节数据块是唯一字节格式时,8位唯一字节值在压缩报头中被输出,由于所有字节值都与压缩报头中的唯一字节值相同,所以压缩的顶点数据块中不存在输出。关于解压缩,对于基元块中的所有顶点,8位唯一字节数据被用作顶点参数字节数据。当字节数据块是增量块格式时,在压缩报头中存在着用于字节原点的数量、字节原点值和用于增量值的位的数量的附加数据。用于顶点参数数据的每个字节的增量值在压缩的顶点数据块中被输出。在多字节原点的情况中,字节原点索引也在压缩的顶点数据块中被输出。如压缩报头所指示的,用于基元块中所有顶点的增量值和字节原点索引是固定数量的位。关于解压缩,字节原点的数量和增量位的数量与字节原点值一起被从压缩报头读取。对于3d渲染中所访问的每个顶点参数字节数据,固定大小的增量值被从压缩的顶点参数字节数据块读取。对于多字节原点的情况,字节原点索引值也被针对来自压缩的顶点参数字节数据块的顶点而被读取。增量值被加至字节原点索引所指示的字节原点值以重构原始字节数据。当字节数据块是公共字节表格式时,在压缩报头中存在用于公共字节表中条目的数量和字节值的附加数据。用于顶点参数数据的每个字节的表索引值在压缩的顶点数据块中被输出,如表4所示。对于基元块中所有顶点而言,表索引值是固定数量的位,其取决于如压缩报头中所指示的公共字节表中条目的数量。关于解压缩,针对公共字节表的条目的数量和字节值被从压缩报头读取。对于3d渲染中所访问的每个顶点参数字节数据,固定大小的表索引值被从压缩的顶点参数字节数据块读取以从公共字节表查询原点字节值。当字节数据块是公共字节增量表格式时,压缩报头中存在用于以下项的附加数据:用于公共字节增量表中条目的数量、用于增量值的位的数量、用于指示公共字节增量表中是否存在用于将增量值与原始字节值进行混合的控制码的1位标志。公共字节增量表的总大小也在压缩报头中被输出,因此,关于解压缩,用于公共字节增量表的数据可以从压缩报头中被正确地读取,如表4所示。与公共字节增量表格式相同,用于顶点参数数据的每个字节的表索引值在压缩的顶点数据块中被输出。对于基元块中所有顶点,表索引值是固定数量的位,其取决于压缩报头中所指示的公共字节增量表中条目的数量。关于解压缩,对于公共字节增量表而言,条目的数量、用于增量值的位的数量和控制码存在标志被从压缩报头读取。然后,增量值被从压缩报头读取,其中固定数量的位被加至公共字节表中的先前字节。在使用控制码的情况中,控制码被首先读取以确定随后条目是增量值还是8位原始字节值。公共字节表可以根据解码公共字节增量表被形成。与用于3d渲染中所访问的每个顶点参数字节数据的公共字节表格式相同,固定大小的表索引值被从压缩的顶点参数字节数据块读取以从公共字节增量表重构的公共字节表中查询原始字节值。顶点参数数据块的压缩和解压缩在特定实施方式中,图7中示出3d计算机图形系统中用于32位浮点顶点参数数据块的压缩单元。当来自基元块的顶点参数数据块701进入3d计算机图形系统时,在图7中的702处32位浮点格式值的符号位被从最高有效位移动至最低有效位。然后浮点顶点参数数据块分成4个字节数据块以便分别在压缩单元703、704、705和706中被压缩。来自4个字节数据块的压缩数据针对每个顶点被合并至一起以在基元块中形成压缩的顶点参数数据,如图7中的707所示。在特定的实施方式中,图8中示出用于3d计算机图形系统中压缩的顶点参数数据块的解压缩单元。当来自基元块的压缩的顶点参数数据块801进入3d计算机图形系统时,根据压缩报头中用于每个字节的压缩格式,用于顶点的压缩的顶点参数数据针对4个字节的顶点参数数据被分成4个数据片,如表4所示。用于每个字节的4个数据片分别在解压缩单元802、803、804和805中被解压缩。在32位浮点格式值的符号位被从最低有效位移动回最高有效位(图8中806处)之前,来自4个字节的解压缩数据针对每个顶点被合并至一起。32位顶点参数数据最终针对基元块中的每个顶点而被最终重构,如图8中的807所示。如图6、图7和图8所示,本发明的优选实施方式中压缩和解压缩过程可以在计算机硬件中执行并被合并至3d计算机图形系统流水线中,尤其用于基于图块的渲染。压缩单元中算法的组合引起来自3d计算机图形系统的顶点参数数据块的高压缩性能。对来自3d游戏的顶点参数数据块的试验显示,超过90%的时间,顶点参数字节数据块可以使用上述算法中的一者被压缩。对于3d计算机图形系统中顶点参数数据块,期望使用所提供的算法实现总共40%的数据减小。除了通过所提供的方法实现顶点参数数据的压缩之外,还具有其他优点。不存在原始顶点参数数据的任何信息丢失,所提供的算法是无损压缩方法。压缩算法适于要求高质量渲染图像的3d计算机图形系统中的顶点参数数据压缩。压缩算法中仅需要有限的和可配置的存储存储器空间以用于字节增量块算法中的字节原点和用于公共字节表算法的字节表或字节增量表。所提供的算法对于在3d计算机图形硬件中的实施而言是具有成本效益的。在上述算法中无需复杂的计算,根据算法的压缩和解压缩的操作是简单且快速的。算法可以被用于生成高速3d计算机图形渲染。因为对于基元块中所有顶点而言使用所述压缩算法所压缩的数据的大小是固定数量的位,所以对于来自基元块中任何顶点的压缩的顶点数据的随机访问是可能的。该特征对于在基于图块的3d计算机图形硬件系统中压缩顶点参数数据而言是尤其有益的。在该情况中,在基于图块的3d计算机图形系统中,来自基元块的基元可以覆盖许多图块。在一个图块中可以不是所有的顶点都需要渲染,因此在渲染过程期间使顶点参数数据块为随机可访问的是非常可取的。如现有技术中针对诸如熵编码的压缩算法的描述,整个数据块需要在能够访问任何顶点参数数据之前被解压缩。这对于基于图块的3d计算机图形系统的性能具有很大的影响,尤其对于覆盖许多图块的基元块以及整个基元块的顶点参数数据必须被多次解压缩而言。所述压缩算法使得能够对于压缩的数据块中的顶点参数数据进行随机访问,因此在3d渲染过程中,仅仅在渲染图块中被使用的顶点的解压缩的数据被获取并被解压缩。所述压缩算法具有传统压缩算法所没有的以下优点:增强的性能,并可以被基于图块的3d计算机图形系统用于从压缩的数据块中有选择地获取顶点参数数据。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1