基于块的混合压缩的制作方法

文档序号:12071840阅读:248来源:国知局
基于块的混合压缩的制作方法与工艺

本申请要求于2014年10月10日提交的美国临时专利申请号62/062,211的优先权,所述申请的全部公开内容据此以引用的方式明确并入本文。

技术领域

本公开总体涉及一种使用硬件支持的压缩格式来对纹理进行基于块的压缩的方法和设备,并且更具体地,涉及一种使用软件以允许压缩以某种方式与现有硬件支持的压缩格式不兼容的数据的方法和设备。



背景技术:

计算机图形处理系统通常利用一个或多个图形处理单元(GPU)来处理大量的数据,所述GPU执行大部分的处理。GPU在被称为渲染的过程中从其组件的较高级描述产生构成图像的像素。GPU通常通过使用计算元件对像素、纹理和几何数据进行处理来执行连续渲染。计算元件可执行光栅化器、设置引擎、色彩混合器、隐藏表面消除和纹理贴图的功能。这些计算元件通常被称为着色器、着色器处理器、着色器阵列、着色器管、着色器管阵列、着色器管线或着色器引擎。“着色器”还可以是指用来执行软件指令(其更准确地称为“着色器程序”)的实际硬件组件或处理器。着色器处理器或程序可读取数据并对数据进行渲染,并且执行数据的任何类型的处理。

在产生复杂图形场景中涉及的许多处理涉及纹理数据。纹理可以是各种类型的数据中的任何一种,所述数据诸如高度贴图数据、图像数据、颜色或透明度数据、粗糙度/平滑度数据、反射率数据、查找表或其他数据。纹理可指定许多属性,包括表面属性,如呈法线或凹凸贴图的形式的镜面反射或精细表面细节。有时在本领域中使用术语‘纹素’,其中与‘像素’是图像元素的方式相同,‘纹素’是纹理元素。然而,术语‘纹素’和‘像素’经常互换使用(因为“纹素”有时被简称为“像素”)。因此,在本公开内容中,任一术语可互换使用。

提供逼真的计算机图形通常需要许多高质量、详细的纹理。然而,纹理的使用可消耗大量的存储空间和存储器到GPU带宽,并且因此纹理通常被压缩以减少存储空间和带宽利用。

纹理压缩因此已经成为一般的图形硬件以及具体地3D图形硬件的广泛接受的特征。纹理压缩的目的是减少图形系统上的存储和带宽成本,同时尽可能多地保持初始纹理的质量。许多纹理压缩方案使用各种基于块的压缩方法中的一种来对端点和内插像素值进行编码,如以下进一步描述的。DirectX中使用的 BCn格式是此类方案的实例。期望开发更灵活地使用这些和其他格式的方式,从而允许对除了最初设计格式的数据之外的新类型数据(例如,高度贴图数据)进行编码。

更具体地,新的纹理压缩技术花费很长时间来开发并以硬件形式传递到市场。在从基于硬件的压缩的一个版本到下一个版本的转变时间期间,软件开发者产生需要新压缩技术的新类型数据,对于所述新类型数据,现有的压缩方案不能提供充分的结果。这在识别这些新技术与将它们实际引入市场之间产生了差距。

因此,存在对一种方法的需要,由此可使用现有压缩方案来对自定义数据进行编码并且所述自定义数据可在块与块之间变化(而不是具有跨整个图像的全局应用),从而通过允许开发基于软件和基于硬件的解码技术的灵活混合来使用现有硬件提供新的纹理压缩可能性。



技术实现要素:

根据本公开的一个实施方案,提供了一种使用硬件支持的压缩格式来对纹理进行基于块的压缩的方法,其包括:将纹理划分成多个块;针对每个块,确定用于所述块以最小化误差度量的变换;将所述变换的至少一个特性编码成可以其他方式用来表示参考分量值的多个位;以及对所述块进行压缩。在这个实施方案的一个方面中,每个块包括数据,所述数据包括RGB颜色空间中的两个端点以及表示端点之间的线上的像素值的多个索引,所述多个位是端点的高位。在这个方面的变型中,当端点中的每一个的高位相同时,将所述特性编码成多个位。在另一个方面中,用于对第一块进行编码的多个位的数量不同于用于对第二块进行编码的多个位的数量。在又一个方面中,硬件支持的压缩格式并不直接支持与所述块相关联的数据。在另一个方面中,所述特性表示比例因子和指数中的一个。

根据本公开的另一个实施方案,提供了一种用于对图像进行解压缩的方法,其包括:对与所述图像的选定区域相关联的多个块进行解码;针对每个块,获得用于所述块以最小化误差度量的变换的特性,将所述特性编码成可以其他方式用来表示参考分量值的多个位;对所述块进行解压缩;使用所述特性来获得待应用于所述块的变换;以及应用所述变换。根据这个实施方案的一个方面,每个块包括数据,所述数据包括RGB颜色空间中的两个端点以及表示端点之间的线上的像素值的多个索引,所述多个位是端点的高位。在这个方面的变型中,当端点中的每一个的高位相同时,将所述特性编码成多个位。在另一方面中,用于在第一块中对特性进行编码的多个位的数量不同于用于在第二块中对特性进行编码的多个位的数量。

在本公开的又一个实施方案中,提供了一种使用硬件支持的压缩格式来对纹理进行基于块的压缩的系统,所述系统包括:处理器,所述处理器被配置来支持第一压缩格式;以及编码器。所述编码器被配置来:针对每个块,确定用于所述块以最小化误差度量的变换的特性,所述误差度量是由于所述块包括第一压缩格式不支持的数据而产生的;将所述特性编码成可以其他方式用来表示参考分量值的多个位;并且对所述块进行压缩。在这个实施方案的一个方面中,每个块包括数据,所述数据包括RGB颜色空间中的两个端点以及表示端点之间的线上的像素值的多个索引,所述多个位是端点的高位。在这个方面的变型中,当端点中的每一个的高位相同时,将所述特性编码成多个位。在另一个方面中,用于对第一块进行编码的多个位的数量不同于用于对第二块进行编码的多个位的数量。另一个方面还包括解码器,所述解码器被配置来:对压缩的块进行解压缩;使用所述特性来获得待应用于所述块的变换;并且应用所述变换。

本公开的另一个实施方案提供了一种存储指令集的非暂时性计算机可读存储介质,所述指令集用于由计算装置执行以使用硬件支持的压缩格式来对纹理执行基于块的压缩,所述指令集包括在由所述计算装置执行时导致所述计算装置执行以下操作的指令:将纹理划分成多个块;针对每个块,确定用于所述块以最小化误差度量的变换;将所述变换的至少一个特性编码成可以其他方式用来表示参考分量值的多个位;以及对所述块进行压缩。在这个实施方案的一个方面中,每个块包括数据,所述数据包括RGB颜色空间中的两个端点以及表示端点之间的线上的像素值的多个索引,所述多个位是端点的高位。在这个方面的变型中,当端点中的每一个的高位相同时,将所述特性编码成多个位。在另一个方面中,用于对第一块进行编码的多个位的数量不同于用于对第二块进行编码的多个位的数量。另一个方面还包括在由计算装置执行时致使所述计算装置执行以下操作的指令:对所述块进行解压缩;使用所述特性来获得待应用于所述块的变换;以及应用所述变换。

附图说明

根据以下结合附图进行的描述,将更容易地理解各实施方案,在附图中,相同的参考数字表示相同的元件,并且在附图中:

图1为可实施一个或多个公开的实施方案的示例性装置的框图;

图2是在RGB颜色空间中表示为线的数据块的概念图;

图3是根据本公开的用于对纹理进行压缩的方法的流程图;并且

图4是根据本公开的用于对纹理进行解压缩的方法的流程图。

具体实施方式

简而言之,在一个实例中,提供了一种用于使用硬件支持的压缩格式来对纹理进行基于块的压缩的方法和设备。所述方法包括:将纹理划分成多个块;针对每个块,确定用于所述块以最小化误差度量的变换;将所述变换的至少一个特性编码成可以其他方式用来表示参考分量值的多个位;以及对所述块进行压缩。因此,本公开提供了一种方法,由此可使用现有的基于硬件的压缩方案来对自定义数据进行编码并且所述自定义数据可在块与块之间变化(而不是具有跨整个图像的全局应用),从而通过允许开发基于软件和基于硬件的解码技术的灵活混合来使用现有硬件提供新的纹理压缩可能性。

图1是可实现一个或多个公开的实施方案的示例性装置100的框图。在某些实施方案中,装置100是游戏装置、手持装置、机顶盒、电视机、移动电话或平板电脑或其他类型的计算机。装置100通常包括处理器102、一个或多个输入装置104、一个或多个输出装置106、一个或多个存储装置108以及一个或多个存储器装置110。

处理器102可包括中央处理单元(CPU)、图形处理单元(GPU)、位于同一芯片上的CPU和GPU或一个或多个处理器内核,其中每个处理器内核可以是CPU或GPU。其他类型的集成电路和处理器也可体现本公开的各方面,所述集成电路和处理器包括数字信号处理器(DSP)、加速处理单元(APU)、现场可编程门阵列(FPGA)等。

输入装置104可包括键盘、小键盘、触摸屏/板、检测器、麦克风、加速度计、陀螺仪、生物测定扫描仪或网络连接(例如,用于发送和/或接收无线IEEE 802信号的无线局域网卡)中的一个或多个。输出装置106可包括显示器、扬声器、打印机、触觉反馈装置、一个或多个指示器、天线或网络连接(例如,用于发送和/或接收无线IEEE802信号的无线局域网卡)中的一个或多个。

存储装置108可包括固定或可移动的存储组件,例如,硬盘驱动器、固态驱动器、光盘或闪存驱动器。存储器装置110可与处理器102位于同一芯片上,或者可与处理器102分开定位。存储器装置110可包括易失性或非易失性存储器,例如,随机存取存储器(RAM)、动态RAM或高速缓存。

多年来已开发了用于诸如装置100的装置的各种GPU支持的纹理压缩格式,所述纹理压缩格式包括一组被称为BC1至BC7的七种标准格式(即,以上引用的 BCn格式)。这些格式广泛地用于例如逼真3D游戏中以减少纹理贴图的存储器使用(存储和带宽)。此类应用需要高分辨率图形,这需要更多数量的纹理,诸如漫射颜色、法线贴图、镜面高光、光泽、放射性辉光等等。为了实现预期的视觉细节,必须向处理器提供大量的数据,这需要非常高的存储器带宽。纹理压缩减少了将图像数据提供给着色器核心本需要的存储器带宽。

所有BCn格式允许的纹理压缩是基于块的压缩,并且更具体地,基于4×4的像素块。将每个待处理的图像划分成这些块,这些块的大小根据格式被固定为8或16字节。这种标准布局和存储器中的块的连续存储允许高效的GPU渲染,因为GPU可快速定位并访问包含纹理的任何部分的任何块。

每个块表示整个图像的一个小区域。在许多图像中,任何特定的小区域(或块)内存在非常有限的颜色变化。一般而言,块包含具有单一颜色或两种颜色之间的梯度的色调。BCn格式通过将块中的颜色的定义与它们的空间分布分开来利用这个事实。

在本公开的一个实施方案中,使用例如 BC5规格来对单一分量高度贴图纹理执行如下所述的压缩。在这种实施方案中,由于高度贴图是单一分量纹理,因此使用BC5对高度贴图纹理进行的压缩需要在解压缩期间将双分量纹理变换成单分量纹理的变换(以及在压缩期间进行的对应逆变换)。在这种情况下,通过应用本公开的原理,被压缩的数据和硬件支持的格式可具有不同数量的组件(通道)。这种方法利用了以下事实:高度贴图纹理通过使用来自一个通道(例如,红色通道)的高位传播控制位(即,变换的至少一个特性)而不使用16位的全动态范围。编码特性允许编码器获得变换以用于将提供最小化误差的块。

通过举例的方式,假定BC5解码器的双分量输出是C1和C2(即,呈8.6格式的两个无符号通道),可根据本公开的原理来实现以下指令(以下对各行进行编号以供参考):

行(2)和(3)提供掩码以用于解码变换参数。在这个实例中,这些是C2的提供待实现参数的代码的位(即,位7和6可包括参数代码信息)。行(4)至(9)提供了每个变换的三个比例和每个变换的三个偏差的示例性定义。行(10)至(20)提供用于对变换进行解码(即,确定待应用的变换的代码)的指令。在这个实施方案中,代码具有可变长度。如果位7为0,那么应当应用变换1(无论其可能是什么)。这在行(12)处反映出。由于这个实现方式仅使用C2的1位(在这个实例中,C2的最高有效位-MSB)来对变换的代码进行编码,因此其他七位可用于传达其他信息。在MSB=0的情况下,那么不需要将其掩蔽掉。通常,在对代码进行解码之后,所述位被掩蔽掉,但是在所述位已经为零的情况下这不是必需的。如果MSB=1,那么指令评估下一位。这在行(13)和(14)处反映出。如果第二位为零,那么将应用第二变换(参见行(15)和(16))。最后,如果两个位皆为1,那么将使用第三变换,并且掩蔽两个位(参见行(18))。

每个块的像素或纹素被编码为对块的调色板的索引,其通常如上所述非常有限。因为调色板太小,所以每个像素仅需要几个位。通过假定调色板的所有颜色均沿着RGB颜色空间中在两个端点之间延伸的线段(或内插轴)落在均匀间隔的点处来对调色板进行压缩。使用这个假定,仅需要存储线的端点,并且通过以不同比例混合两个端点来重建其他颜色。

图2提供了RGB颜色空间中的上述线段200的概念图。尽管这个实例是说明性的,但是应注意,本公开的一个实施方案使用单分量(标量)输入数据压缩,所述单分量(标量)输入数据压缩使用由利用例如 BC5规格的硬件支持的双分量格式来进行。如图所示,RGB颜色空间包括3D笛卡尔坐标系的单位立方体子集,以便利用R、G和B轴标出原色(红色、绿色和蓝色),并在原点处标出黑色(无光)。因此,由于模型是单位立方体,因此所述轴各自具有在0与1之间的强度范围。线200包括端点202和端点204。在这个实例中,线200还包括两个中间点或像素值206,所述中间点或像素值206通过线性内插沿着线200等距隔开。根据实现方式,并且如本领域技术人员所理解的,像素值206的数量可大于或小于2。像素值206作为呈三位索引形式的数据被包括在对应于线200的块中。应理解,根据本公开可使用每个像素值的大于或小于3位的索引。

根据本公开,可以认识到,通过牺牲来自端点202、204的一些位的精度,在每块的基础上对附加数据进行编码是可能的,这允许解码器对自定义数据或现有硬件压缩方案未被设计来容纳的数据进行特殊处理。仅出于示例性目的,假定一个单一分量格式,其对具有由8位值指定的端点202、204和使用3位索引选择的像素值206的数据的通道(“红色”通道)进行编码。块中任何像素的可能颜色导出如下:

red_0=endpoint_0;

red_1=endpoint_1;

red_2=(6*red_0+1*red_1)/7.0f;//bit code 010

red_3=(5*red_0+2*red_1)/7.0f;//bit code 011

red_4=(4*red_0+3*red_1)/7.0f;//bit code 100

red_5=(3*red_0+4*red_1)/7.0f;//bit code 101

red_6=(2*red_0+5*red_1)/7.0f;//bit code 110

red_7=(1*red_0+6*red_1)/7.0f;//bit code 111

3位索引用于为块中的每个像素选择待使用的颜色。返回的最终值落在0至1的范围内。

当通过线性内插获得像素值206时,如果每个端点202、204的最高位相同,那么像素值206的最高位对于所述块将是恒定的。另外,如果端点202、204中的每一个的高位相同,那么这些高位中的值不影响数据的任何低位中的内插值。因此,一些数量的高位(例如,来自端点_0和端点_1中的每一个的3位)可被保留以便由解码器进行特殊处理。应理解,保留位的数量可在块与块之间变化。换句话说,这些位可用于对块的特殊数据进行编码。

在从纹理中检索到任何颜色值之后,可在上述硬件解码之后添加以下软件解码步骤。

color=returned_color_from_hardware_decoder;//range(0->1.0)

color=255.0;//expand the color to match the original endpoint precision

reservedBitmask=0xe0;//Binary mask 11100000

intColor=(int)color;//get rid of the fractional bits

specialBlockData=(intColor&reservedBitmask)>>5;//Extract special block bits

color=(float)intColor–(specialBlockData<<5)

color/=31.0;//rescale the remaining data back into the0->1range

这种软件解码步骤将3位数据(其足以对编码提供8种不同的修改)传送到着色器。在本公开的一个实施方案中,数据的位可用于诸如通过表示待应用于数据的比例因子或指数来变换解码的数据。如本领域技术人员应理解的,数据的位可具有许多其他用途。还应理解,技术人员可容易地修改上述方法以在多分量压缩格式中使用(即,可以与上述方式相同的方式在任何独立分量中对位进行编码)。

以上述方式,可变换自定义数据以根据现有压缩方案(其未被设计来处理自定义数据)提供更好的结果。在压缩时变换数据,并且必须在压缩之后(即,在解压缩和渲染之后)将数据变换回其初始状态。还应理解,针对不同块的变换可以是不同的。以这种方式,可通过使用在逐块的基础上被确定为最适合的各种技术来实现误差减少和质量改进。为了允许这种逐块变换,必须将变换传递给每个块的软件解码器。针对图像中的每个块,例如,识别用于所述块以最小化误差度量的变换。关于用于确定用于每个块的变换的方法的其他细节在2012年10月12日提交的并且标题为“REGION-BASED IMAGE COMPRESSION”的共同未决的美国专利申请S/N 13/651,020中提供,所述申请的全部公开内容据此以引用方式明确并入本文。在本公开的一个实施方案中,通过将变换包括在上述端点的高位中来将变换传递给解码器。当解码器接收到块的编码像素时,在像素的MSB中提供参数。如本文所述,本发明的变换包括将从对双分量格式(BC5)的硬件解压缩得到的双分量组合成单分量。对应地,压缩器将单一分量数据变换成双分量数据。

图3提供根据本公开的原理的对纹理进行压缩的方法300的流程图。如图所示,在框302处,选择待压缩的纹理。在框304处,将纹理划分成多个块(诸如上述的4X4块)。在框306处,选择当前块以用于压缩。接下来,在框308处,确定当前块的端点202、204的高位是否相同,从而允许此类端点由如本文所述的变换来替换。如果高位相同,那么在框310处,确定用于当前块的变换。如果不相同,那么在框309处,将数据四舍五入或以其他方式变换来为位“留出空间”以便在编码块中使用。应注意,在框310处,可确定变换不是必需的,并且可使用一个或多个位来指示其余位不需要变换。还应理解,在某些实施方案中,可以使用可变长度代码来对变换进行编码,以使得“变换位”的数量在块与块之间是不同的(同时总有至少一个位用于进行编码)。

当当前块的端点202、204的高位相同并且在框310处确定了变换参数时,在框312处,根据本领域中已知的原理将变换编码成端点202、204的高位。随后,在框314处,对当前块进行压缩。接下来,在框316处,确定是否处理了所有的块。如果已经处理了所有的块,那么所述处理在框318处结束。如果不是,那么在框306处选择新的当前块,并且重复所述方法的其余部分。

图4提供根据本公开的原理的对纹理进行解压缩的方法400的流程图。如图所示,在框402处,接收根据图3的方法300压缩的块。在框404处,对块进行解压缩。在框406处,确定解压缩的块是否包括变换。如果不包括,那么在框408处对块进行解码。如果解压缩的块包括在框406处确定的变换,那么在框410处,使用所述变换来变换对应于所述块的数据。然后,在框408处,对块进行解码。

在框412处,确定是否已经处理了所有的压缩块。如果是,那么所述处理在框414处结束。如果不是,那么在框404处对下一个用于处理的块进行解压缩,并重复上述处理。应理解,在本说明书中,术语“变换”在非常一般的意义上使用并且意味着任何数据处理。

以上述方式,可对针对每个块所采用的压缩方法进行细粒度的修改,以允许实现更复杂的压缩技术。因此,除其他优点之外,本公开的方法和设备促进了广泛的潜在应用,以使得能够在相当短的时间内在未被设计来支持更复杂压缩方案的现有图形硬件上使用更复杂的压缩方案。以这种方式,可使用现有硬件来处理新类型的数据(或自定义数据),诸如高度贴图数据或不具有当前可用硬件压缩方案的其他数据。其他优点对本领域技术人员来说将是显而易见的。

以上详细描述和本文中描述的实例仅是出于说明和描述的目的呈现,而非为了限制。因此,可以设想,本公开覆盖落入以上所公开的并在本文中要求的基本原理的精神和范围内的任何和所有的修改、变化或等效物。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1