CN103533364B - 确定纹元方向的方法及设备,编码方法及设备,存储介质 - Google Patents

确定纹元方向的方法及设备,编码方法及设备,存储介质 Download PDF

Info

Publication number
CN103533364B
CN103533364B CN201310279623.2A CN201310279623A CN103533364B CN 103533364 B CN103533364 B CN 103533364B CN 201310279623 A CN201310279623 A CN 201310279623A CN 103533364 B CN103533364 B CN 103533364B
Authority
CN
China
Prior art keywords
data
texture
space
value
encoded
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310279623.2A
Other languages
English (en)
Other versions
CN103533364A (zh
Inventor
J·尼斯塔德
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN103533364A publication Critical patent/CN103533364A/zh
Application granted granted Critical
Publication of CN103533364B publication Critical patent/CN103533364B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/90Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using coding techniques not provided for in groups H04N19/10-H04N19/85, e.g. fractals
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N1/00Scanning, transmission or reproduction of documents or the like, e.g. facsimile transmission; Details thereof
    • H04N1/41Bandwidth or redundancy reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/40Analysis of texture
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T11/002D [Two Dimensional] image generation
    • G06T11/001Texturing; Colouring; Generation of texture or colour

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Signal Processing (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Generation (AREA)
  • Compression Of Band Width Or Redundancy In Fax (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

进行数据编码和解码的方法和设备。在对用于图形处理系统的纹理数据元素集合30进行编码时,利用颜色空间中的分割纹理数据元素的一个或更多个无限平面41估计颜色空间中的所关注的纹理数据元素集合的数据值呈现最大方差的方向。对于各个这样的平面,将平面各侧的纹理数据元素值相加以得到相应的和点48、49,确定这两个和点之间的向量50。然后,使用所确定的向量50中的一个在数据空间中的方向来推导将在对纹理数据元素集合进行编码时使用的端点颜色值。

Description

确定纹元方向的方法及设备,编码方法及设备,存储介质
技术领域
本发明涉及进行数据编码和解码的方法和设备,具体地讲,涉及在对用于计算机图形系统的纹理数据进行压缩和解压缩时使用的方法和设备。
背景技术
在计算机图形系统中常见的是通过将所谓的纹理或纹理数据应用于待绘制的表面来产生颜色以对要显示的图像中的位置进行采样。例如,对象的表面细节可这样产生:将预定义的“纹理”应用于表示对象的图元(graphics primitive)集合(例如,多边形),以赋予对象的渲染图像以“纹理”外观。通常,通过将纹理元素或“纹元”(各自表示给定纹理数据(例如,颜色、亮度和/或光照/阴影等值))的阵列存储在给定位置,然后将纹元映射到要显示的图像的对应元素上(例如(且通常为)采样位置集合),来应用这些纹理。所存储的纹理元素(数据)的阵列通常称为“纹理映射”。
这些布置方式可提供相对高的图像质量,但也具有许多缺点。具体地讲,存储纹理数据并在使用中访问这些纹理数据会给图形处理装置带来(例如)高的存储和处理要求(或者相反,在这些要求没有满足的情况下导致性能的降低)。这对于执行图形处理的低功率、移动和手持式装置而言尤其明显,因为这些装置在其(例如)存储、带宽和功率资源以及能力方面存在固有局限。
因此,已知的是,尝试以“压缩”方式对这种纹理数据进行编码,以尝试减小(例如)在使用纹理时可能强加于图形处理装置的存储和带宽负担。
对于纹理压缩技术而言常见的是使用基于块的编码,即,将待编码的纹理元素的总阵列(纹理映射)分割成较小的纹元块(例如,4×4纹元块)的阵列,然后分别对各个这种块进行编码(压缩)和解码的布置方式。这可以(例如)有助于使解码处理更高效,因为例如,解码器可能仅需要对一个或几个编码的块进行解码以确定感兴趣的纹元的值,而非对整个编码的纹理进行解码。
基于块的纹理压缩技术通常确定将用于给定纹元块的颜色(或其它数据)的缩减集或调色板,然后针对块中的各个纹理元素(纹元)将索引存储在所述颜色集或调色板中,以指示将用于所关注的纹理元素(纹元)的颜色。这具有如下优点:针对各个纹元仅需存储索引值,而非整个(例如)颜色值。
一种已知的基于块的纹理压缩技术是所谓的块截断编码(BTC)。在该技术中,总纹理阵列(纹理映射)被再分割成(例如)4×4纹元的较小块,针对各个这种块确定一定数量(通常为两个)的基色或原色值,并且将块中的各个纹元设定为所述基色值之一。这节省了必须存储和访问的数据,但代价是图像质量下降。
美国专利No.5047853描述了一种改进的块截断编码技术。在该技术中,针对各个纹元块同样存储两种基色,但还从这两种基色(如,通这些颜色的线性混合)推导将用于该块的两种附加颜色。这样,提供四种颜色作为纹元块的“调色板”,但针对块仅需存储两种颜色值。然后,利用两个索引比特来对块中的各个纹元编码,以指示四种块“颜色”中的哪一种应该用于该纹元。这种系统所提供的图像质量优于基本块截断编码,但每一块需要更多数据。
还有其它基于块的纹理压缩方案,例如S3TC、BC6和BC7,其类似地将纹理分割成块,然后针对各个块定义两种“端点(endpoint)”基色,通过这两种端点颜色之间的插值来形成附加颜色,然后使用用于各个纹元的索引来从所得的颜色集为纹元选择颜色。
例如,在S3TC纹理压缩格式中,纹理被表示为4×4纹元块。对于各个块,确定两种端点颜色,通过这两个端点之间的插值来形成两种附加颜色。这样针对块得到四种颜色的调色板,这四种颜色在颜色空间中全部落在直线上。然后针对各个纹元使用纹元索引,以将纹元映射到这四种颜色中的一种。各个编码的块存储该块的两种端点颜色以及该块的4×4纹元索引的网格。
这些类型的纹理压缩处理中的最复杂的步骤通常是选择将使用的两种端点颜色。这通常通过确定可投影纹元值的颜色空间中的线来进行。该线通常通过针对所关注的纹元块计算平均颜色和方向向量来推导。然后,确定投影了块中的纹元的颜色空间中的线是穿过该平均颜色点并具有所确定的方向向量的方向的线。
在这些布置方式中,将使用的最佳方向向量是沿着颜色空间中纹元的值呈现最大方差的方向(即,纹元值在颜色空间中的主方向)的向量,因此传统上利用离散卡亨南-洛维(Karhunen-Loewe)变换(KLT)(也称为主分量分析)来计算。
因此,计算要在对纹元块进行编码时使用的两种端点颜色的标准方法(给定未压缩的纹理作为输入,其中每一纹元(例如)用(R,G,B)颜色元组来表示)如下:
1.计算待编码的纹元块上的平均颜色C
2.针对各个纹元,用纹元的颜色值减去平均颜色C:T'=T-C
3.从步骤2的减法所得的纹元值,计算协方差矩阵M
4.计算M的特征值和特征向量,然后保留表示最大能量的特征向量V。这可通过计算与最大特征值对应的特征向量,或者利用“幂迭代”方法寻找主特征向量来进行。
5.定义颜色空间中穿过平均颜色值C并具有所确定的特征向量V的方向的参数线,L=C+t*V
6.将所有纹元投影到该线上(即,针对各个纹元,确定该线上最靠近该纹元的点)。这基本上等同于针对线L上最靠近纹元的点寻找参数值t:给定减法所得的纹元T'=T-C,参数可被计算为t=dot(V,T')/dot(V,V),其中dot()表示通常的向量点积。
7.寻找投影了纹元的线上的最高点和最低点(值)。这基本上等同于寻找得自纹元的最低(t_low)和最高(t_high)参数值。
8.然后将端点颜色定义为投影了纹元的线上的最高和最低点(值)。这基本上等同于定义:E1=C+t_low*V和E2=C+t_high*V
在计算出这两个端点值之后,通过从这些端点颜色的插值计算将用于编码的块的(例如)两个其它的颜色值(如,分别为1/3E1+2/3E2和2/3E1+1/3E2)。然后,向各个纹元分配与块的(例如)四个颜色当中的颜色值最接近的那一个对应的索引(对于快速编码,这可通过仅对上述步骤6中所计算出的参数值“t”重新缩放和量化来进行)。
在该处理中,步骤1-4构成卡亨南-洛维变换,剩余步骤利用KLT结果来执行实际纹理压缩。
利用卡亨南-洛维变换(具体地讲,上述步骤3和4)来确定将使用的向量方向,同时为待编码的纹元块提供对期望的主方向的精确估计在计算上花费高,并且易于数值不稳定且需要处理特殊情况。
例如,当计算特征值时,必须求解3次多项式。这样做在分析上需要多次花费高的超越运算(立方根、正弦、余弦、反正切),并且这样做在数值上需要相对复杂的方法(如,詹金斯-特劳布(Jenkins-Traub))以确保在合理的时间内收敛。
使用幂迭代方法来寻找主特征向量较简单。然而,这仍然需要挑选随机向量,然后反复地将其乘以协方差矩阵,直到所得向量最终收敛于主特征向量为止。还需要注意确保这样的重复不会导致上溢或下溢。
还需要特别注意处理类似均匀颜色块(其导致全零协方差矩阵;这种矩阵没有特征向量)以及存在两个优势相等的方向的块(2重特征值)的情况。
这均表明,尽管推导在对纹元块编码时将使用的端点颜色,尤其是确定这样做时将使用的颜色空间中的线的方向的现有技术可精确地识别将用于此的好的方向(即,纹元值在颜色空间中的主方向(主轴)),那些现有技术在计算上花费高并且慢。
发明内容
因此,申请人认为仍有余地改进尤其是当确定(例如)要在对用于图形处理系统的纹理数据进行编码时使用的端点颜色时,估计待编码的纹元值集合(如,块)的主方向(即,纹元值被认为呈现最大方差的方向)的技术。
根据本发明的第一方面,提供了一种针对将用于图形处理系统的待编码的纹理数据元素集合,确定所述纹理数据元素在数据空间中的方向的方法,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合,该方法包括以下步骤:
针对所述数据空间中将待编码的所述纹理数据元素集合分割成两组的至少一个平面,确定所述数据空间中从所述数据空间中基于待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面一侧的纹理数据元素的值的点到所述数据空间中基于待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面另一侧的纹理数据元素的值的点的向量方向;以及
利用针对所述数据空间中将所述纹理数据元素集合分割成两组的所述至少一个平面中的至少一个、所述纹理数据元素的在所述数据空间中确定的所述方向,来确定所述数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合。
根据本发明的第二方面,提供了一种针对将用于图形处理系统的待编码的纹理数据元素集合,确定所述纹理数据元素在数据空间中的方向的设备,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合,该设备包括:
处理电路,其被配置为:
针对所述数据空间中将待编码的所述纹理数据元素集合分割成两组的至少一个平面,确定所述数据空间中从所述数据空间中基于待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面一侧的纹理数据元素的值的点到所述数据空间中基于待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面另一侧的纹理数据元素的值的点的向量方向;以及
利用针对所述数据空间中将所述纹理数据元素集合分割成两组的所述至少一个平面中的至少一个、所述纹理数据元素的在所述数据空间中确定的所述方向,来确定所述数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合。
本发明涉及一种确定待编码的纹理数据元素集合在数据空间(如,颜色空间)中的方向的技术和系统,所述方向将在确定基础(例如,端点)值时使用,所述基础值将在对纹理数据元素进行编码时使用。然而,为此并非使用(例如)基于特征向量的方法,本发明实际上通过在其数据空间中利用平面将纹理数据元素的值分割成两组,然后将使用的方向确定为从数据空间中基于值落在数据空间中的所述平面一侧的纹理数据元素的值的点到数据空间中基于值落在数据空间中的所述平面另一侧的纹理数据元素的值的点的方向,来确定使用的方向。
如下面将进一步讨论的,申请人发现这种布置方式可得到待编码的纹理数据元素集合在数据空间中的主方向(即,数据空间中纹理数据元素的值呈现最大方差的方向)的足够精确和可靠的估计,其将适用于纹理压缩方案。另外,这无需使用现有技术中所用的基于特征向量的方法。本发明无需使用诸如乘法、除法、求根的复杂计算技术,也不允许特殊情况处理,因此可比标准的基于特征向量的方法更快地估计待编码的纹理数据元素值集合在其数据空间中的主方向。因此,与传统基于KLT的方法不同,其还适用于直接硬件实现,并且由于本发明的相对低的计算负荷,其还适用于例如“超快”软件编码器。
因此,本发明提供了一种确定待编码的纹理数据元素值集合在数据空间中的主方向的方法和系统,其比KLT方法简单许多,因此,与KLT方法不同,其适合于“超快”纹理压缩和硬件纹理压缩,但其仍可保持纹理压缩质量。
本发明可用于需要数据(例如,颜色)空间中的纹元值的1维分区的任何纹理压缩方案,例如用于S3TC、BTC家族、ASTC等的压缩器。其尤其适用于基于块的编码方案,即,待编码的纹理为了编码目的而分割成较小的纹元块(阵列)。
估计了主方向的纹理数据元素集合可包括待编码的纹理的任何合适的纹理数据元素集合。在尤其优选的实施方式中,其包括待编码的纹理为了编码目的(如,在基于块的编码方案中)而分割成的单个纹理数据元素块的纹理数据元素集合。在这种情况下,纹理数据元素集合可包括该块的所有纹理数据元素(在一个优选实施方式中就是如此)。另选地,纹理数据元素集合可包括纹理为了编码目的而分割成的给定纹理数据元素块的纹理数据元素的子集。在(例如)待编码的纹理数据元素块为了编码目的而分割为多个纹理数据元素子集的情况下这可能是适当的。在这后一种情况下,优选地,针对块的纹理数据元素总集为了编码目的而分割成的各个子集(分区)分别以本发明的方式确定将使用的(主)方向。
因此,在一个优选实施方式中,编码的纹理数据元素集合包括纹理为了编码目的而分割成的纹理数据元素块的所有纹理数据元素。在另一优选实施方式中,纹理数据元素集合包括纹理为了编码目的而分割成的纹理数据元素块的纹理数据元素的子集。
如本领域已知的,确定方向时所考虑的纹理数据元素集合(如,块)的数据空间将是与纹理数据元素所表示的数据值对应的数据空间。因此,在纹理数据元素表示颜色值(如,RGB或RGBA值)的情况下,数据空间将是(纹理数据元素的)颜色空间。在一个优选实施方式中,数据空间是颜色空间。然而,如下面将进一步讨论的,纹理数据元素无需必须表示颜色值,因此在其它实施方式中数据空间不是颜色空间,而是一些其它数据空间。
在数据空间中用于将纹理数据元素分割成两组的平面可根据需要来选择。各个平面优选为穿过数据空间并将其分割成两部分的(优选无限的)平面。所述平面可基于纹理数据元素集合中的已知和/或预期的值(例如,纹理数据元素集合的平均值)来选择,在优选实施方式中,所述平面就是这样选择的。
在尤其优选的实施方式中,所述平面是预定义的(即,预定的),即,所述处理使用至少一个(使用一个或更多个)预定平面来分割数据空间中的纹理数据元素,并在数据空间中关于至少一个预定平面确定方向(针对一个或更多个预定平面确定方向)。
所述平面的形式将取决于数据空间(即,纹理数据元素的值)的维数。对于二维纹元值(数据空间),所述平面将是数据空间中的线,对于三维纹元值(数据空间),例如RGB值,所述平面将是数据空间中的二维表面,对于四维纹元值(数据空间),例如RGBA值,所述平面将是数据空间中的三维形状,以此类推。
无论纹理数据元素的值(因此,数据空间)所具有的维数如何均可使用本发明,但最适合于相对低维的数据空间(数据值),例如(优选地)2至4维的数据空间(数据值)。
如上所述,针对所考虑的相应平面确定的数据空间中的方向是从数据空间中基于落在数据空间中的所述平面一侧的纹理数据元素的值的点到数据空间中基于落在数据空间中的所述平面另一侧的纹理数据元素的值的点的方向。如下面将进一步讨论的,申请人已认识到,这可用于得到待编码的纹理数据元素值集合在数据空间中的主方向的合理且足够精确的估计。
为此可根据需要通过(例如,且优选地)将纹理数据元素的值与由所述平面限定的值(落在所述平面中的值)进行比较,以确定在数据空间中纹理数据元素落在该平面的哪一侧,来确定值落在数据空间中的所述平面各侧的纹理数据元素。
用于确定所述方向的数据空间中的两点可基于所关注的平面一侧的纹理数据元素值中的一些(但非所有)。在优选实施方式中,其基于所关注的平面一侧的所有纹理数据元素值。
用于确定所述方向的数据空间中的两点可以按照任何合适和期望的方式基于所关注的平面一侧的纹理数据元素值。然而,在尤其优选的实施方式中,它们是表示或对应于落在所关注的平面一侧的纹理数据元素的平均值的点。
因此,在优选实施方式中,针对所考虑的相应平面确定的数据空间中的方向是从落在数据空间中的所述平面一侧的纹理数据元素的平均值在数据空间中的点到落在数据空间中的所述平面另一侧的纹理数据元素的平均值在数据空间中的点的方向。如下面将进一步讨论的,申请人已认识到,这可得到待编码的纹理数据元素值集合在数据空间中的主方向的足够精确的估计。
因此,在优选实施方式中,本发明包括下面的步骤,或者处理电路被配置为:针对数据空间中将待编码的纹理数据元素集合分割成两组的至少一个平面,确定数据空间中从待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的纹理数据元素的平均值在数据空间中的点到待编码的纹理数据元素集合中的值落在数据空间中的所述平面另一侧的纹理数据元素的平均值在数据空间中的点的向量方向。
在这些布置方式中用于确定方向的数据空间中的两个平均值点可根据需要(基于所关注的平面的各侧的纹理数据元素值)确定。例如,可确定并使用纹理数据元素组的实际真正的平均值点,或者可根据需要使用真正平均值点的近似值,例如,所关注的平面一侧的纹理数据元素组的最小和最大纹理数据元素值之间的中间点,或者基于所关注的平面一侧的纹理数据元素值中的一些(但非所有)的平均值。使用实际平均值点将得到主方向的更好的估计。
因此,在尤其优选的实施方式中,确定了实际平均值点(而非平均值点的近似值)之间的方向。因此,在尤其优选的实施方式中,本发明包括下面的步骤,或者处理电路被配置为:针对数据空间中将待编码的纹理数据元素集合分割成两组的至少一个平面,确定数据空间中从待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的纹理数据元素的平均值在数据空间中的点到待编码的纹理数据元素集合中的值落在数据空间中的所述平面另一侧的纹理数据元素的平均值在数据空间中的点的向量方向。
在这种情况下,数据空间中的平均值点可根据需要确定。例如(如,当使用穿过数据空间的任意平面时),平面各侧的数据元素的平均值可以按照正常方式通过求纹理数据元素的值之和并除以所关注的纹理数据元素数量来确定。
另选地,可确定平面的相应侧的所有值之和以得到总和值,然后,用平面一侧的总和值减去分割平面上的点的值(例如,在分割平面穿过平均值的情况下,纹理数据元素集合的平均值)乘以所关注的平面一侧的数据元素数量,以得到平面一侧的平均值点,其将用于确定所关注的平面的所述方向。(因此,如果在所考虑的平面一侧对n个纹理数据元素值求和,则应该用n个纹理数据元素值之和减去分割平面中的值的n倍,以得到将用于所关注的平面一侧的数据空间中的平均值点以用于方向确定处理。)
在需要(例如)平面给定侧的纹理数据元素的值之和的情况下,可根据需要通过(例如,且优选地)将相应纹理数据元素值简单地加在一起来确定该和。
申请人已认识到,如果纹理数据元素的值以及分割它们的平面在数据空间中偏移,使得分割平面穿过(偏移时)数据空间中的原点,则平面一侧的所有偏移纹理数据元素值之和在数据空间中的点与平面另一侧的所有偏移纹理数据元素值之和在数据空间中的点之间的方向将对应于所关注的纹理数据元素集合在平面各侧的平均值点之间的方向。(由于所有的数据值利用相同的值偏移,所以两个偏移值和点之间的方向将与平面各侧的平均数据值位置之间的方向相同。)
那么这意味着可通过首先使纹理数据元素的值偏移,使得穿过数据空间中的原点的平面将纹理数据元素分割成两组,然后对平面的各相应侧的偏移数据值求和以得到数据空间中的平面各侧的将用于确定方向的点,来确定平面各侧的平均数据值位置之间的方向。
那么这可使得能够仅通过将偏移数据值加在一起来确定数据空间中的方向,由此无需(潜在地)例如花费高的除法。
(确实,在这种情况下确定的偏移和点之间的方向向量的大小可能不与考虑“未偏移”纹理数据元素值的情况下的大小相同。然而,这没有关系,因为感兴趣的是向量的方向,所确定的向量的大小不影响方向确定。)
在这些布置方式中,纹理数据元素值优选地基于所关注的纹理数据元素集合的平均值偏移,因为这意味着穿过原点的平面将有效地穿过纹理数据元素集合的平均值。
因此,在尤其优选的实施方式中,首先确定所考虑的纹理数据元素集合的平均纹理数据元素值(如,平均颜色值),然后,(例如,且优选地,通过用纹理数据元素的实际值减去该平均值)使各个纹理数据元素的值按照该平均值偏移。
然后,优选地利用偏移纹理数据元素值,而非原始(实际)纹理数据元素值,来确定纹理数据元素值和以及在数据空间中的方向。更优选地,这通过针对数据空间中将待编码的纹理数据元素集合的偏移值分割成两组的各个平面,确定数据空间中待编码的纹理数据元素集合中的偏移值落在数据空间中的所述平面一侧的一个或更多个(优选为多个,并且优选为所有)纹理数据元素的偏移值之和在数据空间中的点与待编码的纹理数据元素集合中的偏移值落在数据空间中的所述平面另一侧的一个或更多个(优选为多个,并且优选为所有)纹理数据元素的偏移值之和在数据空间中的点之间的向量的方向,来实现。
优选地,确定数据空间中的平面各侧的所有纹理数据元素的偏移值之和在数据空间中的点,因为这将得到主方向的更好的估计。然而,如果需要,也可对平面给定侧的并非所有(即,一些但非所有)值求和。
如下面将进一步讨论的,这有利于方向确定处理的许多优化。
在这些布置方式中,用于待编码的纹理数据元素集合的平均值可同样是(在优选实施方式中是)纹理数据元素的实际真正的平均值,或者如果需要,其可以是真正平均值的近似值,例如最小和最大纹理数据元素值之间的中间值。(用于确定实际平均值的任何除法可能相对花费低,尤其是如果除以2的幂,然后使用该值来使数据值偏移,仅需要一次除法,而非多次除法。)
可根据需要确定数据空间中的点(如,平均数据值点)之间的方向(向量)。例如,可用数据空间中的多个点之一的向量值减去另一点的向量值。
在使用平均值使数据值偏移的情况下,可优化方向确定处理。具体地讲,如果纹理数据元素值基于其平均值偏移,则两个偏移值和(平面的每一侧一个和)之差将等于穿过数据空间中的原点的平面的情况下的和值之一的两倍。那么这意味着,至少在穿过数据空间中的原点的平面的情况下,可仅从平面一侧的所有纹理数据元素的偏移值之和确定所述方向(而无需将该和加倍(尽管如果需要可以这样做))。
在这种情况下,使用的方向可被确定为(优选被确定为)纹理数据元素值的数据空间(如,颜色空间)中的原点与(偏移)值落在数据空间中的所述平面一侧的一个或更多个(优选为多个,并且优选为所有)纹理数据元素的偏移值之和在数据空间中的点之间的方向。优选地,使用(偏移)值落在数据空间中的所述平面一侧的所有纹理数据元素的偏移值之和在数据空间中的点。由于考虑原点,所以可仅将数据空间中的有关方向确定为落在所考虑的平面一侧的纹理数据元素值的(向量)和。
因此,在尤其优选的实施方式中,本发明的方法和设备包括下面的步骤,或者处理电路被配置为:首先确定待编码的纹理数据元素集合的平均数据值,然后按照该平均值使各个纹理数据元素的值偏移,然后通过针对数据空间中将偏移纹理数据元素分割成两组的至少一个平面,确定在数据空间中数据空间中的原点与待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的一个或更多个(优选为多个,并且优选为所有)纹理数据元素的偏移值之和在所述数据空间中的点之间的向量的方向,来确定使用的方向。
类似地,根据本发明的另一方面,提供了一种针对将用于图形处理系统的待编码的纹理数据元素集合,确定所述纹理数据元素在数据空间中的方向的方法,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合,该方法包括以下步骤:
确定待编码的纹理数据元素集合的平均数据值,然后按照该平均值使各个纹理数据元素的值偏移;
针对数据空间中将待编码的所述纹理数据元素集合的偏移值分割成两组的至少一个平面,确定在数据空间中数据空间中的原点与待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的一个或更多个(优选为多个,并且优选为所有)纹理数据元素的偏移值之和在所述数据空间中的点之间的向量的方向;以及
利用针对将纹理数据元素集合的偏移值分割成两组的所述至少一个平面中的至少一个在纹理数据元素的数据空间中确定的所述方向,确定数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。
根据本发明的另一方面,提供了一种针对将用于图形处理系统的待编码的纹理数据元素集合,确定所述纹理数据元素在数据空间中的方向的设备,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合,所述设备包括:
处理电路,其被配置为:
确定待编码的纹理数据元素集合的平均数据值,然后按照该平均值使各个纹理数据元素的值偏移;
针对数据空间中将待编码的所述纹理数据元素集合的偏移值分割成两组的至少一个平面,确定在数据空间中数据空间中的原点与待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的一个或更多个(优选为多个,并且优选为所有)纹理数据元素的偏移值之和在所述数据空间中的点之间的向量的方向;以及
利用针对将纹理数据元素集合的偏移值分割成两组的所述至少一个平面中的至少一个在纹理数据元素的数据空间中确定的所述方向,确定数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。
本领域技术人员将理解,适当地,本发明的这些方面和实施方式可包括(优选地,包括)本文描述的本发明的优选和可选的特征中的任何一个或更多个或者所有。
在这些布置方式中,根据需要,方向向量可被确定为从原点到和点,或从和点到原点。同样,根据需要,和点可以是所有正纹元值(相对于所述平面)的和点,或者所有负纹元值的和点。在优选实施方式中,使用正值的和点。如上所述,由于考虑原点,可仅将方向计算为所有正(或所有负)纹元值(相对于所述平面)的向量和。
从以上内容将理解,因此,本发明可(优选地就是)主要仅利用纹理数据元素数据值的比较和加法来实现。那么这意味着与已知基于KLT的方法不同,本发明适合于直接硬件实现,并且适用于例如“超快”软件编码器。
针对确定了方向的平面优选全部穿过所考虑的纹理数据元素集合的平均位置(值)(该平均值可为真正的平均值,或者真正平均值的近似值,如上所述)。这有助于简化方向寻找处理。
因此,如果纹理数据元素的实际(即,未偏移)数据值将用于方向寻找处理,则针对确定了方向的平面或各个平面优选穿过在数据空间中确定的纹理数据元素集合的平均值(该平均值可为真正的平均值,或者真正平均值的近似值,如上所述)。
对应地,如果已基于所考虑的集合的纹理数据元素的平均值偏移的纹理数据元素的数据值将用于方向寻找处理,则针对确定了方向的平面或各个平面优选穿过数据空间的原点(因为在这种情况下,原点将对应于原始纹理数据元素值的考虑偏移的平均)。
尽管也可对待编码的给定纹理数据元素集合仅针对一个平面确定将使用的方向(如下面将进一步讨论的,在一个优选实施方式中,就是如此),申请人已认识到,如果以本发明的方式针对数据空间中分割纹理数据元素的多个不同的平面确定数据空间中的方向,则将趋于确定待编码的给定纹理数据元素集合的主方向的更好的估计。
因此,在尤其优选的实施方式中,本发明的方法包括下面的步骤,并且本发明的设备包括处理电路,该处理电路被配置为:
针对数据空间中将待编码的纹理数据元素集合分割成两组的多个不同的平面中的每一个,确定数据空间中从数据空间中基于待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的纹理数据元素的值的点到数据空间中基于待编码的纹理数据元素集合中的值落在数据空间中的所述平面另一侧的纹理数据元素的值的点的向量的方向;以及
利用针对将纹理数据元素集合分割成两组的所述多个不同的平面中的至少一个在纹理数据元素的数据空间中确定的所述方向,确定数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。
如果考虑多个不同的平面,则使用的多个平面优选地在纹理数据元素的数据(如,颜色)空间中不相关,最优选地彼此正交(或者至少与所考虑的一个或更多个其它平面正交)。优选地,考虑多个相互正交的平面的集合。利用不相关且正交的平面增加了基于所述平面确定的方向之一将是所考虑的纹理数据元素值集合的主方向的好的估计的可能。
如果确定关于多个不同平面的方向,则优选针对至少与数据空间的维数一样多的平面(在优选实施方式中,针对与数据空间中的维数一样多的平面,即,对于N维数据空间(数据值),针对N个平面)来进行。这有助于进一步确保测试的至少一个平面将得到作为数据空间中的纹理数据元素值的主方向的好的估计的方向。
在这种情况下,各个平面优选与其它平面正交。最优选地,各个平面垂直于数据空间的多个轴之一(垂直于数据空间的各个不同的轴)(即,对于N维数据空间,所述处理优选地使用N轴对齐的平面)。
因此,在三维数据空间(如,RGB颜色空间)的情况下,优选考虑三个正交平面,最优选地,考虑垂直于x轴(R轴)的平面、垂直于y轴(G轴)的平面以及垂直于z轴(B轴)的平面中的每一个)。
如果在数据空间中执行方向确定之前数据值按照它们的平均值偏移,则优选考虑由x=0(R=0)限定的平面、由y=0(G=0)限定的平面以及由z=0(B=0)限定的平面中的每一个。在这种情况下,方向向量计算将对于由红色=0限定的平面,等同于具有正红色分量的所有纹元的偏移值的(向量)和(即,在按照所关注的纹元集合的平均值偏移之后值具有正红色分量的所有纹元的偏移值的(向量)和),对于由绿色=0限定的平面,等同于具有正绿色分量的所有纹元的偏移值的(向量)和,对于由蓝色=0限定的平面,等同于具有正蓝色分量的所有纹元的偏移值的(向量)和(或者对应地,对于各个平面,分别等同于具有负红色、绿色或蓝色分量的所有纹元的偏移值的(向量)和)。
对于第四维,例如RGBA颜色空间,相应地,也应该优选使用垂直于第四轴(如,α轴)的第四平面(例如,由α=0限定的平面)。在这种情况下,由α=0限定的平面的第四估计向量将是具有正α分量的所有纹元的偏移值的(向量)和(或者对应地,具有负α分量的所有纹元的偏移值的(向量)和)。
如果考虑多个不同的平面,则针对各个平面确定数据空间中的方向。然后,应该使用所确定的方向来确定将在确定所考虑的纹理数据元素集合的基础数据值时使用的数据空间中的方向。
在一个优选实施方式中,这通过如下步骤来实现:对所考虑的一些或所有(优选为所有)平面的方向向量求和,从而得到所关注的平面集合的“总”方向向量,然后其将被用作将在确定所考虑的纹理数据元素集合的基础数据值时使用的数据空间中的方向。
在另一尤其优选的实施方式中,选择所确定的多个方向之一作为将在对纹理数据元素集合进行编码时使用的方向,即,选择所确定的多个方向之一作为将使用的方向。
因此,在优选实施方式中,如果考虑多个不同的平面,则选择针对多个平面之一确定的方向作为将在确定所考虑的纹理数据元素集合的基础数据值时使用的数据空间中的方向。
因此,在尤其优选的实施方式中,本发明包括下面的步骤,或者处理电路被配置为:使用和/或选择针对数据空间中将纹理数据元素分割成两组的所述至少一个平面之一在纹理数据元素的数据空间中确定的方向,作为数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。
类似地,在尤其优选的实施方式中,本发明的方法包括下面的步骤,并且本发明的设备包括处理电路,该处理电路被配置为:
针对数据空间中将待编码的纹理数据元素集合分割成两组的多个不同的平面中的每一个,确定数据空间中从数据空间中基于待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的纹理数据元素的值的点到数据空间中基于待编码的纹理数据元素集合中的值落在数据空间中的所述平面另一侧的纹理数据元素的值的点的向量的方向;以及
选择针对将纹理数据元素集合分割成两组的所述多个不同的平面中的一个在纹理数据元素的数据空间中确定的方向,作为数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。
如果所考虑的多个平面之一的方向将被选择作为将使用的方向,则可根据需要选择将使用的方向。在尤其优选的实施方式中,数据空间中具有较长(优选地,具有最长)向量的方向(即,两个平均数据值点之间的距离,或者(偏移)数据值和点与原点之间的距离(如果数据值基于平均值而偏移的话)较大的方向(优选地,两个平均数据值点之间的距离,或者(偏移)数据值和点与原点之间的距离(如果数据值基于平均值而偏移的话)最大的方向))被选择作为将在确定纹理数据元素集合的基础数据值时使用的方向。申请人已认识到,所确定的方向向量越长,其落在数据空间中的纹理数据元素值的主方向上的可能性越高,因此选择较长或最长的方向向量作为将使用的方向应该得到比选择较短方向向量更好的主方向的估计。
因此,在优选实施方式中本发明包括以下步骤:基于方向向量的长度选择将在确定基础数据值时使用的方向(向量),所述基础数据值将在对所关注的纹理数据元素集合进行编码时使用(并且对应地,基于方向向量的长度,确定是否将针对已用于分割纹理数据元素值的平面确定的方向向量用作将在确定基础数据值时使用的方向(向量),所述基础数据值将在对所关注的纹理数据元素集合进行编码时使用)。
类似地,本发明优选包括以下步骤:以上述方式针对数据空间中将纹理数据元素值分割成两组的多个平面中的一个或更多个(在优选实施方式中,针对每一个)确定向量方向,然后基于方向向量的长度选择那些向量之一(的方向)作为将在确定基础数据值时使用的方向,所述基础数据值将在对所关注的纹理数据元素集合进行编码时使用。优选地,选择方向向量中足够长的一个(优选地,最长的一个)。
在这些布置方式中,可针对各个平面确定方向向量,然后例如通过比较各个向量的长度(在一个优选实施方式中,就是如此)来识别并使用所确定的所有方向向量中的最长向量。
另选地,例如,可设定优选预定的阈值向量长度,如果发现向量超过该长度,则使用该向量,尽管仍将确定和/或测试其它向量。在这种情况下,依次确定和/或测试各个平面的方向向量,将各个向量与阈值长度进行比较,如果该向量超过阈值长度,则使用该向量,而不再针对任何其它平面确定和/或测试向量(如果没有发现向量超过阈值长度,则优选地使用最长向量)。
在这种迭代处理中,优选地,按照最可能确定主方向的平面首先测试的顺序来测试平面(如,基于典型纹理(如游戏内容)的统计分析)。
可根据需要确定各个方向向量的长度。例如,可使用通常的利用点积的欧几里得方法。另选地,如果需要,可使用各个向量的曼哈顿长度,以避免不得不执行乘法。
尽管如上所述,使用多个平面可得到所关注的纹理数据元素集合在数据空间中的主方向的更精确的估计(因此,出于该原因而为优选的),申请人已发现,仅使用单个平面可能就足够了,尤其是在特定情况下(如,对于特定纹理内容形式)。仅考虑单个平面将降低方向估计的可能质量,但将更快地执行方向估计,因此可能适合于(例如)需要增加的速度并且可接受任何质量损失的“超快”编码实现。因此,在另一优选实施方式中,仅针对数据空间中的单个平面确定方向,然后将在对纹理数据元素进行编码时使用该方向。
因此,在优选实施方式中,本发明的方法包括下面的步骤,并且本发明的设备包括处理电路,该处理电路被配置为:
针对数据空间中将待编码的纹理数据元素集合分割成两组的一个且仅一个平面,确定数据空间中从数据空间中基于待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的纹理数据元素的值的点到数据空间中基于待编码的纹理数据元素集合中的值落在数据空间中的所述平面另一侧的纹理数据元素的值的点的向量的方向;以及
利用针对数据空间中将待编码的纹理数据元素集合的值分割成两组的所述平面在纹理数据元素的数据空间中确定的所述方向,作为数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。
如果仅考虑数据空间中的单个平面,则优选地,选择将使用的平面以避免通常情况最佳方向(即,给定的典型和/或已知纹理内容的可能的主方向)落在数据空间中将用于分割纹理数据元素值的平面中。可通过(例如)预先测试典型纹理内容(如,游戏纹理)来确定这些通常情况最佳方向(以因此避免)。
例如,申请人已确定,对于RGB颜色内容,尤其是当数据值接近灰色时,纹理数据元素集合的主方向通常非常接近于(1,1,1)。因此,仅使用单个平面时RGB内容将使用的优选平面是由R+G+B=0限定的平面。在这种情况下,如果纹理数据元素值按照它们的平均值偏移,则将通过R+G+B和为正的集合中的各个纹理数据元素的R+G+B和之和(或者通过R+G+B和为负的集合中的各个纹理数据元素的R+G+B和之和)来给出和点(用于确定与RGB颜色空间中的原点之间的方向向量)。
一旦待编码的纹理数据元素集合在数据空间中的方向已确定,则该方向可用于(优选用于)产生将在对所关注的纹理数据元素集合(如,块)进行编码时使用的基础数据值(如,颜色)。
本发明因此还扩展至(优选包括):使用所确定和/或选择的纹理数据元素集合在数据空间中的方向来推导将在对纹理数据元素集合进行编码时使用的基础数据值。
例如取决于并根据所使用的编码方案,基础数据值可包括任何合适的数据值。在优选实施方式中,推导多个基础数据值,(如,颜色值)的集合。
在尤其优选的实施方式中,确定待编码的纹理数据元素集合的包括一对数据值的基础数据值集合。最优选地,针对所关注的纹理数据元素集合确定一对端点数据值(例如,一对端点颜色值),优选地从所述一对端点数据值(最优选地,通过确定端点值的加权和)来插值该集合的纹理数据元素的数据(如,颜色)值。如果需要,基础数据值对可相反包括(例如)基础值和差值,然后所述值可组合以得到纹理数据元素的值。
可利用所确定的数据空间中的方向以任何期望且合适的方式确定基础数据值,例如,取决于且根据所使用的纹理压缩方案。
在尤其优选的实施方式中,利用待编码的纹理数据元素集合的平均值(其根据需要可以是纹理数据元素集合的值的真正的平均值,或者是该平均值的近似值)以及所确定的(选择的)向量方向来确定将用于纹理数据元素集合的基础数据值。
优选使用这些值推导数据空间中可投影纹理数据元素值的线。优选地,利用待编码的纹理数据元素集合的平均值以及所确定的(选择的)向量方向来限定数据空间中的参数线。
L=C+t*V
其中:
L是数据空间中的参数线;
C是纹理数据元素集合的平均值;并且
V是所确定的向量方向。
然后,优选使用如此推导的线来确定将使用的基础数据值。优选地,落在该线上的值被用作或用于推导将使用的基础数据值。
在一个优选实施方式中,数据空间中将投影纹理数据元素集合的纹理数据元素(在将纹理数据元素的值投影到该线上时)的确定的线上的最低和最高值点被用作或用于推导将使用的基础数据值(端点值)。例如,最高和最低值可直接用作端点值(例如),或者可调节那些值以得到将使用的端点值,以(例如)用端点处的准确度换取编码的数据值范围的中间处的更大的精度。
如果需要,另外或者作为替代,还可使用从数据空间中的线确定的值(如,最高和最低值)作为(例如)更复杂的基础数据值确定处理的起始值(作为其输入)。
如果在“偏移”数据值空间中推导所述线,则在确定将使用的实际基础(如,端点)数据值时,应该将平均数据值与从数据空间中推导出的线确定的数据值相加。
在优选实施方式中,首先将集合中的所有纹理数据元素投影到数据空间中的推导出的线上。这优选通过针对数据空间中的线L上最接近所关注的纹理数据元素的值的点求参数值t来完成。如果纹理数据值已利用编码的纹理数据元素集合的平均值偏移,则参数值t可以是(并且优选被计算为)t=dot(V,T')/dot(V,V)(其中dot()表示通常的向量点积,T'是偏移纹理数据元素值,V是所确定的向量方向)。
一旦这完成,优选确定针对纹理数据元素集合求出的最低和最高参数值t_low和t_high(即,投影了纹理数据元素集合的纹理数据元素的数据空间中的确定的线上的最低和最高值点的参数值)。然后,优选使用这些最低和最高参数值来定义将用于所关注的纹理数据元素集合的相应的基础(端点)数据值,优选如下:
端点颜色1=C+t_low*V
端点颜色2=C+t_high*V
其中C是纹理数据元素集合的平均值,V是所确定的向量方向,t_low是得自纹理数据元素的最低参数值,t_high是得自纹理数据元素的最高参数值。
一旦利用数据空间中的确定的方向确定了相应的基础(如,端点)数据值,则那些数据值可用于(优选用于)对所关注的纹理数据元素集合进行编码。
因此,尽管上面具体参照推导将在对纹理数据块进行编码时使用的基础数据值(如,端点颜色)的处理描述了本发明,本发明还扩展至(优选包括):利用所确定的基础数据值将纹理数据元素集合编码为表示纹理数据元素的纹理数据块。
因此,在尤其优选的实施方式中,本发明还包括下面的步骤,或者处理电路被配置为:利用所确定的基础数据值将纹理数据元素集合编码为表示纹理数据元素的纹理数据块。
类似地,本发明还扩展至(优选包括):利用所确定的基础数据值产生表示纹理数据元素块(其包括所关注的纹理数据元素集合)的编码的纹理数据块。
编码方式将取决于所使用的总纹理编码方案。
在一个优选实施方式中,首先使用所确定的基础数据值来通过所确定的基础(如,端点)值的插值确定将用于纹理数据元素集合的另外的(优选两个另外的)数据值。优选地,然后向集合中的各个纹理数据元素分配索引值,所述索引值将纹理数据元素映射至纹理数据元素集合的如此确定的颜色中的一个(即,最接近的一个)(即,端点颜色和插值的颜色中的最接近的一个)。例如,在使用的编码方案为S3TC、BC6或BC7的情况下将这样做。在优选实施方式中,通过在将纹理数据元素投影到数据空间中的确定的线上时重新缩放并量化针对纹理数据元素推导出的参数值“t”来完成纹理数据元素值到颜色的映射。
在另一优选实施方式中,向各个纹理数据元素分配索引值,所述索引值将用作(或者可用于推导)权重以用于使用针对纹理数据元素集合确定的基础数据值(如,端点颜色)对纹理数据元素的数据值插值。例如,在使用的编码方案为ASTC的情况下将这样做。
如果所关注的纹理数据元素集合对应于待编码的纹理数据元素块的所有纹理数据元素,则一旦确定纹理数据元素集合的基础数据值,可对纹理数据元素块编码以产生表示纹理数据元素集合的编码的纹理数据块。
另一方面,如果所关注的纹理数据元素集合仅对应于待编码的纹理数据元素块的纹理数据元素的子集或分区,则优选针对纹理数据元素块所分割成的各个相应的子集(分区)重复(主)方向和基础数据值确定处理,以针对纹理数据元素块所分割成的各个子集(分区)得到单独的基础数据值集合。这样做的优点在于,块内的不同分区可实际上使用不同的编码方案(在一个优选实施方式中,就是如此)。
如果给定纹理数据块中的待编码的纹理数据元素块被分割成多个纹理数据元素“子集”或“分区”,优选使用2、3或4个分区。
一旦确定了待编码的纹理数据元素块所需的所有的(主)方向和基础数据(如,端点)值,则优选产生表示所关注的纹理数据元素块的编码的纹理数据块。
所述编码处理可使用任何合适和需要的编码方案。其优选使用(优选已知的)基于块的编码方案,例如S3TC、BC6、BC7或ASTC。(本发明的优点在于其可与现有传统的基于块的编码方案一起使用)。
因此,本发明的方法和设备优选还包括下面的步骤,或者处理电路被配置为:优选使用基于块的编码方案对待编码的纹理所分割成的纹理数据元素块进行编码,以得到表示纹理数据元素块的编码的纹理数据块。
各个编码的纹理数据块应该包括解码器所需(和/或期望)的所有信息,以使得解码器能够对编码的纹理数据块进行解码,以(至少近似地)再现块所表示的纹理数据元素的原始阵列。为此编码的纹理数据块中应该包括的数据将取决于所关注的纹理数据编码(压缩)方案的确切性质。此数据可以按照任何合适和期望的方式(即,实践中,以解码器可识别并正确解释的方式)布置在编码的纹理数据块中。
通常,优选的是(在一个优选实施方式中就是如此)编码的纹理数据块至少包括指示(或使得能够推导)编码的纹理数据块的基础数据(如,颜色)值(例如,颜色端点值)的数据、以及使得解码器能够从块的基础数据值(如,端点颜色)确定给定纹理数据元素的值(至少其近似值)的信息。
在一个优选实施方式中,各个编码的纹理数据块包括(除了别的以外)指示(或者指示如何产生)将用于产生块所表示的纹理数据元素集合的数据值的基础数据值(如,颜色端点值)集合的数据、以及指示如何使用基础数据值(如,颜色端点值)集合来产生将使用基础数据值集合的纹理数据元素集合的纹理数据元素的数据值的数据。
在尤其优选的实施方式中,编码的纹理数据块包括指示如何利用编码在块中的整数值集合产生块的基础数据值集合的数据。在这种情况下,可执行使用所述整数值来产生基础数据值,和/或可从所述整数值推导将使用的一些或所有基础数据值。
在尤其优选的实施方式中,指示如何产生将使用的基础数据值集合的数据指示将使用多个选择的(优选预定的)基础数据值集合产生技术或方法中的哪一个。
如果使用分割,在一个实施方式中,纹理数据块的各个纹理数据元素分区共享相同的基础值(如,颜色端点值)、和/或指示如何产生基础数据值集合的数据集合,所述基础数据值集合将用于产生块的数据值。
在使用分割的另一实施方式中,纹理数据块的各个纹理数据元素分区具有其自己的基础值(如,颜色端点值)、和/或指示如何产生基础数据值集合的数据集合,所述基础数据值集合将用于产生分区所对应的特定纹理数据元素子集(即,分区所对应的子集)的数据值。如上所述,这样做的优点在于块内的不同分区实际上可使用不同的编码方案(在一个优选实施方式中,就是如此)。
如果编码的纹理数据块可包括(或者包括)多个分区,则编码的纹理数据块优选还包括指示该块所使用的分割图案的信息。此信息可采取任何合适和期望的形式,例如向解码器指示使用了存储的预定义的分割图案中的哪一个的索引。
在一个优选实施方式中,利用分割图案生成函数产生分割图案,那么编码的纹理数据块优选地包括将由解码器使用以配置分割图案生成函数的信息,以使得解码器能够产生所使用的特定分割图案。此信息优选包括分割图案生成函数索引或种子以及分区数量,其在编码阶段用作分割图案生成函数的输入以用于产生将使用的分割图案。(然后,解码器优选使用此信息以及待解码(即,待确认其值)的纹理数据元素的位置,作为分割图案生成函数的输入,以确定所关注的纹理数据元素属于编码的纹理数据块的哪一分区。一旦这完成,则解码器可(例如,且优选地)确定将用于纹理数据元素被确定所属于的分区的基础数据值(如,端点颜色),然后使用那些数据值来确定将用于纹理数据元素本身的数据值(如,颜色值)。)
如上所述,编码的纹理数据块优选包括指示如何使用块的相应的基础数据值(如,端点颜色)集合或产生的基础数据值集合来产生块的纹理数据元素的数据值的数据。
编码的纹理数据块中所包括的指示如何使用基础数据值(如,颜色端点值)集合来产生块的各个纹理数据元素的数据值的数据可以是这样的任何合适的数据。在优选实施方式中,其包括索引数据,其将索引赋予所关注的一些或所有纹理数据元素,并可用于从基础数据值推导纹理数据元素的数据值。
在一个优选实施方式中,所述索引将用于将所关注的纹理数据元素映射到块的颜色集合中的数据值(如,颜色)(例如,就像S3TC纹理编码方案中一样)。
在另一优选实施方式中,所述索引将用于从基础(如,端点)数据值对给定纹理数据元素的数据值进行插值。优选地,各个索引将用作(或用于推导)权重以计算基础数据值(如,端点值)的加权和(然后,该加权和被用作索引所涉及的纹理数据元素的数据值)。
因此,例如,如果产生两个端点数据值,则优选使用这两个端点数据值将用于的给定纹理数据元素的索引来从这两个端点值推导纹理数据元素的数据值(优选通过基于索引值在两个端点数据值之间插值)。
编码的纹理数据块优选包括(和/或使得能够推导)编码的纹理数据块所表示的各个单独的纹理数据元素的索引。在一些优选的布置方式中,这通过在编码的纹理数据块中为编码的纹理数据块所表示的每一纹理数据元素(明确地)提供索引值来完成。在其它优选布置方式中,编码的纹理数据块仅编码(明确包括)有限数量的索引值,在使用时(在解码时)从这些索引值推导将用于编码的块所表示的纹理数据元素的索引(优选通过从所提供的索引值适当插值)。
在优选实施方式中,可使用不同的“索引”编码方式,各个编码的纹理数据块包括指示块所使用的编码方式的信息(优选通过在编码的纹理数据块中包括指示块将使用(所使用)的预定“索引模式”的信息)。优选地,存在可使用的多个预定义的索引模式。
编码的纹理数据块中将包括的信息可按照任何期望的顺序和布置方式包括在编码的纹理数据块中。在优选实施方式中,各个编码的纹理数据块使用特定(优选常用的)格式和组织方式。
本发明可用于对任何合适形式的纹理数据进行编码。如上所述,这种数据在其初始、原始或未编码的形式下通常以纹理元素或纹元阵列的形式排列,因此在尤其优选的实施方式中,本发明用于对纹理数据元素(纹元)阵列进行编码。如本领域已知的,这些阵列通常为2维的,但也可使用本发明来对3维阵列编码(实际上,本发明的一个优点在于其可用于以高效的方式对3维纹理编码)。
待编码的纹理和纹理数据元素可表示任何合适的纹理数据。在一个优选实施方式中,所述纹理是(例如,且优选地)在渲染图像和/或帧以便于显示时将用于图形处理的纹理,例如,如本领域已知的,将应用于待渲染图元的图像、颜色(包括灰度)、亮度、凹凸映射、阴影映射(光照映射)等。
然而,(例如)如果期望使用图形纹理(以及图形纹理处理)来表示和处理其它形式的数据,则本发明还可用于处理和编码(解码)将用于处理(表示)其它形式的数据的纹理。如本领域已知的,除了“传统”图形目的之外,纹理还可用于(用于)图形处理以表示和处理许多不同类型的数据,例如,3D雾、流场等。本发明可同样适用于(扩展至)图形处理系统中的这些纹理类型和用途。因此,如果需要,本发明的纹理可表示在图形处理系统中将被处理为纹理的其它形式的数据。
在尤其优选的实施方式中,纹理数据元素各自表示纹理元素的颜色值,但这不是必要的。优选地,纹理数据元素表示:每纹元具有1、2、3或4个分量(分别为亮度、亮度α、RGB和RGBα)的低动态范围(LDR)纹理数据或者每纹元具有1、3或4个分量的高动态范围(HDR)纹理数据。
本领域技术人员将理解,与纹理元素一致的实际数据值(均在其初始未编码的原始形式及其编码的形式下(或者至少在编码的数据已解码以再现原始数据表示时))将取决于纹理元素旨在定义或表示的“纹理”的形式。
因此,例如,如果纹理元素定义将使用的颜色,则处于其初始未编码形式的纹理数据元素可各自包括颜色值集合(红色、绿色、蓝色(RGB)、颜色和透明度值集合(红色、绿色、蓝色、α(RGBA))或者亮度和色度值的集合,并且编码的数据在被解码(再现)时将产生对应的颜色值集合。
在阴影(光照)映射的情况下,例如,纹理数据元素将各自包括或表示指示(例如)纹理元素处于光照中还是阴影中以及该纹理元素的光照或阴影的量(和/或颜色)的数据值集合。类似地,对于法向映射(凹凸映射),各个纹理元素的数据将是指示该纹理元素处光的反射方向的值集合。
纹理数据元素还可(例如)包括z值(深度值)、模板值、亮度值(亮度纹理)、亮度α纹理和/或光泽度映射(即,纹理元素位置处表面是否有光泽)等。
在适当的情况下,各个纹理数据块可仅用剩余数据值对产生再现原始数据所需的一些(但非所有)数据值所需的数据编码,所述剩余数据值将作为数据再现处理的一部分推导(如,从其推导)。因此,在一个优选实施方式中,编码的纹理数据块用代表其它部分的原始数据的数据对代表一些原始纹理数据的数据进行编码,所述其它部分的原始数据将在解码处理期间从编码的数据推导出。
例如,在法向映射中,编码的纹理数据可(例如)仅用第三分量(dz)对两个法向分量(如,dx和dy)编码,所述第三分量将在对数据解码时从这两个值推导(因为已知的是分量的平方和必须为1(因为其定义长度1的法向向量):1=dx2+dy2+dz2)。
这里应该注意的是,如本领域技术人员将理解的,本文中提及“颜色”或“亮度”等相应地是指使得所关注的颜色或亮度等能够被再现于(例如)显示器上的数据值集合。这些数据值可包括任何合适的颜色或亮度等数据集合,例如如上所述的RGBA值集合。同样,提及产生编码的纹理数据块的数据值集合以及各个纹理元素的数据值适当地涵盖了各自包括值的组合(例如颜色值集合(RGB或RGBA))的数据值。
从上述内容将理解,本发明尤其适合于基于块的编码方式,其中各个编码的纹理数据块编码(表示)所关注的纹理映射的较小部分(块)(使得多个这样的单独的纹理数据元素块将被编码,以对待编码的整个纹理(纹理数据元素阵列)(如纹理映射)编码。因此,在尤其优选的实施方式中,本发明还包括:首先将待编码的纹理(如,纹理映射)再分割为多个纹理数据元素块,然后根据本发明确定各个纹理数据元素块的主方向并将各个纹理数据元素块编码为纹理数据块。
优选的是将编码的纹理分割成相等尺寸的块,即,使得各个编码的纹理数据块表示相同数量的纹理数据元素。这可(例如)简化寻找给定纹理数据元素位于哪一编码块的任务。在优选实施方式中,各个编码的纹理数据块对4×4、5×5、6×6、8×8、10×10、12×12、3×3×3、4×4×4、5×5×5或6×6×6纹元阵列(或其等同物)编码。(本发明可支持许多不同的块尺寸。)
还优选的是各个编码的纹理数据块具有相同的大小,即,对于所关注的纹理使用固定速率编码方案。如本领域已知的,这有利于编码和解码处理。
可根据需要选择将纹理实际再分割为较小的块以及编码为编码纹理数据块的顺序。在优选实施方式中,按照光栅顺序对块编码,尽管当然,其它布置方式也是可能的,例如使用莫顿(Morton)顺序。
将待编码的各个纹理数据元素块编码为编码数据块的编码处理可以按照任何合适的方式在待编码的初始(原始)纹理数据上进行或利用待编码的初始(原始)纹理数据来进行。例如,如已知的现有技术处理中一样,待编码的纹理数据元素块可(优选就是)首先利用可用的(即,编码的纹理数据块实际上可表示的)各种不同的编码可能中的一些或全部来编码。这将得到可能的编码块的集合,然后可将该集合与原始数据进行比较,以确定(例如)块的哪一编码版本与原始数据比较时误差(再现时)最小(然后,可选择该编码方式作为将在编码时用于该原始纹理数据块(纹元阵列)的编码方式)。
然后,这将针对原始数据(如,纹理映射)所分割成的各个不同的纹理数据元素块重复,以生成表示(且对应于)原始数据集合(如,纹理映射)的编码纹理数据块流或集合。然后,可将此编码纹理数据块集合存储(例如)在诸如DVD的便携式存储装置上,以便于未来使用,例如,当期望将该纹理应用于待渲染的图像时。优选地,纹理被编码为Mip映射集合,各个Mip映射利用本发明来产生。
原始数据(如,纹理映射)为了编码目的而分割成的各个纹理数据元素块优选具有相同的尺寸。优选将使用的块尺寸提供给解码器。块尺寸优选不被包括在编码的纹理数据块本身中,而是优选单独地提供给解码器。例如,块尺寸可由提供给解码器的另一参数来隐含地指示(例如且优选地,图像类型),或者被包括在(指示在)与编码纹理数据块集合相关(附着)的(全局)数据头中。
(本领域技术人员将理解,反转的解码处理,即,使用编码纹理数据块来生成一个或更多个纹理数据元素或者纹理数据元素阵列以便于使用,将基本上是编码处理的逆处理,因此包括(例如)确定表示所关注的纹理数据元素的编码纹理数据块,从识别出的编码纹理数据块确定将用于纹理数据元素的基础数据值(如,端点颜色)集合,然后相应地产生纹理数据元素的数据值(如,颜色)。)
尽管上面具体参照了用于图形处理系统的纹理数据的编码描述了本发明,但是本领域技术人员将理解,其同样适用于其它形式的数据的编码,尤其适用于(相似的)数据元素(如,值遵循共同或相似的格式和/或将是(或可用于)相似或相同的目的或者表示相似的信息的数据元素)阵列或块形式的(或能够以该形式表达的)数据。通常,只要期望估计给定点集合在(例如)低维空间(2至4维)中的主方向(即,点呈现最大方差的方向)就可使用本发明(如,用于对任何低维数据集合进行分割)。
例如,这样的“非图形”数据可包括用于医疗试验、生物分类性状测量等的多元统计数据集合、用于模拟的向量场、表示流体的流动方向或冲击的弹回方向等的数据(例如,该数据将类似于上面联系图形数据所讨论的法向映射(凹凸映射))、热图或声音数据等。
在这些布置方式中,可以按照类似于本文所述的纹理数据的方式对数据编码(解码)。
因此,根据本发明的一个方面,提供了一种针对待编码的数据元素集合,确定所述数据元素在数据空间中的方向的方法,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述数据元素集合进行编码时用于所述数据元素集合,该方法包括以下步骤:
针对数据空间中将待编码的纹理数据元素集合分割成两组的至少一个平面,确定数据空间中从数据空间中基于待编码的数据元素集合中的值落在数据空间中的所述平面一侧的数据元素的值的点到数据空间中基于待编码的数据元素集合中的值落在数据空间中的所述平面另一侧的数据元素的值的点的向量的方向;以及
利用针对数据空间中将纹理数据元素集合分割成两组的所述至少一个平面中的至少一个在数据元素的数据空间中确定的所述方向,来确定数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对所述数据元素集合进行编码时用于所述数据元素集合。
根据本发明的另一方面,提供了一种针对待编码的数据元素集合,确定所述数据元素在数据空间中的方向的设备,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述数据元素集合进行编码时用于所述数据元素集合,该设备包括:
处理电路,其被配置为:
针对数据空间中将待编码的纹理数据元素集合分割成两组的至少一个平面,确定数据空间中从数据空间中基于待编码的数据元素集合中的值落在数据空间中的所述平面一侧的数据元素的值的点到数据空间中基于待编码的数据元素集合中的值落在数据空间中的所述平面另一侧的数据元素的值的点的向量的方向;以及
利用针对数据空间中将纹理数据元素集合分割成两组的所述至少一个平面中的至少一个在数据元素的数据空间中确定的所述方向,来确定数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对数据元素集合进行编码时用于数据元素集合。
根据本发明的另一方面,提供了一种针对待编码的数据元素集合,确定所述数据元素在数据空间中的方向的方法,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述数据元素集合进行编码时用于所述数据元素集合,该方法包括以下步骤:
确定待编码的数据元素集合的平均数据值,然后按照该平均值使各个数据元素的值偏移;
针对数据空间中将待编码的所述纹理数据元素集合的偏移值分割成两组的至少一个平面,确定在数据空间中数据空间中的原点与待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的一个或更多个(优选为多个,并且优选为所有)纹理数据元素的偏移值之和在数据空间中的点之间的向量的方向;以及
利用针对将纹理数据元素集合的偏移值分割成两组的所述至少一个平面中的至少一个在纹理数据元素的数据空间中确定的所述方向,来确定数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。
根据本发明的另一方面,提供了一种针对待编码的数据元素集合,确定所述数据元素在数据空间中的方向的设备,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述数据元素集合进行编码时用于所述数据元素集合,该设备包括:
处理电路,其被配置为:
确定待编码的数据元素集合的平均数据值,然后按照该平均值使各个数据元素的值偏移;
针对数据空间中将待编码的所述纹理数据元素集合的偏移值分割成两组的至少一个平面,确定在数据空间中数据空间中的原点与待编码的纹理数据元素集合中的值落在数据空间中的所述平面一侧的一个或更多个(优选为多个,并且优选为所有)纹理数据元素的偏移值之和在数据空间中的点之间的向量的方向;以及
利用针对将纹理数据元素集合的偏移值分割成两组的所述至少一个平面中的至少一个在纹理数据元素的数据空间中确定的所述方向,来确定数据空间中将在确定基础数据值时使用的方向,所述基础数据值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。
本领域技术人员将理解,适当地,本发明的这些方面可包括(优选包括)本文所述的发明的优选和可选特征中的任一个或更多个或全部。
本发明的方法和设备可以按照任何适当的方式(如,以硬件或软件)实现在(包括在)任何适当的装置或部件中。在优选实施方式中,它们可实现在处理器中,因此,本发明还扩展至被配置为使用本发明的方法或包括本发明的设备的处理器。在优选实施方式中,本发明的方法和设备实现在硬件中,优选实现在单个半导体平台上。
本发明可实现于任何合适的系统中,例如适当配置的基于微处理器的系统。在优选实施方式中,本发明实现于基于计算机和/或微处理器的系统中。
例如,本发明可实现于图形处理器或图形处理装置上,因此扩展至包括本文所述的发明的任一个或更多个方面的设备或根据这种方法来操作的图形处理器和图形处理平台。在执行上述特定功能所需的任何硬件的前提下,这种图形处理器可另外包括图形处理器所包括的一般功能单元中的任一个或更多个或全部。
本发明的各种功能可以按照任何期望和合适的方式实现。例如,本发明的功能可根据需要以硬件或软件来实现。因此,例如,本发明的各种功能元件和“装置”可包括能够操作以执行各种功能等的合适的处理器、控制器、功能单元、电路、处理逻辑、微处理器等,例如适当专用的硬件元件或处理电路和/或可被编程以按照期望的方式操作的可编程硬件元件或处理电路。
在一个优选实施方式中,本发明的设备包括被配置为以所述方式操作的专用(非可编程)处理电路。在另一优选实施方式中,其包括被编程为以所述方式操作的可编程处理电路。
这里还应该注意的是,本领域技术人员将理解,本发明的各种功能等可被复制和/或在给定处理器上并行执行。
本领域技术人员还将理解,适当地,描述的本发明的所有方面和实施方式可包括本文所述的优选和可选特征中的任一个或更多个或全部。
根据本发明的方法可至少部分地利用软件(如,计算机程序)来实现。因此,可以看出从未来方面考虑,本发明提供在安装在数据处理装置上时具体适于执行本文所述的方法的计算机软件、包括在程序元件在数据处理装置上运行时执行本文所述的方法的计算机软件代码部分的计算机程序元件、以及包括适于在程序在数据处理系统上运行时执行本文所述的方法的所有步骤的代码装置的计算机程序。数据处理系统可以是微处理器、可编程FPGA(现场可编程门阵列)等。
本发明还扩展至包括这样的软件的计算机软件载体,其在用于操作图形处理器、渲染器或包括数据处理装置的其它系统时,与所述数据处理装置结合使所述处理器、渲染器或系统执行本发明的方法的步骤。这种计算机软件载体可以是物理存储介质,例如ROM芯片、CD ROM或盘等,或者可以是信号,例如电线上的电信号、光学信号或卫星的无线电信号等。
还将理解,并非本发明的方法的所有步骤均需要通过计算机软件来执行,因此从更广泛的方面讲,本发明提供计算机软件,这种软件安装在计算机软件载体上以用于执行本文所阐述的方法的至少一个步骤。
本发明因此可适当地实施为用于计算机系统的计算机程序产品。这种实现方式可包括一系列计算机可读指令,所述计算机可读指令固定于诸如计算机可读介质(例如,磁盘、CD ROM、ROM或硬盘)的有形的永久介质上,或者可通过有形介质(包括但不限于光学或模拟通信线路)或无形地利用无线技术(包括但不限于微波、红外或其它传输技术)经由调制解调器或其它接口装置传输至计算机系统。这一系列计算机可读指令实施本文先前所述的所有或部分功能。
本领域技术人员将理解,这些计算机可读指令可以用许多计算机架构或操作系统所使用的许多编程语言来编写。另外,这些指令可利用任何存储器技术(目前或未来的)来存储,包括但不限于半导体、磁或光学,或者利用任何通信技术(目前或未来的)来传输,包括但不限于光学、红外或微波。可以想到,这种计算机程序产品可作为可移除介质随所附的印刷或电子文档一起分发(例如,紧缩套装软件),用计算机系统预先加载到(例如)系统ROM或固定盘上,或经由网络(例如,互联网或万维网)从服务器或电子公告牌分发。
附图说明
现在将仅作为示例参照附图描述本发明的许多优选实施方式,附图中:
图1示意性地示出作为多个编码的数据块的图像数据阵列的编码;
图2示意性地示出在描述的本发明的优选实施方式中的分割数据块的编码;
图3至图11示出描述的本发明的优选实施方式的编码块布局;
图12示意性地示出可使用按照描述的本发明的优选实施方式的方式编码的纹理数据的图形处理系统;
图13至图18示出描述的本发明的优选实施方式的主方向估计处理。
附图中,类似的特征使用类似的标号(只要适当)。
具体实施方式
现在将参照用于颜色映射(即,颜色数据)形式的图形处理的纹理数据的编码描述本发明的优选实施方式。然而,如上所述,本领域技术人员将理解,本发明可普遍适用于数据编码,因此不应被认为限于这里所给出的纹理颜色数据编码的示例。
图1示出此实施方式的基本编码处理。如图1所示,原始图像或纹理数据元素(纹元)阵列1(纹理“映射”)被再分割成多个4×4纹理元素块2。(也可使用其它块尺寸,如下面将进一步讨论的。)
在本实施方式中,如图1所示,原始图像(纹理映射)1被分割成相等尺寸的块。这简化了寻找给定纹理数据元素所在的块的任务,并提供恒定的数据率。
在此实施方式中,原始纹理映射数据阵列(图像)中的各个纹理元素(纹元)表示相应纹理元素的位置处将使用的颜色,因此其分配有包括颜色值集合(如,红色、绿色、蓝色(RGB),以及可选地,α(透明度)值)的数据值。换言之,在此实施方式中,将要编码、产生等的数据值各自对应于并表示颜色(颜色值集合)。因此,为了方便,下面的描述将主要引用“颜色”,但是应该理解,这样的引用指示包括表示所关注的颜色的颜色值集合的数据值。
在本实施方式中,并非将颜色数据阵列1以完整的原始形式存储,而是将各个4×4纹理元素块2编码为纹理数据块5,纹理数据块5与原始未编码形式的纹理数据相比尺寸减小。这实际上对原始纹理数据进行了压缩,从而使其存储和处理更容易且更高效。在本实施方式中,各个编码的纹理数据块5使用128比特。(其它布置方式当然也是可能的。)
如下面将进一步讨论的,各个编码的尺寸减小的纹理数据块5包含足够且适当的数据以使得能够再现对应于或表示所关注的4×4纹理元素块的原始未编码的数据的数据。
对于原始图像(纹理映射)1的各个块2,产生对应的编码的纹理数据块5。在本实施方式中按照光栅顺序对构成纹理映射的各个纹理数据块进行编码。当然,其它布置方式也是可能的,例如使用莫顿顺序。
因此,在本实施方式中,各个编码的纹理数据文件包括对纹理数据元素阵列(图像数据)编码的各个纹理数据块的序列。
文件中的纹理数据块的数量将取决于被编码的纹理映射(纹理数据阵列)的大小以及(例如)数据是否以Mip映射形式存储。如果使用Mip映射,则如果利用“n”个纹理数据块对第一层次的纹理映射分辨率进行编码,则将有“n/4”个纹理数据块用于下面的Mip映射层次,“n/16”个块用于下一Mip映射层次,“n/64”用于下一Mip映射层次,“n/256”用于再下一Mip映射层次,等等(但各个层次不小于一个块),直到达到尺寸为1×1的Mip映射层次为止。
(在本实施方式中,编码的纹理数据可以是Mip映射(即,存储有原始纹理数据阵列的多个版本以便于使用,各个版本具有不同的细节层次(分辨率))的形式并优选以该形式存储。Mip映射优选逐个地存储在存储器中,如本领域所知的,各个Mip映射层次是原始阵列(图像)的按比例缩小(按照因子2)的表示(图像)。Mip映射按照分辨率的降序存储,即,n×n、...、16×16、8×8、4×4、2×2、1×1。较小的Mip映射(<8×8)各自分别存储在单独的编码数据块中。)
如下面将进一步讨论的,本实施方式支持将待编码的给定纹元块中的纹理数据元素(纹元)分割成块内的不同的子集或分区的布置方式。这示出于图2中,图2示出4×4纹元块2,该纹元块2已分割成三个分区10、11和12。因此,图2中标记有“a”的纹元属于第一分区10,标记有“b”的纹元属于第二分区11,标记有“c”的纹元属于第三分区12。然后,以压缩形式将该块编码为编码的纹理数据块13,但如将在下面更详细说明的,该纹理数据块具有与原始4×4纹元块的分割有关的附加信息。
从上述内容将理解,在本实施方式中待编码的各个纹元块或者纹元块内的各个分区将对应于纹元的集合,各个纹元具有相应的颜色值。如下面将进一步讨论的,本发明的纹元块编码处理进行操作(除了别的以外)以确定一对端点颜色,所述端点颜色将用于对纹元块(或纹元块内的分区)所表示的纹元集合进行编码(以及解码)。因此,本实施方式的编码处理中的重要操作是确定将在对所关注的纹元集合进行编码(和解码)时使用的一对端点颜色。
本实施方式的纹理编码方案在确定将用于对纹理数据集合编码(和解码)的一对端点颜色时使用待编码的纹理数据元素集合在颜色空间中的选定方向。
本质上,本实施方式进行操作以估计颜色空间中所关注的纹理数据元素集合的数据值呈现最大方差的方向(即,进行操作以估计纹理数据元素的值在颜色空间中的主方向)。然后,使用所估计的主方向来推导将用于对所关注的纹理数据元素集合进行编码的端点颜色值。
这示出于图13和图14中。图13示意性地示出在二维颜色空间中的二十个纹理数据元素的集合30的值。图14示出图13的纹理数据值的集合30以及在颜色空间中通过那些颜色值示例性估计的主方向(最佳拟合)向量V 31。本实施方式使用特定处理来针对颜色空间中的给定纹理数据元素值的集合估计主方向向量V。
图15至图18示意性地示出在本发明的优选实施方式中(并根据本发明)估计待编码的纹理数据元素集合在颜色空间中的主方向的方法(因此,在本发明的优选实施方式中(并根据本发明)确定将用于待编码的纹理数据元素集合的颜色空间中的方向的方法)。
图15至图17示出本实施方式的主方向估计处理,图18是示出在本实施方式中如何执行该处理的流程图。
图13至图17为了清晰起见示出二维颜色空间(如,RG),但是如本领域所知的,颜色空间通常将是3维或4维(RGB或RGBA)。无论所考虑的颜色空间的维数如何,均可使用本实施方式的技术。
这里还应该注意的是,如图13至图17所示,在颜色空间中对纹元值进行评估。因为在颜色空间中进行评估,所以待编码的纹元集合中的纹元的“空间”位置不影响主方向估计处理。
本实施方式的主方向估计处理的输入是期望在颜色空间中估计主方向的纹理数据元素(纹元)集合。因此对于RGB纹理,处理的输入将是各自用(R,G,B)颜色元组表示的纹元的集合。将相应地输入其它形式的纹理数据。
如上所述,输入的纹理数据元素集合可包括(例如)待编码的纹元块(如,4×4纹元块)的所有纹理数据元素。另选地,如果针对待编码的给定纹元块所分割成的各个不同的分区需要单独的一对端点颜色,则输入至主方向寻找处理的纹理数据元素集合应该是所关注的分区的纹理数据元素的集合,而非该块的所有纹理数据元素的集合。
本实施方式的估计主方向的处理的第一步骤是针对所考虑的纹理数据元素集合确定平均颜色值C。这可以是真正的平均值,或者该平均值的近似值。
然后,对于该集合中的各个纹理数据元素,用纹元的颜色值T减去平均颜色C,以得到纹元的偏移颜色值T',T'=T-C。
图15针对图13和图14中所示的纹理数据元素的集合30示意性地示出这一处理,其示出在将各个纹元值按照纹元集合的平均值偏移之后,将图13和图14所示的纹理数据元素值的集合重新映射到轴X'、Y'上。因此,图15中的原点对应于纹元集合的平均纹元值C。
然后,在颜色空间中使用一个或更多个无限平面将纹理数据元素分割成两组(即,将颜色空间分割成两部分),并且针对各个这样的平面,(按照下述方式)确定方向向量V',所述方向向量V'将是所关注的纹理数据元素值集合的主方向的估计。
在本实施方式中,使用穿过偏移颜色空间X'、Y'的原点的轴对齐无限平面(即,垂直于颜色空间的一个轴的无限平面)来将偏移颜色空间分割成两部分。(各个这样的平面可由其法向向量唯一地定义。)考虑与纹理数据元素的颜色空间中的维数一样多的平面。
因此,对于图15所示的二维颜色空间,定义并考虑穿过偏移颜色空间的原点的两个不同的轴对齐无限平面。
申请人已认识到,如果通过分割数据空间的给定平面生成的方向估计V'限定了几乎垂直于该平面的方向,则该平面所估计的方向V'将是所关注的纹理数据元素值集合的真正主方向的非常好的估计。另一方面,如果估计的方向V'限定了非常接近平行于该平面的方向,则其可能是所关注的纹理数据元素值集合的真正主方向的任意差的估计。
因此,使用N维的至少N个平面以及不相关(例如,轴对齐)的平面,有助于确保至少一个“好”的方向估计(因为如果使用N-1或更少的平面,则颜色空间中将存在同时与每一平面平行的至少一个轴;该轴将导致差的估计)。
因此,例如对于3D空间,优选测试全部彼此垂直的三个平面(例如,三个轴对齐平面),因为这将确保对于这三个平面中的至少一个,真正主方向与平面之间的角度将超过54度。
这示出于图16和图17中。图16示出通过垂直于X轴并与Y轴对齐的平面40(即,平面X'=0)分割的偏移颜色空间(因此,偏移纹元值),图17示出通过垂直于Y轴并与X轴对齐的平面41(即,平面Y'=0)分割的偏移颜色空间。
如果需要,也可使用将颜色空间中的纹元值分割成两组的其它平面布置方式。
对于各个这样的平面,将平面一侧的所有纹理数据元素值相加(得到和V1),同样将平面另一侧的所有纹理数据元素值相加(得到和V2)。然后,确定在颜色空间中的这两个和点之间的向量V':V'=V1-V2(或V2-V1)。这针对所考虑的分割颜色空间的各个平面得到候选方向向量V'。
这示出于图16和图17中。
图16示出对于与Y轴对齐的平面40,所得的正和点45和负和点46(尽管和值被除以10以使其拟合到相同的轴上)以及所得的方向向量47。
图17示出对于与X轴对齐的平面41,所得的正和点48和负和点49(尽管和值同样被除以10以使其拟合到相同的轴上)以及所得的方向向量50。
尽管如图16和图17所示,方向向量V'47、50被确定为颜色空间中的正和点与负和点之间的方向,但是因为纹理数据元素值已基于其平均值偏移,所以正和值的大小必须等于负和值的大小(即,和V1+V2=0)。因此,给定平面的向量方向V'(即,差V1-V2)将等于正(或负)(向量)和值的两倍(即,2*V1或2*V2)。这意味着可将所关注的平面的方向向量V'确定为从原点到正和值的点(或者从原点到负和值的点)(或者反之亦然)。因此,本实施方式仅计算正(或负)(向量)和值以推导所考虑的各个平面的方向向量V'。
可从图16和图17看出,这一处理将针对所考虑的二维颜色空间得到两个可能的候选方向向量。然后,将这些候选方向向量中的一个选为所考虑的纹理数据元素集合在颜色空间中的估计的主方向。
在本实施方式中,基于所确定的候选方向向量的相应的长度来选择哪一候选方向向量将用作所考虑的纹理数据元素集合在颜色空间中的估计的主方向。申请人已认识到,基于正与负和位置(或者等同地,正和或负和位置与原点)的最长方向向量将是所考虑的纹理数据元素值集合的主方向的最精确的估计。这可从图16和图17看出,其中可以看出,图17中使用与X轴对齐的平面确定的更长的方向向量50更接近地匹配图14中所示的所考虑的纹理数据元素值集合的主方向向量V的“理想”估计31。
(总体上,申请人已认识到,对于生成真正主方向的差估计的平面,应该在相同方向上起促进作用的纹元值相反将彼此抵消(这可从图16和图17看出)。因此,如果利用分割颜色空间的多个不同的平面计算出多个估计,则作为主方向的差估计的方向向量将表现为比主方向的好估计的和向量短的和向量。)
例如,可根据需要利用点积以通常的欧几里得方法,或者通过计算各个向量的曼哈顿长度,来确定所确定的估计向量中的最长的一个(以避免乘法)。
因此,本实施方式的方法通过以下处理估计纹理数据元素值集合的主方向:对于N维空间,挑选N个轴对齐的平面,各个平面垂直于空间的一个轴,对于各个平面P1、P2、P3..,计算估计的方向向量V1'、V2'、V3'。然后,取估计的方向向量中的最长的一个作为用于表示所关注的纹理数据元素集合在颜色空间中的主方向的方向。
因此,例如,对于3维RGB(红色-绿色-蓝色)颜色空间,将执行下面的计算:
-对于由红色=0限定的平面P1;推导方向估计V1'是具有正红色分量的所有偏移纹元值T'之和。
-对于由绿色=0限定的平面P2;推导方向估计V2'是具有正绿色分量的所有偏移纹元值T'之和。
-对于由蓝色=0限定的平面P3;推导方向估计V3'是具有正蓝色分量的所有偏移纹元值T'之和。
对于所有这三个方向估计,为了计算所述估计所需的仅有计算是比较和相加。
对于4维空间(如使用RGBA颜色而非RGB颜色时所遇到的;例如,这发生于BC7和ASTC纹理压缩格式),则应该如下推导第四估计向量V4':
-对于由α=0限定的平面P4;推导方向估计V4'是具有正α分量的所有偏移纹元值T'之和。
然后,应该将估计的向量中(即,V1'、V2'或V3'中,或者V1'、V2'、V3'或V4'中)最长的一个选择作为用于表示所关注的纹理数据元素集合的主方向的方向向量。
图18是示出本实施方式的主方向估计处理的流程图。这一处理的输入是期望确定主方向的估计的纹理数据元素集合。如上所述,这一纹理数据元素集合可包括待编码的纹理数据元素块的所有纹理数据元素,或者待编码的纹理数据元素块的分区或子集的纹理数据元素。
如图18所示,该处理以这一步骤开始:计算待估计主方向的纹元集合中的纹元的所有纹元颜色Ti的平均颜色C(步骤60)。
下一步骤是用所有纹元颜色Ti减去平均颜色值C,以生成各个纹元的偏移纹元值T'i(步骤61)。
然后,针对纹理数据元素集合,通过将平面索引j和找到的最佳主方向估计V'(步骤62)以及纹元索引i和当前方向估计V(步骤63)设定为0来开始方向寻找处理。
然后,存在针对所考虑的将颜色空间中的纹元分割成两组(将纹元的颜色空间分割成两部分)的第一平面计算(向量)和值的循环。因此,在步骤64,估算所考虑的纹元相对于所考虑的平面Pj的位置T'i,并且如果纹元的偏移值T'i为正(即,其在平面Pj的正侧)(步骤65),则将纹元的偏移值T'i与当前方向估计V相加(步骤66)。如果在步骤65,发现纹元T'i在平面Pj的负侧,则跳过加法步骤66。
然后,在步骤67使纹元索引递增,以移到所考虑的集合中的下一纹元。如果还未到达最后的纹元(步骤68),则处理循环回到位置估算步骤64,并对集合中的下一纹元执行相同的处理,以此类推,直到到达所考虑的纹元集合中的最后的纹元为止(步骤68)。
一旦已考虑集合中的最后的纹元,计算当前所考虑的平面的所确定的估计向量V的长度以及现有最佳方向向量估计V'的长度(步骤69)并进行比较(步骤70)。
如果当前主方向估计向量V的长度比先前最长的方向向量估计V'的长度长,则将当前主方向估计向量V设定为目前为止找到的最佳主方向向量V'(步骤71)。如果并非如此,则将先前最长的主方向向量估计V'保留为最佳主方向估计V'。
然后,处理进行至待考虑的下一平面并针对该平面重复(步骤72和73),以此类推,直到已考虑最后的平面为止,此时将找到的最长主方向向量估计V'选为将用于所考虑的纹理数据元素集合的主方向的估计(步骤74)。
一旦将用于纹理数据元素集合的主方向(即,将在确定待编码的纹理数据元素集合的端点颜色时使用的颜色空间中的方向)的估计已确定,则利用所确定的方向来确定将用于所关注的纹理数据元素集合的端点颜色值。这在本实施方式中通过使用所关注的纹理数据元素集合的平均颜色C以及所确定(选择)的估计主方向向量V'以形成将投影所述集合的纹理数据元素的颜色空间中的线来进行,如下:
1.定义颜色空间中的参数线,L=C+t*V'
2.将所有纹理数据元素投影到该线上;这基本上等同于针对线L上最靠近纹元的点寻找参数值t;给定偏移纹元值T'=T-C,参数t可被计算为t=dot(V',T')/dot(V',V'),其中dot()表示通常的向量点积。
然后,使用通过将纹理数据元素的值投影到所确定的颜色空间中的线上而获得的最低和最高参数值t_low和t_high来推导将用于所关注的纹理数据元素集合的两个端点颜色E1、E2,如下:
E1=C+t_low*V
E2=C+t_high*V。
当然,如果需要,可使用利用所估计的主方向确定将用于纹理数据元素集合的端点颜色(或其它基础数据值)的其它布置方式。
这些主方向和端点值估计和确定处理可根据需要(例如)利用适当配置的专用硬件元件(处理电路),或者通过对可编程通用处理器(处理电路)编程使其按照所描述的方式操作,来实现。
本领域技术人员将理解,除了确定将使用哪些端点颜色之外,纹理数据元素的集合和块将需要以合适的方式编码,以使得解码器能够对编码的纹元块进行解码,以再现(至少近似于)原始纹元值。
因此,现在将描述本实施方式中所使用的对纹理数据元素(纹元)块进行编码(和解码)的格式。
概述
本实施方式使用纹理压缩格式,该格式被设计为提供适用于各种各样不同类型的内容以及各种各样的质量/比特率权衡的有损纹理压缩。该格式具有以下主要特征:
·128比特的块大小
·编码的块自包含(任何给定纹元完全由单个块的内容来限定)
·设计为用于以下类型的纹理数据的压缩:
-每纹元具有1、2、3或4个分量(分别为亮度、亮度-α、RGB和RGB-α)的LDR(低动态范围)纹理数据
-每纹元具有1、3或4个分量的HDR(高动态范围)纹理数据
·索引比特与颜色端点比特之间细粒级每块可调节的比特分配。
·2D和3D变型。
·各个块表示纹元的矩形或立方形覆盖面积(footprint)。覆盖面积尺寸确定此纹理格式的比特率,并且对于纹理整体而言是全局的。
2D变型所支持的覆盖面积尺寸为:
-4×4(8bpp)
-5×4(6.40bpp)
-5×5(5.12bpp)
-6×5(4.27bpp)
-6×6(3.56bpp)
-8×5(3.20bpp)
-8×6(2.67bpp)
-10×5(2.56bpp)
-10×6(2.13bpp)
-8×8(2bpp)
-10×8(1.60bpp)
-10×10(1.28bpp)
-12×10(1.07bpp)
-12×12(0.88bpp)
3D变型所支持的覆盖面积尺寸为:
-3×3×3(4.74bpp)
-4×3×3(3.56bpp)
-4×4×3(2.67bpp)
-4×4×4(2bpp)
-5×4×4(1.60bpp)
-5×5×4(1.28bpp)
-5×5×5(1.02bpp)
-6×5×5(0.85bpp)
-6×6×5(0.71bpp)
-6×6×6(0.59bpp)
所支持的纹理数据的类型(分量计数,LDR对HDR)不取决于覆盖面积尺寸;所有类型在所有尺寸下均可用。
·利用分割图案生成函数的块分割;各个分区具有单独的一对端点颜色。该格式使得单个块内的不同分区能够具有不同的端点类型。该格式支持每块1至4个分区。
·索引抽取:该格式使得能够仅针对一些纹元指定索引,而剩余纹元使用填充程序;这在较低比特率下尤其有用。
·空范围(Void Extent):该格式提供编码以指示纹理内的大的空区域。
·能够针对不同的Mip映射层次使用不同的数据率。
块的布局
如果块禁用分割,则编码的块具有下面的格式:
比特 用途
10:0 索引比特模式
12:11 “00”
16:13 颜色端点模式
127:17 剩余空间
如果允许分割,则编码的块具有下面的格式:
比特 用途
10:0 索引比特模式
12:11 分区计数减1
22:13 分区索引
28:23 颜色端点模式,初始六比特
127:29 剩余空间
“剩余空间”用于保存索引数据(从上到下)、颜色端点数据(从下到上)和颜色端点模式比特(如果需要不止6比特的话)。索引数据、颜色端点数据和颜色端点模式比特的大小不固定,而是基于索引比特模式和颜色端点模式的初始六比特来计算。
作为一种特殊情况,如果编码的块的比特[8:0]为“111111100”,则该块不对普通压缩内容编码;相反,其对空范围块编码。
分割
编码的块被再分割成1、2、3或4个分区,各个分区使用单独的颜色端点对。分区的数量由“分区计数减1”比特指定。
如果使用2个或更多个分区,则使用分区索引来选择1024个分割图案中的一个;所支持的图案集合取决于分区计数和块大小。
分割图案利用生成函数来生成;这使得能够使用最少数量的门电路来实现用于不同块大小的非常大的分割图案集合。此实施方式中生成器如何工作的细节在下面给出。
索引模式
“索引比特模式”字段控制存在的索引数量及其使用范围。可能的组合集合取决于块维数(2D或3D)。
块中的实际索引如下存储:
·首先,使用下面所述的整数序列编码方法对其进行编码。
·然后,对所得的比特序列进行比特反转,并从块的顶部开始向下存储。
索引的用途
索引用于在各个纹元的两个端点颜色之间插值。首先,将其从其所在的区间(范围)缩放至范围0..1;然后,将所得的值用作权重,以计算两个端点的加权和。可使用缩放至0..1范围的任何合适的逆量化程序。
索引填充
块编码的各个纹元具有将用于该纹元的对应索引。在一些索引模式中,为块中的每一个纹元提供一个索引;在其它索引模式中,索引的数量少于纹元的数量。在后一种情况下,实际上将用于纹元的索引通过从块中提供(编码)的索引双线性插值(或者对于3D块,单纯型或三线性插值)来推导。因此,当索引计数小于块中的纹元的数量时,将用于块的纹元的实际索引通过从编码的块中提供的索引值双线性插值(或者单纯型或三线性插值)来推导,即,纹元的索引将被计算为编码的块中提供(包括)的2、3或4(或者更多)个索引的适当加权的和。
因此,在本实施方式中,在编码的纹理数据块包括的索引少于块所表示的纹元的数量的情况下,编码的纹理数据块将包括索引值集合,该索引值集合表示在比块所表示的纹理数据元素阵列的分辨率小的给定分辨率下的索引值阵列,然后,通过从编码的纹理数据块中编码(包括)的索引值阵列双线性插值(或者单纯型或三线性插值)来推导将用于块所表示的纹理数据元素阵列的索引值。例如,对8×8纹元阵列编码的编码块可仅编码(包括)5×5索引值阵列。
如果需要,可另外使用或代替使用其它布置方式,例如使用查找表和/或使用预定义的索引填充图案(其可(例如)利用预定义的填充图案生成函数来推导或者明确地存储在(例如)查找表中)来推导任何“缺失”的纹元索引。
索引平面
根据选择的索引比特模式,该格式可提供1或2个索引平面。在2个索引平面的情况下,针对接收索引的各个纹元提供两个索引,而非仅一个索引。在这两个索引当中,第一个用于三个颜色分量的加权和;第二个用于第四颜色分量的加权和。如果仅存在1个索引平面,则其应用于所有四个颜色分量。
如果使用两个索引平面,则使用2比特的位域来指示第二索引平面应用于哪一个颜色分量。这两个比特就存储在索引比特下面,除了存在剩余颜色端点类型比特的情况之外;在该情况下,这两个比特就存储在剩余颜色端点类型比特下面。
该两比特位域具有下面的布局:
含义
0 红色
1 绿色
2 蓝色
3 α
如果存在索引填充,同时使用两个索引平面,则对各个索引平面分别执行索引填充。
索引模式
索引模式字段指定索引网格的宽度、高度和深度、它们使用的值的范围以及是否存在双索引平面。由于其中的一些并不用2的幂来表示(例如,存在12个可能的索引宽度),并且并非所有的组合均被允许,所以这不是简单的比特打包。然而,其可在硬件中快速解包。
索引范围利用3比特值R来编码,该值与精度比特H一起解释如下:
低精度范围(H=0)
高精度范围(H=1)
R 索引范围 三进制位 五进制位 比特
000 无效
001 无效
010 0..9 1 1
011 0..11 1 2
100 0..15 4
101 0..19 1 2
110 0..23 1 3
111 0..31 3
对于2D块,索引模式字段如下布局:
需要指出的是,由于R字段的编码,如先前页中所描述的,比特R2和R1不能均为零,这消除了表的前五行与剩余行的歧义。
对于3D块,索引模式字段如下布局:
D比特被设定为指示双平面模式。在该模式下,最大允许分区数为3。
各个维度中的网格大小必须小于或等于块覆盖面积的对应维度。如果在任何轴上网格大小大于覆盖面积维度,则这是非法块编码,所有纹元将解码为错误的颜色。
索引范围指定如何使用索引值来计算权重。在所有情况下,值0将产生具有端点1的值的内插值,最大值(根据选定的范围)产生等于端点2的值的内插值。
对于LDR端点值,插值为线性的。因此如果M是该范围内的最大允许值,则实际内插值等于(1-索引/M)*(端点值1)+(索引/M)*(端点值2)。除以M是为了将在范围0..M内的输入值缩放为范围0..1内的加权值。所述范围因此选择这两个值之间存在多少中间步长。范围越大,越可能接近地表示值,但需要越多的比特来对其编码。
在本实施方式中,索引值首先被重新缩放,以使得M是2的幂(最优选地,64),从而可用花费相对低的与64/M的乘法来代替花费高的与M的除法,然后除以64。
对于HDR端点值,插值是对数函数或其近似值。端点值被编码为原始端点值以2为底的对数。因此如果M是该范围内的最大允许值,则内插值是最终解码值的对数,等于(1-索引/M)*(端点值1)+(索引/M)*(端点值2)。因此,最终解码值是2的内插值次幂。
在本实施方式中,HDR端点值被存储为具有12比特浮点表示的值,以分段近似对数方式如下进行插值。
各个端点的HDR颜色分量C0和C1初始向左移位4比特以成为16比特整数值,首先利用重新缩放的索引值i以与LDR相同的方式对这些值插值。然后,将所得的16比特值C分解为上面的五比特e以及下面的11比特m,然后将其处理并与e重组,以形成最终值Cf:
C=floor((C0*(64-i)+C1*i+32)/64)
E=(C&0xF800)>>11;m=C&0x7FF;
if(m<512){mt=3*m;}
else if(m>=1536){mt=5*m–2048;}
else{mt=4*m–512;}
Cf=(e<<10)+(mt>>3)
该插值能够简单地实现于硬件中,并且比对浮点值的比特图案的整数插值进行插值更近似于对数插值。
最终值Cf被解释为IEEE FP16值。如果结果为+Inf或NaN,则将其转换为比特图案0x7BFF(可表示的最大有限值)。
在较大的块尺寸中使用索引计数,以指示编码的块中实际存在多少索引。这可能小于块的尺寸,在这种情况下必须推导“缺失”的索引(如上所述)。(例如,对8×8纹元阵列编码的块可仅指定4×4索引网格,在这种情况下剩余索引将利用“索引填充”来产生,如上所述。)
颜色端点模式
本实施方式的格式支持16个颜色端点模式(稍后更详细地描述)。这些端点模式再分成4类:
·类0:一个颜色端点对由2个整数指定
·类1:一个颜色端点对由4个整数指定
·类2:一个颜色端点对用6个整数指定
·类3:一个颜色端点对用8个整数指定
这些类中的每一个包含4个颜色端点模式。
在1分区模式中,4比特颜色端点模式字段具有下面的编码:
比特 用途
1:0 端点模式类
3:2 类内的端点模式
在不止一个分区的模式中,颜色端点模式编码更复杂:
首先,我们具有2比特端点模式类对选择器;该选择器如下编码:
含义
00 所有端点对为相同的类型,该类型随其后
01 所有端点对为类0或类1
10 所有端点对为类1或类2
11 所有端点对为类2或类3
如果所有端点均为相同的类型,则该字段跟随有4比特字段,该4比特字段包含用于所有分区的颜色端点模式。否则,该字段跟随有:
·首先,每分区一个比特,指示其端点对属于哪一类。
·然后,每分区两个比特,指示其属于类内的哪一模式。
因此,对于多分区模式,端点模式表示可采用6至14比特。这些比特当中,前面的6比特就存储在分区索引之后,剩余比特就存储在索引比特下面(可变位置)。
此数据布局确保了指示端点对类的比特总是出现在固定位置;这有助于硬件中的解码性能。
颜色端点表示
颜色端点本身(其值以上述方式确定)还利用整数序列编码来表示。使用的实际范围并不直接编码在块中;相反,进行下面的处理:
·从分区计数和颜色模式编码,计算颜色编码实际需要的整数的数量。这可在2至32范围内(按照2增加)。(最低计数2出现于使用单个分区两亮度端点类型时;最高计数32出现于使用4个分区两RGBA端点类型时)。
·从分区计数、颜色模式编码和索引比特模式,计算表示这些数据字段所需的比特数;然后,用块大小减去该比特计数,以便获得实际可用于颜色编码的比特数。
·然后,确定(并使用)整数序列编码将适合于所述可用比特数的最大范围。
例如,如果颜色端点可用的空间为35比特,并且颜色编码实际需要的整数的数量为十个,则使用的范围将是0..9:这样范围的十个整数的整数序列编码采用34比特(这是适合的)。下一递升将使用范围0..11;对于该范围,整数序列编码将采用36比特来编码十个整数(这将不适合)。
整数序列编码
整数序列编码是用于对压缩(编码)的纹理数据块中的大多数数据进行编码的数据编码。
为了高效地使用空间,编码格式针对颜色端点和索引字段能够使用非整数数量的比特。这通过使用三进制位(可取值0、1、2的项(而比特仅可取值0和1))和五进制位(可取值0、1、2、3、4)来实现。由于三进制位和五进制位无法在二进制计算机中直接表示,所以编码格式以比特表示来存储三进制位和五进制位,该比特表示使得能够用比特来表示n个三进制位,用比特来表示n个五进制位。
整数序列编码用于存储有界范围内的整数序列。使用的范围确定使用多少比特、三进制位和五进制位来存储各个整数。所支持的范围与其比特/三进制位/五进制位分配的集合为:
仅使用比特的编码
如果选择的范围仅使用比特,则整数被顺序地存储,最低比特在序列编码中最先出现。例如,如果想要对范围在0..7内并且比特表示为(a=a2a1a0、b=b2b1b0、c=c2c1c0、d=d2d1d0)的四个数(a、b、c、d)的序列进行编码,则所得序列为12比特图案d2d1d0c2c1c0b2b1b0a2a1a0
使用三进制位的编码
如果选择的范围使用三进制位,则在编码之前将各个整数分成两部分:如果选择的范围具有b比特,则给定整数x的低部由L=X mod 2b给出,高部由给出。L部分由零个或更多个比特表示;H部分由一个三进制位表示。然后,将整数按照5个一组存储,如下:
·首先,从每一个整数收集三进制位H;这得到5个三进制位。这些三进制位被编码为三进制位块;三进制位块的完整大小为8比特。
·然后,按照下面的顺序将比特存储在序列中:
-首先,存储第一整数的低比特。
-然后,存储三进制位块的比特[1:0]。
-然后,存储第二整数的低比特。
-然后,存储三进制位块的比特[3:2]。
-然后,存储第三整数的低比特。
-然后,存储三进制位块的比特[4]。
-然后,存储第四整数的低比特。
-然后,存储三进制位块的比特[6:5]。
-然后,存储第五整数的低比特。
-然后,存储三进制位块的比特[7]。
针对每5个整数一组重复这一操作,直到序列中的所有整数均用完为止。在编码时,如果整数的数量不是5的倍数,则用0填充整数序列,直到其大小变为5的倍数为止。在解码时,如果从序列提取的整数的数量不是5的倍数,则序列的比特表示附着(理论上无限的)零比特串。这样,该格式仅存储实际需要的整数的比特,而非存储5的倍数个整数的比特。
三进制位块的解码
使三进制位块用b[7:0]表示。现在,如下进行:
·首先,我们检查b[4:2]是否等于3′b111。如果是,则:
-设c={b[7:5],b[1:0]}
-设t4=2并且t3=2
·否则
-设c=b[4:0]
-如果b[6:5]=2′b11,则
□设t4=2并且t3={1b0,b[7]}
-否则
□设t4={1′b0,b[7]}并且t3=b[6:5]
·如果c[1:0]=2′b11,则
-t2=2,t1={1′b0,c[4]},t0={c[3],c[2]&~c[3]}
·否则如果c[3:2]=2′b11,则
-t2=2,t1=2,t0=c[1:0]
·否则
-t2={1′b0,c[4]},t1=c[3:2],t0={c[1],c[0]&~c[1]}
此编码基于两个标准来选择:
◇其具有这样的性质:如果仅n个最低三进制位非零,则仅三进制位块的个最低比特会实际上非零。
◇解码处理具有尤其高效的硬件实现方式。
对最低比特t0的与-非(AND-NOT)运算确保了三进制位块针对所有256个可能的输入值解包为5个有效三进制位的元组,即使仅存在35=243个这样的元组。
使用三进制位的示例整数序列
作为一个示例,将假设将利用本实施方式的整数序列编码方案对范围0..11内的8个整数编码,这八个整数为{2,9,3,5,11,8,0,4}。首先,需要将这些整数切分成比特和三进制位;假定0..11范围具有一个三进制位和两个比特,切分结果为:
·三进制位(数的高部):{0,2,0,1,2,2,0,1}
·比特(数的低部):{01,01,11,01,11,00,00,00}
假定有8个三进制位和16个比特,编码的整数序列将具有比特。
现在需要将三进制位编码为两个三进制位块。将较低的5个三进制位编码为一个三进制位块;将较高的3个三进制位编码为第二个三进制位块。
使用五进制位的编码
如果选择的范围使用五进制位,则在编码之前将各个整数分成两部分:如果选择的范围具有b比特,则给定整数X的低部由L=X mod 2b给出,高部由给出。L部分由零个或更多个比特表示;H部分由一个五进制位表示。然后,将整数按照3个一组存储,如下:
·首先,从每一个整数收集五进制位H;这得到3个五进制位。将这些五进制位编码为五进制位块;五进制位块的完整大小为7比特。
·然后,按照下面的顺序将比特存储在序列中:
-首先,存储第一整数的低比特。
-然后,存储五进制位块的比特[2:0]。
-然后,存储第二整数的低比特。
-然后,存储五进制位块的比特[4:3]。
-然后,存储第三整数的低比特。
-然后,存储五进制位块的比特[6:5]。
针对每3个整数一组重复这一操作,直到序列中的所有整数均用完为止。在编码时,如果整数的数量不是3的倍数,则用0填充整数序列,直到其大小变为3的倍数为止。在解码时,如果从序列提取的整数的数量不是3的倍数,则序列的比特表示附着(理论上无限的)零比特串。这样,该格式仅存储实际需要的整数的比特,而非存储3的倍数个整数的比特。
五进制位块的解码
使五进制位块用b[6:0]表示。现在,如下进行:
·如果b[2:1]=2′b11并且b[6:5]=2′b00,则:
-设t2={b[0],b[4]&~b[0],b[3]&~b[0]},t1=4,t0=4
·否则
-如果b[2:1]=2′b11,则
□设t2=4并且c={b[4:3],~b[6:5],b[0]}
-否则
□设t2={1′b0,b[6:5]}并且c=b[4:0]
-如果c[2:0]=3′b101,则
□设t1=4并且t0={1b0,c[4:3]}
-否则
□设t1={1′b0,c[4:3]}并且t0=c[2:0]
此编码基于两个标准来选择:
◇其具有这样的性质:如果仅n个最低五进制位非零,则仅五进制位块的个最低比特会实际上非零。
◇解码处理具有尤其高效的硬件实现方式。
第一规则中的与-非运算确保了所有128个可能的值解码为有效的五进制位三元组(quint-triplet),即使仅存在53=125个不同的五进制位三元组值;这些值中的四个(形式为7’b00xx111)表示五进制位三元组<4,4,4>。
上述针对一系列值有效地使用三进制位或五进制位的解码方式首先针对各个值发放比特,然后从打包的三进制位或五进制位块分别发放足够的比特以构成8n/5(向上舍入)比特或7n/3(向上舍入)比特。这确保了比特流可在任何值之后终止,而不会损失数据。
上述三进制位/五进制位解包功能的硬件成本相对低。
当然,其它布置方式也将是可能的。例如,有非常多的像这样的可能的解包功能;其中一些可通过(例如)仅将输入或输出比特相对于以上描述反转或交换来获得;其它一些可通过更复杂的子情况方法或者通过算术(反复的除法/模运算给出一个尤其易于理解的解包;然而,这一方法HW花费高)或者通过查找表(其允许随意解包功能,但成本较高)来获得。
颜色端点逆量化
颜色端点在从其整数序列编码提取出之后,需要进行逆量化以使其最终在0..255范围内,而非整数序列编码中所使用的范围。
对于仅比特的范围,利用简单的比特复制来进行逆量化。
在由三进制位/五进制位以及一个或更多个比特构成的数的情况下,执行更复杂的程序:
·首先,去除最低比特b0
·基于所使用的范围,选择常数C;将三进制位或五进制位乘以该常数,得到9比特的值T。
·基于所使用的范围,对剩余比特执行搅合(swizzle);该9比特值被称为B。
·然后执行加法T+B,然后用比特b0对加法结果的每一比特进行异或。
·结果为9比特数;将b0前置到该数的前面,然后丢弃两个最低比特;这留下8比特(逆量化结果)。
下面是指定各种范围将使用的搅合和C值的表。需要指出的是,最低比特b0并非输入比特的一部分。
用于存在三进制位分量的情况的搅合和C值:
用于存在五进制位分量的情况的搅合和C值:
相对于正确舍入逆量化,这一程序所生成的逆量化结果的误差从不超过偏差1,同时带来少得多的硬件成本(“正确舍入”逆量化程序需要乘法器,而这里所提出的程序不需要)。这会有扰乱码点顺序的副作用,但这对图像质量没有负面影响,因此认为是可接受的(编码器可容易地利用简单的表查找来补偿该扰乱)。
在此逆量化程序中,常数C基于1023/M,其中M是范围内的最大值,并被选择为使得三进制位或五进制位对最终逆量化结果作出低阶贡献(而比特作出高阶贡献,这正是搅合最终尝试实现的),从而可表示的码点尽可能均匀地分布。
搅合图案与M的倒数的比特图案有关,从而搅合有效地进行截断乘法。
利用b0进行操纵以便获得码点对称,使得如果存在逆量化为X的值,则总是还存在逆量化为255-X的值。(对于根本不允许b0比特的0..2和0..4范围并不绝对保持该对称;这些范围具有奇数个码点,因此无法进行对称。)
颜色端点模式
本实施方式的格式支持总共16个颜色端点模式;这些模式控制如何将颜色端点整数转换为实际端点颜色。所述整数是在颜色端点逆量化之后呈现的0..255范围内的整数。
多个程序重复地用于多个颜色转换模式;下面,给出这些程序的C++实现:
bit_transfer_signed程序
当认为端点表示中的多个整数中的一个需要比其它整数更高的精度时使用bit_transfer程序。其用于代替独立地向一些值集合分配范围,以更有利地扭转比特分布。
假设两个整数A和B,从A到B的bit-transfer如下运行:
void bit_transfer_signed(uin8_t&a,uint8_t&b)
{
b>>=1;
b|=a&0x80;
a>>=1;
a&=0x3F;
if((a&0x20)!=0)a-=0x40;
}
如果需要,编码应该指定哪些值是供应方,哪些是转移的比特的接收方。.
blue-contraction程序
blue_contract程序用于为接近灰色的RGB颜色的红色和绿色分量提供1个额外比特的有效精度。程序运行如下:
void blue_contract(uint8_t&r,uint8_t&g,uint8_t&b)
{
r=(r+b)>>1;
g=(g+b)>>1;
}
由于申请人已认识到,如果待编码的块中的纹元接近灰色,则端点r、g和b值将彼此接近,并且在这种情况下有利的是用比蓝色更高的精度对r和g分量编码,所以使用此程序。在这种情况下,编码器可决定根据下面的蓝色扩展(blue-expansion)变换通过扩展端点的绿色和红色分量来从蓝色转移精度:
G=(g<<1)-b
R=(r<<1)-b
B=b
(例如,可通过测试灰色扩展变换是否得到可正确表示的值,即,这些值仍在范围0..1内,来确定端点足够接近灰线。当然,其它布置方式也将是可能的。)
所得R和G和B值被编码为端点值。
如果这已应用于编码过程中,则在解码之后上述逆“蓝色收缩”变换必须应用于端点值:
g=(G+B)>>1
r=(R+B)>>1
b=B
编码器可使用附加比特来向解码器指示需要这一处理,但是在本实施方式中,其利用了端点的顺序不重要的事实。因此定义了两个端点颜色之间的比较函数(如,通过比较各个端点的r、g和b的总和)。然后,编码器安排端点,使得端点1和端点2处的颜色值之间的比较结果反映出是否应该在解码处理期间应用蓝色收缩。然后,解码器将使用相同的比较函数以在解码之后有条件地对端点值应用蓝色收缩(如下所述)。
颜色端点模式0:两个亮度或α端点
此模式以两个整数(v0,v1)作为输入。如果v0小于或等于v1,则这些整数形成两个RGBA颜色(r0,g0,b0,a0)=(v0,v0,v0,0xFF)和(r1,g1,b1,a1)=(v1,v1,v1,0xFF)。否则,其形成两个RGBA颜色(r0,g0,b0,a0)=(0,0,0,v1)和(r1,g1,b1,a1)=(0,0,0,v0)。
模式1:亮度,基础值+偏移值
此模式以两个整数(v0,v1)作为输入。然后根据下面的程序形成两个整数l0和l1:
void mode1_unpack(int v0,int v1,int&l0,int&l1)
{
l0=(v0>>2)|(v1&0xC0);
l1=l0+(v1&0x3f);
if(l1>0xFF)l1=0xFF;
}
在此之后,形成两个RGBA颜色(r0,g0,b0,a0)=(l0,l0,l0,0xFF)和(r1,g1,b1,a1)=(l1,l1,l1,0xFF)
模式2:HDR亮度,大范围
此模式以两个整数(v0,v1)作为输入。然后将这两个整数解包为一对HDR亮度值,如下:
此模式旨在当小区域内存在大的亮度改变,或者需要表示非常大/小的亮度值时使用。
模式3:HDR亮度,小范围
此模式以两个整数(v0,v1)作为输入。然后将这两个整数解包为一对HDR亮度值,如下:
模式4:两个亮度-α端点
此模式以四个整数(v0,v1,v2,v3)作为输入。这些整数形成两个RGBA颜色(r0,g0,g0,a0)=(v0,v0,v0,v2)和(r1,g1,b1,a1)=(v1,v1,v1,v3)
模式5:亮度-α,基础值+偏移值
此模式以四个整数(v0,v1,v2,v3)作为输入。从这些整数形成基础值(lb,ab)=(v0,v2)和偏移值(lo,ao)=(v1,v3);然后,执行bit_transfer_signed程序以将一个比特从lo转移至lb,将一个比特从ao转移至ab;然后,这两个端点形成两个RGBA颜色(r0,g0,b0,a0)=(lb,lb,lb,ab)和(r1,g1,b1,a1)=(lb+lo,lb+lo,lb+lo,ab+ao)。将RGB值限制到范围0x00..0xFF。
模式6:RGB和缩放
此模式以四个整数(v0,v1,v2,v3)作为输入。从这些整数形成两个端点颜色:
·端点颜色0由(r0,g0,b0,a0)=((v0*v3)>>8,(v1*v3)>>8,(v2*v3)>>8,0xFF)给出
·端点颜色1由(r1,g1,b1,a1)=(v0,v1,v2,0xFF)给出
模式7:两个HDR RGB端点,基础值和缩放
此模式以四个整数(v0,v1,v2,v3)作为输入。这些是使得能够将比特从一个颜色分量转移到另一颜色分量的复合打包。所述整数被解包为两个HDR RGBA端点颜色e0和e1,如下:
void mode7_unpack_y(int v0,int v1,color&e0,color&e1)
{
int modeval=((v0&0xC0)>>6)|((v1&0x80)>>5)|((v2&0x80)>>4);
int majcomp;
int mode;
if((modeval&0xC)!=0xC)
{majcomp=modeval>>2;mode=modeval&3;}
else if(modeval!=0xF)
{majcomp=modeval&3;mode=4;}
else
{majcomp=0;mode=5;}
int red=v0&0x3f;
int green=v1&0x1f;
int blue=v2&0x1f;
int scale=v3&0x1f;
int x0=(v1>>6)&1;int x1=(v1>>5)&1;
int x2=(v2>>6)&1;int x3=(v2>>5)&1;
int x4=(v3>>7)&1;int x5=(v3>>6)&1;int x6=(v3>>5)&1;
int ohm=1<<mode;
if(ohm&0x30)green|=x0<<6;
if(ohm&0x3A)green|=x1<<5;
if(ohm&0x30)blue|=x2<<6;
if(ohm&0x3A)blue|=x3<<5;
if(ohm&0x3D)scale|=x6<<5;
if(ohm&0x2D)scale|=x5<<6;
if(ohm&0x04)scale|=x4<<7;
if(ohm&0x3B)red|=x4<<6;
if(ohm&0x04)red|=x3<<6;
if(ohm&0x10)red|=x5<<7;
if(ohm&0x0F)red|=x2<<7;
if(ohm&0x05)red|=x1<<8;
if(ohm&0x0A)red|=x0<<8;
if(ohm&0x05)red|=x0<<9;
if(ohm&0x02)red|=x6<<9;
if(ohm&0x01)red|=x3<<10;
if(ohm&0x02)red|=x5<<10;
static const int shamts[6]={1,1,2,3,4,5};
int shamt=shamts[mode];
red<<=shamt;green<<=shamt;blue<<=shamt;scale<<=shamt;
if(mode!=5){green=red-green;blue=red-blue;}
if(majcomp==1)swap(red,green);
if(majcomp==2)swap(red,blue);
e1.r=clamp(red,0,0xFFF);
e1.g=clamp(green,0,0xFFF);
e1.b=clamp(blue,0,0xFFF);
e1.alpha=0x780;
e0.r=clamp(red-scale,0,0xFFF);
e0.g=clamp(green-scale,0,0xFFF);
e0.b=clamp(blue-scale,0,0xFFF);
e0.alpha=0x780;
}
模式8:两个RGB端点
此模式以六个整数(v0,v1,v2,v3,v4,v5)作为输入。从这些整数计算两个和:s0=(v0+v2+v4),s1=(v1+v3+v5)。然后,比较这两个和:
·如果s1>=s0,则获得两个端点颜色(r0,g0,b0,a0)=(v0,v2,v4,0xFF)和(r1,g1,b1,a1)=(v1,v3,v5,0xFF)
·如果s1<s0,则获得两个端点颜色(r0,g0,b0,a0)=(v1,v3,v5,0xFF)和(r1,g1,b1,a1)=(v0,v2,v4,0xFF);然后,使这两个端点颜色均经受blue_contraction程序。
模式9:RGB基础值+偏移值
此模式以六个整数(v0,v1,v2,v3,v4,v5)作为输入。这些整数形成RGB基础值(rb,gb,bb)=(v0,v2,v4)和RGB偏移值(ro,go,bo)=(v1,v3,v5)。然后,通过将bit_transfer_signed程序应用于它们以使一个比特从偏移值移至基础值(即,从ro移至rb,从go移至gb,从bo移至bb)来修改基础值和偏移值。
然后,由(rb,gb,bb,0xFF)和(rb+ro,gb+go,bb+bo,0xFF)给出两个端点颜色。
如果偏移和s=(ro+go+bo)为负,则将这两个端点数交换,并对它们应用blue_contraction程序。将RGB值限制在范围0x00..0xFF。
模式10:RGB、缩放和两个α端点
此模式以六个整数(v0,v1,v2,v3,v4,v5)作为输入。首先,如同模式6一样使用(v0,v1,v2,v3)来生成两个端点颜色。然后,用v4替换第一端点颜色的α,用v5替换第二端点颜色的α。
模式11:两个HDR RGB端点
此模式以六个整数(v0,v1,v2,v3,v4,v5)作为输入。这些是使得能够将比特从一个颜色分量转移到另一颜色分量的复合打包。所述整数被解包为两个HDR RGBA端点颜色e0和e1,如下:
与模式7不同,此模式能够表示整个HDR范围。
模式12:两个RGBA端点
此模式以八个整数(v0,v1,v2,v3,v4,v5,v6,v7)作为输入。从这些整数计算两个和:s0=(v0+v2+v4),s1=(v1+v3+v5)。然后,将这两个和进行比较:
·如果s1>=s0,则获得两个端点颜色(r0,g0,b0,a0)=(v0,v2,v4,v6)和(r1,g1,b1,a1)=(v1,v3,v5,v7)
·如果s1<s0,则获得两个端点颜色(r0,g0,b0,a0)=(v1,v3,v5,v7)和(r1,g1,b1,a1)=(v0,v2,v4,v6);然后,使这两个端点颜色均经受blue_contraction程序。
模式13:RGBA基础值+偏移值
此模式以八个整数(v0,v1,v2,v3,v4,v5,v6,v7)作为输入。这些整数形成RGB基础值(rb,gb,bb,ab)=(v0,v2,v4,v6)和RGB偏移值(ro,go,bo,ao)=(v1,v3,v5,v7)。然后,使用bit_transfer_signed程序来将比特从偏移值移至基础值。然后,由(rb,gb,bb,ab)和(rb+ro,gb+go,bb+bo,ab+ao)给出两个端点颜色。如果(ro+go+bo)为负,则将blue_contraction程序应用于各个端点的RGB部分。
模式14:具有LDRα的两个HDR RGBA端点
此模式以八个整数(v0,v1,v2,v3,v4,v5,v6,v7)作为输入。以上述模式11的方式从值(v0..v5)解码RGB分量。然后,分别从值v6和v7填充端点0和1的α分量。
模式15:具有HDRα的两个HDR RGBA端点
此模式以八个整数(v0,v1,v2,v3,v4,v5,v6,v7)作为输入。以上述模式11的方式从值(v0..v5)解码RGB分量。然后,从值v6和v7解码α分量,如下:
空范围块
空范围块是指定纹理内这样的区域的编码纹理数据块:其中每一纹理数据元素在被解码时应该分配相同的数据值,并且其中编码纹理内的每一样本查找将仅使用具有相同数据值的纹理数据元素(在本实施方式中)。如果压缩(编码)块的比特[8:0]为“111111100”,则该压缩块为空范围块。这意味着该块具有块中的所有纹元共有的恒定颜色,并且该块另外指定纹理内这样的区域(对于2D块):其中纹理内的每一双线性采样查找将仅接触颜色与该恒定颜色相同的纹元。
空范围特征旨在使得能够进行特定纹理化优化:
·如果纹理映射器使用多程方法来进行三线性过滤或各向异性映射,则其可使用空范围块中的信息来确定其所有行程将仅访问具有相同值的纹元,因此在第一行程之后立即返回该值作为最终纹理化结果,而无需运行任何另外的行程。
·纹理映射器可另外保存最近看到的空范围块的缓存,并针对随后的纹理化操作来使用它们抑制来自存储器的实际纹理缓存线填充。
·使用空范围信息不是强制性的;没有实现这些优化的纹理映射器可忽略空范围,仅将该块当作恒定颜色块来处理。
下面的规则和观察适用:
·如果空范围坐标全部为1,则其被解释为块根本没有空范围,仅为恒定颜色块。
-无法正确地计算空范围但仍希望使用恒定颜色块的编码器因此总是可以选择仅为空范围指定全1图案,以便生成连续的恒定颜色块。
·如果空范围出现于除了最详细(最低)的Mip映射之外的Mip映射中,则空范围也应用于所有较详细(较低)的Mip映射层次。因此,实现Mip映射作为多程方法的纹理映射器可首先对最不详细(最高)的Mip映射采样,然后在遇到空范围时,可避免对较详细(较低)的Mip映射采样。
-此规则的结果是,如果块具有恒定颜色,但任意较详细(较低)Mip映射中的对应区域不具有恒定颜色,则空范围坐标必须全设定为0,以通知不存在空范围块。这种情形对于任何Mip映射金字塔的顶部1×1层次而言总是如此,而对于较详细(较低)层次而言也可能如此(在例如棋盘纹理的情况下)。
·恒定颜色本身利用遵循IEEE-754-2008的FP16值来指定;这是本实施方式的格式中指定可保持负值的浮点内容的方法。
·如果空范围一直扩展至纹理的边缘,则过滤的纹理化结果可能不必等于空范围块中指定的纹元值;如果除纹理表面本身之外的数据源对最终过滤结果做出贡献则可能发生这样的情形。在这样的情况下,纹理映射器必须以就像不存在空范围一样的方式使这种数据经受其过滤处理。这种数据源的示例为:
-当边界颜色不同于空范围块中指定的颜色时的纹理边界颜色
-无缝立方体映射的情况下的相邻面纹理
-“重复”纹理环绕模式的情况下的邻近纹理重复
·如果纹理映射器保存最近看到的空范围块的缓存,则其必须保证此缓存的存在不会生成与没有该缓存的情况下将生成的结果不同的纹理过滤结果;根据过滤单元的特性,这可限制具有非常特别的颜色值(如,所有分量均为0或1)的空范围块的缓存。
·由空范围块指定的空范围无需与块本身实际上重叠;尽管这样的不重叠不太可能有用。
·无效空范围(即,在实际上不具有恒定颜色的纹理区域上指定的空范围)将得到未定义的纹理化结果。
2D纹理
对于2D纹理,空范围块具有下面的布局:
比特 用途
8:0 “111111100”
9 动态范围标志
11:10 预留,设定为“11”。
24:12 空范围:低S坐标
37:25 空范围:高S坐标
50:38 空范围:低T坐标
63:51 空范围:高T坐标
79:64 黑色R分量
95:80 黑色G分量
111:96 黑色B分量
127:112 黑色A分量
空范围由S和T纹理坐标的(低,高)区间限定。区间端点被表示为UNORM13值;因此,为了使归一化坐标在[0,1]范围内,存储在块中的值必须除以213-1。
动态范围标志指示块颜色的存储格式。0指示LDR颜色,在这种情况下颜色分量被存储为归一化16比特整数值。1指示HDR颜色,在这种情况下颜色分量被存储为FP16值。
3D纹理
对于3D纹理,空范围块具有下面的布局:
比特 用途
8:0 “111111100”
9 动态范围标志
18:10 空范围:低S坐标
27:19 空范围:高S坐标
36:28 空范围:低T坐标
45:37 空范围:高T坐标
54:46 空范围:低P坐标
63:55 空范围:高P坐标
79:64 黑色R分量
95:80 黑色G分量
111:96 黑色B分量
127:112 黑色A分量
空范围由S、T和P纹理坐标的(低,高)区间限定。区间端点被表示为UNORM9值;因此,为了使归一化坐标在[0,1]范围内,存储在块中的值必须除以29-1。
动态范围标志指示块颜色的存储格式。0指示LDR颜色,在这种情况下颜色分量被存储为归一化16比特整数值。1指示HDR颜色,在这种情况下颜色分量被存储为FP16值。
分割图案生成器
如上所述,本实施方式的编码方案使用分割图案生成器(分割图案生成函数)以便生成分割图案;这使得能够以最小硬件成本支持大量的分割图案。(这与使用优化分区表相比质量成本略微高,然而经测量这样的成本仅为大约0.2dB,其并不证明提供全套优化表的硬件成本大的合理性。)
生成器本身以C99函数的形式指定。此函数的参数为:
·种子:这是在128比特压缩块的比特17:8处指定的分区索引。此种子可取0至1023的值。
·分区计数:其可为2、3或4。
·x、y和z坐标:这些是相对于压缩块的左上角的x、y和z纹元位置(对于2D块,z被设定为零(0))。
·指示小块的标志:其值取决于所使用的块大小。如果块中的纹元数少于31,则此标志的值被选择为1,否则将其设定为0。
函数返回0..3范围内的整数值,其指定所指定的纹元属于哪一分区。实际函数定义如下:
生成器依赖于被称为hash52()的辅助函数;此函数定义如下:
需要注意的是,hash52()中的算术必须使用恰好32比特宽的无符号整数来实现。另外需要注意,乘法可实现为一系列的三加/减运算。
上述分区生成函数基本上通过用伪随机选择的方向和频率实现2至4个锯齿函数来工作;这以硬件实现花费尤其低,同时能够生成几乎所有感兴趣的分区形状。
种子(分区索引)用于生成参数以用于锯齿波生成。由于各个不同的种子给出不同的波组合,所以种子可被当作“图案索引”。(因此,在基于查找表的设计中,种子实际上等同于图案表的索引。)
使用掩码来生成锯齿函数。其实际上将连续增加的值集合(如,0,16,32,48,64,80,96,112,128,144,160...)改变为重复集合。应用于先前序列的掩码0x3F将给出锯齿波(0,16,32,48,0,16,32,48,0,16,32,48,0,16,32...)。这等同于除以64时的余数,但仅在除数为2的幂时才起作用。其硬件实现也比除法电路便宜许多。
如果需要,也可使用确定分割图案的其它布置方式。例如,函数可被配置为生成弯曲分区形状。例如,可给锯齿函数中增加x^2和y^2项。这将产生弯曲形状的分区(其是“基本”版本的锯齿函数无法提供的)。然而,使用实际内容的测试实际上并未从这些形状显示出任何图像质量的提高。这种类型的曲线支持还将增加硬件成本。
分割图案生成函数优选被实现为解码器中的专用硬件元件。
图12示意性地示出图形处理系统20的布置方式,该系统可使用根据本实施方式编码的纹理。在此实施方式中,图形处理系统20是基于拼块的渲染(tile based rendering)系统。然而,当然其它布置方式也是可能的。
如图12所示,图形处理系统20包括状态管理系统21、光栅化层22以及渲染流水线形式的渲染层23。应该理解,图12所示的图形处理器20的各个层、元件和单元等可根据需要实现,因此将包括(例如)适当的电路和/或处理逻辑等,以执行必要的操作和功能。
状态管理系统21存储和控制状态数据以及图形处理单元的状态,以控制图形处理操作,如本领域已知的。
光栅化器22以待显示的图元作为其输入,并将那些图元光栅化至采样位置并产生待渲染的片段,如本领域已知的。
渲染流水线23获得来自光栅化器22的片段,并对那些片段进行渲染以便于显示。如本领域已知的,渲染流水线23将包括许多不同的处理单元,例如片段着色器、混合器、纹理映射器等。
渲染流水线23的输出(渲染的片段)被输出给拼块缓冲器24(因为本实施方式是基于拼块的系统)。然后,拼块缓冲器的输出最终被输出给帧缓冲器25以用于显示。
图12还示意性地示出图形处理系统20的为了使用以本实施方式的方式编码的纹理而提供的特定特征。
具体地讲,如图12所示,渲染流水线23包括纹理映射层26,纹理映射层26被配置为能够访问纹理列表缓冲器27以确定将其接收的待渲染的片段纹理化所需的纹理。
纹理列表缓冲器27将指示需要的纹理,并且如本领域已知的,纹理映射器26将从存储器28取得有关的纹理数据,并使用所取得的纹理数据来处理所关注的片段。
存储在纹理存储器28中的纹理利用本实施方式的编码格式来存储。因此,当纹理映射器26需要给定纹元以应用于待渲染的片段时,将确定对于所关注的纹元需要的纹理映射以及该映射内的编码块(如,基于纹元的位置,如本领域已知的),从存储器28检索该块,然后以上述方式从编码的块确定纹元的值(如,颜色)。
纹理映射器26为此包括合适的解码器(解码电路)。此解码器可以是(例如)被配置为对以本实施方式的形式编码的纹理进行解码的专用硬件元件的形式,或者可(例如)包括已适当编程以能够对以本实施方式的形式编码的纹理进行解码的可编程处理电路。优选使用专用硬件解码器。此解码器将(除了别的以外)实现本实施方式的分割图案生成函数。
在本实施方式中,解码处理包括:首先确定待解码的纹理数据元素的位置是否在先前遇到并存储的恒定数据值区域(空范围)内。如果是,则立即(即,无需访问并解码任何编码纹理数据块)返回存储的所关注的恒定数据值区域(空范围)的对应恒定数据值作为用于纹理数据元素的数据值。
另一方面,如果待解码的纹理数据元素的位置不在先前遇到并存储的恒定数据值区域(空范围)内,则确定表示待解码的纹理映射的编码纹理数据块集合中的哪一编码纹理数据块表示(包含)需要其值(即,待解码)的纹元。这基于纹元的位置以及块大小和纹理大小的知识来进行。然后,从存储器访问(如,取得)识别出的编码纹理数据块。
然后,通过确定块是否包含空范围标志(并且还确定块并非仅为“恒定颜色”块)来确定编码块是否为空范围块(即,指示恒定数据值区域)。
如果块为空范围块,则解码器确定空范围块中所指示的恒定数据值,并使用该值作为所关注的纹元的数据值。
解码器还从编码的空范围块确定该块所指定的恒定数据值区域的范围,并将该信息与所关注的区域(空范围)的恒定数据值一起存储以便于将来使用。针对解码器最近访问的空范围块按照先入先出原则存储此信息。当然,其它布置方式也是可能的。
解码处理优选还包括:在待解码的编码纹理数据块被指示(标记)为空范围块的情况下,从块中指示恒定数据值区域的范围的信息确定该块是否为真正的“空范围”块,或者其是否实际上仅为“恒定颜色”块。在后一种情况下,还优选确定恒定数据值是否应用于较详细Mip映射。如果块是“恒定颜色”块,则解码器确定块中所指示的恒定数据值,并使用该值作为所关注的纹元的数据值。
在编码纹理数据块不是空范围或“恒定颜色”块(即,是“正常”块)的情况下,解码器如下从纹理数据的编码块确定纹元的值:
1.寻找待解码的纹元相对于块的拐角的x、y、z位置(对于2D块,z=0)。
2.如果存在不止一个分区,则将x、y、z位置和种子(分区索引)代入分区生成函数,以确定纹元的分区数。
3.针对步骤2中选择的分区读取并解码端点值。此处理取决于颜色端点模式。
4.读取并解码纹元的索引。到哪里寻找索引数据以及如何将其解码由索引范围、索引计数和索引平面数确定。
5.如上所述利用索引值在端点颜色之间进行插值。
6.如果存在两个索引平面,则针对第二索引重复步骤4-5并将来自单独的平面的颜色分量组合(如,来自一个平面的RGB,来自另一平面的α,形成单个RGBA值)。
7.最终颜色为解码的纹元颜色。
因此,在本实施方式中,需要其值的给定纹元的解码处理将包括下面的步骤:
确定查找的纹元的位置
-如果其在缓存的空范围内
-立即返回该范围的恒定颜色值
-否则
-计算纹元在哪一块中
-加载该块
-如果该块为恒定颜色块
-返回恒定颜色值
-如果它是空范围块
-缓存空范围边界和颜色
-如果它不是恒定颜色块
-正常解码
针对需要的各个纹元值重复这些步骤,然后,将这样产生的解码的纹元值应用于将要渲染的采样位置(片段),以产生用于那些采样位置(片段)的渲染数据,然后,将所述渲染数据(例如)写到显示器的帧缓冲器,以显示“纹理化”的采样位置和/或片段。
如上所述,响应于指示空范围块的“恒定数据值”区域的识别,解码器(纹理映射处理)还被配置为:一旦识别出这样的块,就不执行(避免)多程纹理映射处理中的随后的行程;一旦识别出这样的指示块的恒定数据值区域,就不在多程Mip映射处理中对较详细Mip映射采样(避免采样);缓存最近加载/处理的指示(空范围)块的恒定数据值区域,并针对随后的解码(纹理化)操作使用其来抑制(纹理)来自存储器的缓存填充;和/或在识别出指示(空范围)块的恒定数据值区域的情况下,不加载(避免加载)相邻的编码纹理数据块。
从上述内容将理解的是,在所述解码方式中,针对将用于纹理数据块以及各个纹理数据元素的数据值集合产生的实际数据值(如,就其格式及其表示什么而言)将取决于将要编码的纹理数据的性质。因此,例如,如上所述,在颜色数据和颜色映射的情况下,各个数据值将表示给定颜色,并且(例如)包括诸如RGB或RGBA值的颜色值集合。另一方面,对于亮度映射,各个数据值可包括和表示单个亮度值。对于法向映射(凹凸映射),各个数据值将包括表示法向向量的分量集合,对于阴影映射(光照映射),各个数据值将包括和表示指示(例如)光或阴影是否存在及其量等的值集合。
上面描述了用于本发明的优选实施方式中所使用的编码方案的解码处理。本领域技术人员将理解,编码处理将以对应的相反方式进行。
因此,在本实施方式中为了使用上述编码格式对给定纹理映射进行编码,首先将原始纹理映射分割成选定大小的块。
然后,对各个纹理数据元素块进行测试以确定块的纹理数据元素集合是否能够编码为具有相同的、恒定的数据值。这通过确定块的所有纹理数据元素是否具有将要编码为恒定数据值块的足够相似的数据值(基于(例如并且优选地)一些选定的(优选预定的)相似性裕度或阈值)来完成。
如果确定待编码的纹理数据元素块的纹理数据元素均具有足够相似的数据值,则确定包含其中每一纹理数据元素具有足够相似的数据值的块的纹理内的邻接扩展区域的范围。这通过尝试将矩形(对于2D)或立方体(对于3D)区域从所关注的纹理数据元素块的边缘向外扩展(同时仍仅包含具有足够相似的数据(如,颜色)值的纹理数据元素)来完成。为此可使用任何合适的处理(例如,算法)。
这里应该注意的是,恒定数据值区域无需为了编码目的而与原始纹理所分割成的块的边界对齐,而是可仅部分地覆盖或重叠原始纹理所分割成的块。
如果找到扩展“恒定数据值”区域,则将所关注的纹理数据元素块编码为具有上述形式的空范围块。
编码的空范围块的所述恒定数据值可根据需要基于所关注的纹理区域中的原始纹理中的纹理数据元素的值来选择。例如,块(或空范围区域)的纹理数据元素的值的平均值可用作编码的空范围纹理数据块的恒定数据值。当然,其它布置方法也将是可能的。
这里应该注意的是,如果发现给定纹理数据元素块落在纹理中的恒定数据值区域内(并这样编码),这并不意味着也落在相同恒定数据值区域内的其它(如,相邻)纹理数据元素块不需要编码。相反,落在相同恒定数据值区域(空范围)内的每一单独的纹理数据元素块仍被编码为指定该区域的相应的单独的编码空范围纹理数据块。这有利于随机访问编码的纹理。
编码处理还可包括:根据需要,识别作为恒定数据值块,但并不还指定较大的恒定数据值区域(如上所述)的纹理数据元素块。然后,应该将这些纹理数据元素块编码为具有上述形式的“恒定颜色”块。
如果确定纹理数据元素块的纹理数据元素集合并非全部具有足够相似的数据值,则产生表示具有上述形式的纹理数据元素块的“非空范围”编码纹理数据块。
对“非恒定数据值”块的编码处理可以按照任何合适的方式或者利用待编码的原始纹理数据来进行。例如,如已知的现有技术处理中一样,块的原始数据可利用可用的(即,“非恒定数据值”编码纹理数据块实际上可表示的)各种不同的编码和分区可能性中的一些或全部来编码。这将得到可能的编码块集合,然后可将其与原始数据进行比较,以确定(例如)在与原始数据进行比较时哪一编码版本的块给出最小的误差(针对再现)(然后可选择该编码方式作为在编码时将用于原始纹理数据块的一个编码方式)。
对于块所考虑的各个可能的编码方式,应该以本实施方式的方式确定将用于块的端点颜色对。
针对原始数据(如,纹理映射)所分割成的各个不同的块进行这一处理。然后,如果需要,利用不同的块大小等重复所述处理,直到找到给出最小误差(或至少足够小的误差)的块大小和编码方式,然后可将其选择作为用于纹理的编码方式。
然后,可利用为各个块确定的块大小和编码方式(或者来自所用测试的已经编码的块,如果其保留的话)对原始纹理编码,以生成表示并对应于原始数据集合(如,纹理映射)的编码纹理数据块的流或集合。然后,可将该编码纹理数据块集合存储(例如)在诸如DVD的便携式存储装置上,以便于稍后使用(如,当期望将纹理应用于待渲染的图像时)。
优选地,产生Mip映射集合以表示纹理,各个Mip映射优选以上述方式产生。如果使用Mip映射,则压缩率(和比特率)优选针对不同的Mip映射层次而变化(不同),使得较高的比特率(即,较低的数据压缩水平)用于较小的Mip映射层次(即,较低分辨率的Mip映射层次)。
原始数据(如,纹理映射)所分割成的各个块优选具有相同的大小和配置。将使用的块大小提供给解码器。这可(例如)通过在与编码纹理数据块集合相关(附着)的(全局)数据头中包括(指示)块大小,或者以任何其它合适的方式来完成。
选择算法可使用任何期望的(以及许多不同的)测试方案,例如,测量编码版本的块与原始版本的块之间的峰值信噪比。
编码可根据需要(例如)利用(例如)能够访问存储器中的原始纹理数据的适当编程的通用处理器来进行,或者可使用合适的专用处理器。
尽管参照颜色形式的纹理数据描述了上述实施方式,如上所述,并且本领域技术人员将理解,本发明还适用于其它形式的纹理数据(例如,亮度映射或凹凸映射等)以及其它非纹理数据。在这样的布置方式中,可以按照有利的方式对数据编码或解码,但各个数据值将(例如)表示亮度值或法向向量等,而非颜色。
类似地,尽管主要参照正方形或正方体纹元块的编码描述了本实施方式,但是如果需要,其它纹元块布置方式和配置(例如,非正方形矩形纹元块和非正方体长方体纹元块的编码)将是可能的。
图3至图11示出本实施方式的编码格式将生成的基本编码块布局。如上所述,各个编码块包括128比特。
图3示出基本块布局的概览。因此其示出比特0-10中的索引模式数据、比特11-12中的“分区计数-1”数据以及用任何必要的额外配置数据填充的剩余空间,以及相应的端点颜色数据和纹元索引数据(均具有可变宽度)。
图4示出未分区的块的布局。因此在这种情况下,比特11-12中的“分区计数-1”数据被设定为“00”,颜色端点模式数据(图4中示出为CEM)设置在比特13-16中。
图5示出未分区但使用两个索引平面的块的布局。在这种情况下,如图5所示,使用两个比特来用作第二索引平面的颜色分量选择器(CCS)。这些比特就出现在纹元索引数据下面(其为可变宽度,如上所述)。
图6示出对分割成两个分区的纹元(纹理数据元素)块进行编码的块的布局。在这种情况下,如图6所示,该编码块包括比特11-12中的“分区计数-1”“01”(因为有两个分区)以及比特13-22中的用于分割图案生成函数的分区索引(种子)。
如图6所示,编码块还包括比特23-24中的颜色端点模式对选择器(CPS)值以及用于两个分区中的每一个的颜色端点模式指示器(信息)。颜色端点模式信息包括用于各个分区n的相应的颜色端点类比特Cn以及2比特的颜色端点模式字段CMn,并被布置为使得首先(按照分区顺序)发放所有分区的所有颜色类比特,然后是各个分区的颜色模式字段(按照顺序)。如果这全部需要6比特以上,则就在纹元索引比特下面存储附加比特(其将具有可变的位置,如上所述)。对于硬件解码器而言更高效的是颜色类比特在编码块中处于固定位置。
因此,如图6所示,在两个分区块的情况下,颜色端点模式对选择器(CPS)值设置在比特23-24中,各个分区(第一分区为分区0,第二分区为分区1)相应的颜色类比特C0、C1首先设置在比特25-26中(即,在颜色端点模式对选择器比特之后),然后2比特颜色端点模式字段跟随其后(按照分区顺序),直到6比特的极限,然后任何剩余比特就设置在纹元索引数据下面。因此,第一分区(分区0)的颜色端点模式指示器设置在比特27-28中(CM0),第二分区(分区1)的颜色端点模式设置在比特53-54中(CM1)。如图所示,第二分区(CM1)的颜色端点模式所需的附加比特就出现在纹元索引数据下面。所述块还包括两个不同的分区的适当的颜色端点数据集合(分别为端点颜色数据0和端点颜色数据1)。
图7示出对分割成三个分区的纹理数据元素块进行编码的块的布局。在这种情况下,如图7所示,有三个颜色端点类与模式数据的集合(C0、C1、C2、M(CM0)、CM1和CM2)(一个分区一个集合)(如上面联系图6所讨论的那样布置)以及对应的端点颜色数据集合(端点颜色数据0、端点颜色数据1和端点颜色数据2)(一个分区一个集合)。在这种情况下,如图7所示,CM0(图7中由“M”表示)的两个比特被切分到比特28以及紧随CM1下面的可变位置之间。另外,如图7所示,“分区计数-1”比特11-12因此设定为“10”,以指示这是三分区块。
图8示出对分割成四个分区的纹理数据元素集合进行编码的块的布局。在这种情况下,相应地存在四个颜色端点类与模式数据的集合以及四个对应端点颜色数据的集合(每一分区一个集合)。另外,如图8所示,“分区计数-1”比特11-12相应地设定为“11”以指示这是四分区块。
图9示出对分割成两个分区并且还使用两个索引平面的纹理数据元素集合进行编码的块的布局。在这种情况下,如图9所示,该块包括用于第二索引平面的颜色分量选择器(CCS)字段。在这种情况下,此颜色分量选择器就出现在第二分区的附加颜色端点模式比特(CM1)下面,而CM1就在纹元索引数据比特下面。(相同布局规则(方案)适用于使用双索引平面的三分区块和四分区块。)
图10示出2D空范围块(即,指示恒定颜色值的块)的布局。因此,如图所示,块的比特0至8被设定为指示该块为空范围块。
如图10所示,空范围块包括指示块的恒定颜色的数据以及该颜色扩展的范围(就低的和高的S和T值而言)。
图11示出3D空范围块的布局。此布局基本上对应于图10所示的2D空范围块布局,但包括另一个范围分量P(因为编码块表示3D纹理数据元素块)。
如果需要,所描述的本发明的优选实施方式的许多变型和改型将是可能的。
例如,代替使用本实施方式的编码格式,其它基于块的编码方案(例如,S3TC、BC6和BC7)可用于对纹元块编码。
在这些情况下,应该以上述方式确定将用于待编码的纹理数据元素块的端点颜色。然后,如本领域已知的,应该通过这两个端点颜色之间的插值来推导两个附加颜色,以将四颜色的集合赋予待编码的块,所述颜色全部落在颜色空间中的确定的直线上。
然后,应该为块中的各个纹元分配指示块的四颜色集合的四个颜色中的哪一个将用于所关注的纹元(实践中,指示块的四个颜色中的哪一颜色最接近纹元的实际颜色)的索引。
类似地,尽管上面所述的本实施方式在估计所关注的纹理数据元素集合的主方向时测试颜色空间中的多个不同的平面,但是如果需要,可仅使用一个平面,来代替多个平面。如上面所说明的,这将引起质量的损失,但将增加编码速度,因此是“超快”编码实现可容许的。
在这种情况下,使用的颜色空间中的平面优选地被挑选以避免(已知的)通常情况的主方向落在或接近该平面。例如,对于RGB颜色内容,主方向通常非常接近于(1,1,1),因此使用由(red+green+blue)=0定义的平面应该在“超快”编码器所容许的足够多的情况下得到好的结果。在这种情况下,方向估计将为:
对于各个偏移纹元值T',计算和red+green+blue;将和为正的所有纹元加在一起。
从上述内容可以看出,例如,本发明至少在其优选实施方式中可提供一种方法和系统,其能够比标准的基于特征向量的方法更快地估计低维空间中的点集合呈现最大方差的方向。
因此,本发明可用更简单的方法代替传统的离散卡亨南-洛维变换(KLT)(也称为主分量分析)方法,同时仍保持纹理压缩质量。
由于本发明的方法仅需要加法和比较,完全没有类似于乘法/除法/求根/特殊情况处理之类的事,所以其适合于直接硬件实现。另外,由于计算负载减小,所以其适合用于“超快”软件编码器。因此,与KLT不同,本发明的方法适合于“超快”纹理压缩和硬件纹理压缩。
至少在本发明的优选实施方式中,这如下实现:通过针对将颜色空间中的纹元分割成两组的一个或更多个平面,确定颜色空间中的从待编码的纹理数据元素集合中的值落在颜色空间中的所述平面一侧的所有纹理数据元素的平均值在颜色空间中的点到待编码的纹理数据元素集合中的值落在颜色空间中的所述平面另一侧的所有纹理数据元素的平均值在颜色空间中的点的向量方向,然后选择确定的方向向量中最长的一个作为纹理数据元素集合在颜色空间中的主方向的估计,来估计待编码的纹理数据元素集合在颜色空间中的主方向,所述主方向将在确定颜色端点值时使用,所述颜色端点值将在对纹理数据元素集合进行编码时用于纹理数据元素集合。

Claims (19)

1.一种针对将用于图形处理系统的待编码的纹理数据元素集合,确定纹理数据元素在数据空间中的方向的方法,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合,该方法包括以下步骤:
针对所述数据空间中的将待编码的所述纹理数据元素集合分割成两组的至少一个平面,确定所述数据空间中的从待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面一侧的纹理数据元素的平均值在所述数据空间中的点到待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面另一侧的纹理数据元素的平均值在所述数据空间中的点的向量的方向;以及
利用针对所述数据空间中的将所述纹理数据元素集合分割成两组的所述至少一个平面中的至少一个、所述纹理数据元素的在所述数据空间中确定的所述方向,来确定所述数据空间中的将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合;
其中:
待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面一侧的纹理数据元素的平均值包括以下中的一种:
基于所述数据空间中的所述平面一侧的纹理数据元素中的全部的平均值;或
基于所述数据空间中的所述平面一侧的纹理数据元素中的一些而非全部的平均值;并且
待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面另一侧的纹理数据元素的平均值包括以下中的一种:
基于所述数据空间中的所述平面另一侧的纹理数据元素中的全部的平均值;或
基于所述数据空间中的所述平面另一侧的纹理数据元素中的一些而非全部的平均值。
2.根据权利要求1所述的方法,其中,待编码的所述纹理数据元素集合包括为了编码目的而将纹理分割成的纹理数据元素块的所有纹理数据元素,或者为了编码目的而将纹理分割成的纹理数据元素块的纹理数据元素的子集。
3.根据权利要求1或2所述的方法,其中,所述数据空间中的分割所述纹理数据元素集合的、确定所述数据空间中的向量的方向所针对的各个平面垂直于所述数据空间的多个轴中的一个。
4.根据权利要求1或2所述的方法,该方法还包括以下步骤:
基于所述数据空间中的所述向量的长度,确定是否将针对所述数据空间中的已用于分割所述纹理数据元素集合的平面确定的方向用作将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时使用。
5.根据权利要求1或2所述的方法,该方法包括以下步骤:针对所述数据空间中的分割所述纹理数据元素集合的多个不同的平面中的每一个确定所述数据空间中的向量的方向。
6.根据权利要求5所述的方法,该方法还包括以下步骤:基于用于确定所述数据空间中的方向的所述向量在所述数据空间中的长度,选择针对所述数据空间中的将所述纹理数据元素集合分割成两组的所述多个不同的平面中的一个、所述纹理数据元素的在所述数据空间中确定的所述方向,作为所述数据空间中的将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合。
7.一种针对将用于图形处理系统的待编码的纹理数据元素集合,确定纹理数据元素在数据空间中的方向的方法,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合,该方法包括以下步骤:
首先确定所考虑的纹理数据元素集合的平均纹理数据元素值,然后按照所确定的平均值使各个纹理数据元素的值偏移;
针对所述数据空间中的将待编码的所述纹理数据元素集合的偏移值分割成两组的至少一个平面,确定所述数据空间中的所述数据空间中的原点与待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面一侧的纹理数据元素的偏移值之和在所述数据空间中的点之间的向量的方向;以及
利用针对将所述纹理数据元素集合的偏移值分割成两组的所述至少一个平面中的至少一个、所述纹理数据元素的在所述数据空间中确定的所述方向,来确定所述数据空间中的将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合。
8.一种对用于图形处理系统的纹理映射进行编码的方法,该方法包括以下步骤:
将待编码的纹理映射分割成多个纹理数据元素块;以及
针对各个纹理数据元素块:
利用权利要求1-7中的任一项所述的方法确定数据空间中的将在确定基础数据值时使用的至少一个方向,所述基础数据值将在对所述纹理数据元素块进行编码时使用;
利用针对所述纹理数据元素块确定的所述数据空间中的所述至少一个方向来推导将在对所述纹理数据元素块进行编码时使用的至少一个基础数据值;以及
利用推导出的所述至少一个基础数据值将所述纹理数据元素块编码为表示所述纹理数据元素块的纹理数据块。
9.根据权利要求8所述的方法,其中,利用针对所述纹理数据元素块确定的所述数据空间中的所述至少一个方向来推导将在对所述纹理数据元素块进行编码时使用的至少一个基础数据值的步骤包括以下步骤:
利用针对所述纹理数据元素块确定的所述数据空间中的所述至少一个方向来推导将在对所述纹理数据元素块进行编码时使用的最高数据值和最低数据值。
10.一种用于针对将用于图形处理系统的待编码的纹理数据元素集合,确定纹理数据元素在数据空间中的方向的设备,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合,该设备包括:
用于确定向量方向的模块,该模块被配置为:
针对所述数据空间中的将待编码的所述纹理数据元素集合分割成两组的至少一个平面,确定所述数据空间中的从基于待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面一侧的纹理数据元素的平均值在所述数据空间中的点到待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面另一侧的纹理数据元素的平均值在所述数据空间中的点的向量的方向;以及
用于确定数据空间方向的模块,该模块被配置为:
利用针对所述数据空间中的将所述纹理数据元素集合分割成两组的所述至少一个平面中的至少一个、所述纹理数据元素的在所述数据空间中确定的所述方向,来确定所述数据空间中的将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合;
其中:
待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面一侧的纹理数据元素的平均值包括以下中的一种:
基于所述数据空间中的所述平面一侧的纹理数据元素中的全部的平均值;或
基于所述数据空间中的所述平面一侧的纹理数据元素中的一些而非全部的平均值;并且
待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面另一侧的纹理数据元素的平均值包括以下中的一种:
基于所述数据空间中的所述平面另一侧的纹理数据元素中的全部的平均值;或
基于所述数据空间中的所述平面另一侧的纹理数据元素中的一些而非全部的平均值。
11.根据权利要求10所述的设备,其中,待编码的所述纹理数据元素集合包括为了编码目的而将纹理分割成的纹理数据元素块的所有纹理数据元素,或者为了编码目的而将纹理分割成的纹理数据元素块的纹理数据元素的子集。
12.根据权利要求10或11所述的设备,其中,所述数据空间中的分割所述纹理数据元素集合的、确定所述数据空间中的向量的方向所针对的各个平面垂直于所述数据空间的多个轴中的一个。
13.根据权利要求10或11所述的设备,其中,所述用于确定数据空间方向的模块被配置为:基于所述数据空间中的所述向量的长度,确定是否将针对已用于分割纹理数据元素值的平面确定的方向用作将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时使用。
14.根据权利要求10或11所述的设备,其中,所述用于确定向量方向的模块被配置为:针对所述数据空间中的分割所述纹理数据元素集合的多个不同的平面中的每一个确定所述数据空间中的向量的方向。
15.根据权利要求14所述的设备,其中,所述用于确定数据空间方向的模块被配置为:基于用于确定所述数据空间中的方向的所述向量在所述数据空间中的长度,选择针对所述数据空间中的将所述纹理数据元素集合分割成两组的所述多个不同的平面中的一个、所述纹理数据元素的在所述数据空间中确定的所述方向,作为所述数据空间中的将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合。
16.一种用于针对将用于图形处理系统的待编码的纹理数据元素集合,确定纹理数据元素在数据空间中的方向的设备,所述方向将在确定基础数据值时使用,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合,该设备包括:
偏移模块,该模块被配置为:
首先确定所考虑的纹理数据元素集合的平均纹理数据元素值,然后按照所确定的平均值使各个纹理数据元素的值偏移;
用于确定向量方向的模块,该模块被配置为:
针对所述数据空间中的将待编码的所述纹理数据元素集合的偏移值分割成两组的至少一个平面,确定所述数据空间中的所述数据空间中的原点与待编码的所述纹理数据元素集合中的值落在所述数据空间中的所述平面一侧的纹理数据元素的偏移值之和在所述数据空间中的点之间的向量的方向;以及
用于确定数据空间方向的模块,该模块被配置为:
利用针对将所述纹理数据元素集合的偏移值分割成两组的所述至少一个平面中的至少一个、所述纹理数据元素的在所述数据空间中确定的所述方向,来确定所述数据空间中的将在确定基础数据值时使用的方向,所述基础数据值将在对所述纹理数据元素集合进行编码时用于所述纹理数据元素集合。
17.一种用于对用于图形处理系统的纹理映射进行编码的设备,该设备包括:
用于分割纹理映射的模块,该模块被配置为,
将待编码的纹理映射分割成多个纹理数据元素块;
用于确定数据空间方向的模块,该模块被配置为,针对各个纹理数据元素块,利用权利要求1-7中的任一项所述的方法确定数据空间中的将在确定基础数据值时使用的至少一个方向,所述基础数据值将在对所述纹理数据元素块进行编码时使用;
用于推导基础数据值的模块,该模块被配置为,针对各个纹理数据元素块,利用针对所述纹理数据元素块确定的所述数据空间中的至少一个方向来推导将在对所述纹理数据元素块进行编码时使用的至少一个基础数据值;以及用于编码块的模块,该模块被配置为,针对各个纹理数据元素块,利用推导出的所述至少一个基础数据值将所述纹理数据元素块编码为表示所述纹理数据元素块的纹理数据块。
18.根据权利要求17所述的设备,其中,所述用于推导基础数据值的模块被配置为:利用针对所述纹理数据元素块确定的所述数据空间中的所述至少一个方向来推导将在对所述纹理数据元素块进行编码时使用的最高数据值和最低数据值。
19.一种存储计算机程序的计算机可读存储介质,所述计算机程序在数据处理装置上运行,用于实现权利要求1至9中的任一项所述的方法。
CN201310279623.2A 2012-07-04 2013-07-04 确定纹元方向的方法及设备,编码方法及设备,存储介质 Active CN103533364B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1211862.6 2012-07-04
GB1211862.6A GB2503691B (en) 2012-07-04 2012-07-04 Methods of and apparatus for encoding and decoding data

Publications (2)

Publication Number Publication Date
CN103533364A CN103533364A (zh) 2014-01-22
CN103533364B true CN103533364B (zh) 2019-04-12

Family

ID=46721868

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310279623.2A Active CN103533364B (zh) 2012-07-04 2013-07-04 确定纹元方向的方法及设备,编码方法及设备,存储介质

Country Status (4)

Country Link
US (1) US9142037B2 (zh)
KR (1) KR102137443B1 (zh)
CN (1) CN103533364B (zh)
GB (1) GB2503691B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11836830B2 (en) 2017-04-28 2023-12-05 Imagination Technologies Limited Multi-output decoder for texture decompression

Families Citing this family (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9626730B2 (en) 2011-05-05 2017-04-18 Arm Limited Method of and apparatus for encoding and decoding data
CN107004280A (zh) * 2014-07-10 2017-08-01 英特尔公司 用于高效的纹理压缩的方法和装置
US9479799B1 (en) * 2014-09-05 2016-10-25 Quantenna Communications, Inc. Compression using an iterative data derived basis set
KR102245137B1 (ko) * 2014-09-17 2021-04-28 삼성전자 주식회사 렌더링 데이터의 압축을 해제하는 장치, 방법 및 기록매체
US10198850B2 (en) * 2014-09-26 2019-02-05 Intel Corporation Method and apparatus for filtering compressed textures
US9800876B2 (en) * 2015-03-09 2017-10-24 Samsung Electronics Co., Ltd. Method of extracting error for peak signal to noise ratio (PSNR) computation in an adaptive scalable texture compression (ASTC) encoder
KR102477264B1 (ko) * 2015-09-22 2022-12-13 삼성전자주식회사 텍스쳐를 처리하는 방법 및 장치
US10148972B2 (en) * 2016-01-08 2018-12-04 Futurewei Technologies, Inc. JPEG image to compressed GPU texture transcoder
JP6694284B2 (ja) * 2016-01-29 2020-05-13 シナプティクス・ジャパン合同会社 画像データ伝送システム、送信回路及び受信回路
US10332277B2 (en) * 2016-04-13 2019-06-25 Samsung Electronics Co., Ltd. Low complexity optimal decimation grid selection in encoding applications
GB2562042B (en) * 2017-04-28 2020-07-15 Imagination Tech Ltd Decoder unit for texture decompression
KR20210089654A (ko) * 2018-10-01 2021-07-16 오피 솔루션즈, 엘엘씨 지수 파티셔닝의 방법들 및 시스템들
GB2575134B (en) * 2018-12-20 2021-03-31 Imagination Tech Ltd ASTC interpolation
GB2575135B (en) 2018-12-20 2021-03-24 Imagination Tech Ltd ASTC interpolation
CN109859303B (zh) * 2019-01-16 2023-06-27 网易(杭州)网络有限公司 图像的渲染方法、装置、终端设备及可读存储介质
US11610340B2 (en) * 2020-04-17 2023-03-21 Tencent America LLC Edge enhancement filter
US11670009B2 (en) * 2020-08-26 2023-06-06 Meta Platforms Technologies, Llc Rate controlled image and texture data compression

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1547162A (zh) * 2003-12-05 2004-11-17 浙江大学 一种基于金字塔四叉树的纹理映射方法
CN1659595A (zh) * 2002-06-07 2005-08-24 艾利森电话股份有限公司 用于编码纹理信息的方法和设备
CN101203886A (zh) * 2005-03-04 2008-06-18 Arm挪威股份有限公司 用于编码数据的方法和设备

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE2440768C3 (de) 1974-08-26 1982-03-18 Philips Patentverwaltung Gmbh, 2000 Hamburg Verfahren und Vorrichtung zur Datenkompression für die Faksimile-Übertragung graphischer Information
US5046119A (en) 1990-03-16 1991-09-03 Apple Computer, Inc. Method and apparatus for compressing and decompressing color video data with an anti-aliasing mode
US5047853A (en) 1990-03-16 1991-09-10 Apple Computer, Inc. Method for compresssing and decompressing color video data that uses luminance partitioning
JP2924693B2 (ja) * 1995-02-02 1999-07-26 日本ビクター株式会社 画像におけるテクスチャ領域の抽出方法
US6236405B1 (en) 1996-07-01 2001-05-22 S3 Graphics Co., Ltd. System and method for mapping textures onto surfaces of computer-generated objects
US6775417B2 (en) 1997-10-02 2004-08-10 S3 Graphics Co., Ltd. Fixed-rate block-based image compression with inferred pixel values
US5956431A (en) 1997-10-02 1999-09-21 S3 Incorporated System and method for fixed-rate block-based image compression with inferred pixel values
JP2001507823A (ja) 1997-10-28 2001-06-12 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 画像の圧縮及び復元
US6298169B1 (en) 1998-10-27 2001-10-02 Microsoft Corporation Residual vector quantization for texture pattern compression and decompression
US7023447B2 (en) * 2001-05-02 2006-04-04 Eastman Kodak Company Block sampling based method and apparatus for texture synthesis
GB0128888D0 (en) 2001-12-03 2002-01-23 Imagination Tech Ltd Method and apparatus for compressing data and decompressing compressed data
SE0401852D0 (sv) 2003-12-19 2004-07-08 Ericsson Telefon Ab L M Image processing
GB2439481B (en) 2005-03-04 2008-08-06 Arm Norway As Method of and apparatus for encoding data
JP4328780B2 (ja) 2006-04-13 2009-09-09 日本電信電話株式会社 不要領域画像消去装置および不要領域画像消去方法
KR100849691B1 (ko) * 2007-01-16 2008-07-31 광주과학기술원 영상 텍스쳐 분석 방법과 장치, 및 이를 이용한 영상 분류방법과 장치
JP4946581B2 (ja) 2007-04-05 2012-06-06 ソニー株式会社 画像処理装置
JP4354510B1 (ja) 2008-05-01 2009-10-28 株式会社コナミデジタルエンタテインメント 画像処理装置、画像処理方法、ならびに、プログラム
CN101398936A (zh) * 2008-11-07 2009-04-01 北京航空航天大学 一种双向纹理函数的压缩和合成方法
US9153064B2 (en) 2009-12-23 2015-10-06 Intel Corporation Grouping pixels to be textured
US9626730B2 (en) 2011-05-05 2017-04-18 Arm Limited Method of and apparatus for encoding and decoding data

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1659595A (zh) * 2002-06-07 2005-08-24 艾利森电话股份有限公司 用于编码纹理信息的方法和设备
CN1547162A (zh) * 2003-12-05 2004-11-17 浙江大学 一种基于金字塔四叉树的纹理映射方法
CN101203886A (zh) * 2005-03-04 2008-06-18 Arm挪威股份有限公司 用于编码数据的方法和设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
纹理压缩技术的研究与实现;罗冠;《中国优秀博硕士学位论文全文数据库信息科技辑》;20020615;全文

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11836830B2 (en) 2017-04-28 2023-12-05 Imagination Technologies Limited Multi-output decoder for texture decompression

Also Published As

Publication number Publication date
GB2503691A (en) 2014-01-08
US9142037B2 (en) 2015-09-22
GB2503691B (en) 2019-08-14
KR102137443B1 (ko) 2020-07-27
GB201211862D0 (en) 2012-08-15
US20140193081A1 (en) 2014-07-10
CN103533364A (zh) 2014-01-22
KR20140009924A (ko) 2014-01-23

Similar Documents

Publication Publication Date Title
CN103533364B (zh) 确定纹元方向的方法及设备,编码方法及设备,存储介质
US9524535B2 (en) Method of and apparatus for encoding and decoding data
US8891886B2 (en) Method of and apparatus for encoding data
CN104050688B (zh) 数据编码和解码方法和设备以及计算机可读记录介质
US8102402B2 (en) Method of and apparatus for encoding data
CN104012097B (zh) 用于压缩和解压缩数据的方法与装置
CN108184115A (zh) Hevc帧内cu划分和pu预测模式选择方法及系统
US9177415B2 (en) Methods of and apparatus for encoding and decoding data
CN108810544A (zh) 用于纹理解压缩的多输出解码器
GB2439482A (en) Encoding Texture Data
CN108810546A (zh) 用于纹理解压缩的解码器单元
CN106717002A (zh) 基于块的混合压缩
WO2013165621A1 (en) Image-generated system using beta distribution to provide accurate shadow mapping
Andujar Topographic map visualization from adaptively compressed textures
Klajnšek et al. An improved quadtree-based algorithm for lossless compression of volumetric datasets
Andujar et al. Locally-Adaptive Texture Compression.

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant