ASTC纹理压缩格式(AdaptiveScalableTextureCompression)

ASTC纹理压缩格式
(AdaptiveScalableTextureCompression)
原⽂:
介绍
Adaptive Scalable Texture Compression(ASTC)是⼀种世界领先的新型纹理压缩格式。这种压缩格式已经加⼊Khronos标准,并已在某些硬件平台中提供。本⽂介绍了它的⼯作原理、使⽤⽅法和如何最⼤程度地使⽤它。更深⼊的信息可以参考编码器提供的规范[Eva]。
背景
ASTC由ARM Limited针对⽬前已有的填充率较低的纹理压缩开发的⼀种灵活解决⽅案。在过去,不同的纹理压缩⽅法往往仅在⼀种或多种特定的数据通道和相关⽐特率的组合情况下表现较好。
更糟糕的是,许多格式是平台专有的,限制了特定供应商的可⽤性,导致应⽤程序在安装后必须根据检测到的可⽤格式通过⽹络来获取其它资产。
ASTC的核⼼基础是它可以压缩每种(表1.1)常⽤格式的输⼊图像,并以⽤户选择的任何⽐特率输出该图像,从8bpp到0.89bpp。如果是3D纹理,则为0.49bpp(表1.2)。
低于1bpp的⽐特率是通过智能的可变块⼤⼩系统实现的。⼤多数基于块的纹理压缩⽅法具有单个固定的块⼤⼩,但是ASTC可以存储从4x4到12x12任意⼤⼩的块(包括⾮正⽅形块⼤⼩)的规则⽹格图像。ASTC还可以存储3D纹理,块⼤⼩从3x3x3到6x6x6不等。不论块的尺⼨如何,它们始终以128位存储,因此⽐特率会按⽐例变化。
块中的每个像素点被定义为⼀对边界⾊上线性梯度的量化点,这允许⾮常平滑的着⾊区域。对于包含完全不同颜⾊区域的边界的块,它可以使⽤2048种颜⾊中的⼀种,将当前块分为1~4种不同的颜⾊梯度。
这些块是通过算法⽣成的,选择正确的块进⾏压缩是减少计算时间的核⼼。该技术允许⼀个块包含完全不同⾊调的区域,这些⾊调具有任意着⾊或多个相交的不同⾊调的硬边⾊块。
每个块最多定义四个颜⾊和⼀个分布图案id,以便每个像素都知道它们使⽤哪些对颜⾊来定义⾃⼰的颜⾊。然后,每个像素的值量化到0~1之间,以表⽰它们在像素之间的梯度上。由于每个128bit块中包含边界⾊和独⽴像素的变量,块中每个像素的精度量化为剩余可⽤数据⼤⼩。
社会主义初级阶段的基本矛盾
在压缩期间,算法必须选择正确的分布图案和边界颜⾊对,然后为每个像素⽣成量化值。在选择图案和边界颜⾊时要进⾏⼀定程度的反复测试,并且在压缩时,在压缩时间和最终图像质量之间要进⾏权衡。质量越⾼,算法在决定哪个最好之前可尝试更多的选择。⽆论压缩需要多长时间,解压缩时间都是固定的,因为图像数据始终可以通过⼀次遍历从图案和边界颜⾊重新推算出来。
压缩算法还可以使⽤不同的指标来判断不同测试的质量,从使⽤信噪⽐,到偏向⼈类视觉的感知判断。该算法还可以单独⽽⾮整体判断各个通道,以保留纹理通道的细节,其中各个通道⽤作着⾊器程序的输⼊数据;或减少⾓度噪声,这对于切线空间的法线贴图很重要。日本女性的生活地位
总体⽽⾔,正确使⽤这些选项相⽐现有的压缩算法有明显的改进,如图1.2所⽰。
开始
下载评估压缩程序[Eva]之后,可以使⽤命令⾏界⾯来压缩纹理。该程序⽀持png, target, jpeg, gif(仅⾮动画),Radiance
HDR,Khronos Texture KTX , DirectDraw Surface DDS和Half-Float-TGA。对OpenEXR也有有限的⽀持。
astcenc应⽤程序提供了可⽤命令⾏参数的完整列表,最基本的命令是:
astcenc -c <input.file> <output.file> <rate> [options]
-c告诉程序压缩第⼀个⽂件,然后将压缩后的⽂件保存到第⼆个⽂件中。速率⽤于确定块⼤⼩,可以直接选择为块⼤⼩,例如5x4或3x3x3,或者可以为算法指定bpp并以此为⽬标并⾃动选择。⽐特率必须始终保持⼩数点后⼀位,从8.0到0.8(对3D纹理,可以低⾄
0.6)。
如果希望解压缩纹理以查看时,可使⽤如下命令:
astcenc -d <input.file> <output.file> [options]
在这个例⼦⾥,-d意味着解压,输⼊⽂件是已经被压缩过的纹理,输出⽂件是⾮压缩格式的⼀种。
要查看给定⼀组选项下纹理压缩后的效果,使⽤如下命令:
astcenc -t <intput.file> <output.file> <rate> [options]
-t 选项意味着使⽤给定选项压缩⽂件,然后⽴即将其解压缩为输出⽂件。临时压缩图像不会保存,且输⼊和输出⽂件均为解压缩⽂件格式。
选项可以不填,但要获得较好的效果,有⼏个需要注意的:
最有⽤的预设是质量预设:
-veryfast
-fast
-medium
节能灯致癌-thorough
-exhaustive
有许多可⽤的选项可以设置各种压缩质量因⼦,包含:
要尝试的块分区图案的数量和范围;
各个信噪⽐的临界值,以提前退出独⽴的决策阶段;
不同边界颜⾊测试的最⼤迭代次数;
⼤多数⽤户不会花时间寻满⾜⾃⼰需求的最佳组合。因此,可以使⽤预设质量来提供⼀些⾼级提⽰,从⽽获取单个独⽴的质量因⼦。
需要注意的是,veryfast⼏乎是瞬时完成的,但仅对⼀⼩部分输⼊图像给出了良好的结果。相反,较⾼的质量级别(准确地对每个块执⾏所有可能的边界模式组合)花费的时间要长的多,但和thorough模式下压缩地⽂件相⽐,可见差距较⼩。
使⽤ASTC纹理
ASTC功能是⼀项从2013年下半年开始提供的新硬件功能。要⽴即开始使⽤ASTC,可从ARM⽹站上获得e ARM R MaliTM OpenGL R ES 3.0 Emulator [Ope ],它与ASTC纹理格式兼容,因此可以使⽤标准台式机GPU来测试基于ASTC的程序。
以ASTC格式加载的纹理和其它压缩纹理格式没有什么不同,但是必须使⽤正确的内部格式。压缩程序输出的⽂件有⼀个数据头,其中包含加载压缩纹理所需的所有内容。
使⽤清单1.1中的数据结构,应⽤程序可以检测ASTC纹理所需的重要信息。可参阅Mail开发⼈员中⼼⽹站以获取源代码⽰例。
质量设置
本⽂已经提到了⼀些⾼级质量设置,但有更精确有针对性的⽅法可以调整压缩器输出的质量,命令⾏压缩程序具有两个主要类型的参数:搜索参数和质量指标。
压缩纹理的算法在很⼤程度上取决于反复的尝试。⽐较多种块分区和边界颜⾊的组合,并使⽤该块的最佳组合。增加搜索参数将⽐较更多组合以到正确的组合,从⽽使算法能够到更好的匹配项,但同时也延长了搜索时间(因此延长了压缩时间)。
plimit是每个块到最好分区之前所能测试的最⼤分区数。
dlimit是⼀个块的PSNR的临界值,以db为单位。如果块尝试的PSNR超过此值,则算法会认为它⾜够好并使⽤该组合,由于算法可能⾸先达到其它限制,因此可能不⼀定达到此PSNR。
oplimit通过⽐较单分区和双分区之间的错误来作为临界值。也就是说,如果双分区错误⽐单分区错误严重得多,则可能就不⾄于去尝试三个或四个分区了。oplimit定义了放弃分区时的错误严重程度。
mincorrel定义了颜⾊系数的相似度,该算法将尝试将其拟合到单个颜⾊平⾯中。该数字越⼩,同⼀平⾯上的颜⾊就越多,因此算法将不会尝试使⽤更⼤数量的分区来测试该块。
bmc是要尝试的块模式的临界值。块模式定义了如何为每个图案使⽤不同的⼆进制模式来对各个颜⾊值进⾏精确的加权。
片章maxiters是针对任何给定分区尝试将颜⾊细化为颜⾊和权重次数的临界值。
可以单独设置这些值,使其在特定⽅向上扩展搜索,例如:
具有许多细微细节的纹理应该具有较⾼的oplimit值,以确保细微的颜⾊变化不会被划分同⼀分区平⾯中。
天津师范学院
具有⾮常随机图案纹理,可能需要搜索更多的分区类型以到合适的纹理。
我们通常会使⽤⼀些质量预设作为默认设置,如表1.3所⽰,利⽤这些参数设置可以在质量和压缩时间之间寻求⼀个平衡。搜索的限制越⼤,算法接受当前块为“⾜够好”的块的“意愿”就越低,花更多的时间到更好的匹配,不过还有另⼀种获得更好匹配结果的⽅法,那就是调整质量指标,改变压缩器判断块质量的因⼦。
通道权重
最简单的质量因⼦是通道权重,使⽤如下命令⾏参数:
-ch <red-weight> <green-weight> <blue-weight> <alpha-weight>
这定义了噪声计算的加权值。例如,参数-ch 1 4 4 1使得绿⾊通道上的错误为任何给定通道上的噪声的四倍。参数 -ch 0.25 1 0.25 0.25具有相同的效果,它仍然会使绿⾊通道中的错误发⽣率⾼四倍,但总体错误率更低。因此更容易获得⾜够好的结果。
使⽤-esw参数结合使得通道权重⼯作的更好。对于没有alpha通道的纹理,swizzle -esw rgb1会使alpha通道饱和,并不在随后的噪声计算中对其计数。
块权重
尽管⼈的视⼒对绿⾊的变化较敏感,⽽对红⾊的变化不敏感,但通道加权的作⽤依然是有限的。
在许多情况下,其它权重也可以改善压缩纹理的质量。其中之⼀是块错误检查,尤其是在⼤⾯积具有复合渐变的纹理上。默认情况下,没有基于块内部错误的检测权重,两个相邻块边界处的纹理像素可能在其⾃⾝纹理像素的误差范围内,但在相邻的位置处具有噪声,这意味着块之间差距⽐较⼤。可以使⽤命令⾏参数解决:
b <weight>
判断块合适性的公式考虑了已经处理过的任何相邻块的边缘。
但是,这仅会使搜索算法⽐其它算法更容易接受具有更好匹配边缘的块,但它可能会以其它⽅式增加噪声。需要注意的是:相邻平滑块对于法线贴图特别有⽤。
比较优势理论
法线权重
当压缩法线贴图或使⽤数据信息⽽⾮颜⾊信息的贴图时,有⼀些参数可以实现多个附加设置。即-normal psnr,-normal percep和-mask。⼀次只能选择其中的⼀个,因为它们是互斥的。
前两种设置针对2通道压缩的法线,它将x和y转换为亮度和alpha,覆盖默认的oplimit和mincorrel,并增加⾓度误差的权重,这在法线贴图中更为重要。-normal percep参数⽐较类似,但权重略有不同,是为了获得更好的感知结果。这些可在图1.5中看到。
这两个⽅法都使⽤了隐含的esw rrrg参数将X和Y转换为亮度和alpha,还具有dsw raz1的内部编码转换,将亮度转换为X,将alpha 转换为Y,并使⽤以下⽅法重构z:

本文发布于:2024-09-22 15:46:45,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/145962.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:压缩   纹理   质量   算法   分区
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议