压缩纹理¶
在 Kanzi 中,您可以使用 ASTC 和 ETC 算法压缩纹理,也可以使用预压缩的 DXT 纹理。Kanzi 还支持 Basis Universal,这是一种超压缩的 LDR/HDR GPU 纹理交换系统。
如果您的应用程序尝试从内存中读取的数据量超出内存的处理能力,读取内存就会成为应用程序的性能瓶颈。如果您的目标硬件支持其中任何一种压缩方法,请使用纹理压缩来降低内存带宽并提高应用程序的性能。使用现代 ASTC 算法,您可以获得相对最小的文件大小和最佳的图像质量。
性能最佳的压缩级别取决于您的目标设备。高压缩级别使用更多的CPU,但使用较少的内存带宽,而低压缩级别使用较少的CPU,但使用更多的内存带宽。
Kanzi 应用程序将压缩纹理直接发送到 GPU,减少了交换数据的量,并且在运行时不需要在 CPU 端进行预处理(例如,加载 libJPEG 或 libPNG)。
例如,一个未解包的 256x256 像素的 RGB 纹理将使用 196 kb 内存(256 * 256 * 3 字节)。当压缩时:
使用 ASTC,如果块大小为 8 x 8,纹理使用 16 kb (((256/8)^2)*16)/1024。如果块大小为 12 x 12,纹理使用 8 kb。
使用 ETC,该纹理使用 32 kb (256 * 256 / 2)。
如果您的目标硬件不支持上述任何压缩算法,则在某些情况下,raw 图像格式的传输速度会比任何压缩算法都快。尤其是在处理单个小图像时,这一点尤为明显。
如果您的目标硬件不支持所选的纹理压缩算法,当您在目标设备上运行 Kanzi 应用程序时,Kanzi 会在日志中打印一条警告消息。Kanzi 会将您使用目标硬件不支持的压缩纹理格式的表面涂成黑色。
因为 OpenGL 期望 DXT 纹理数据从底部行开始,所以压缩 DXT 文件时需垂直翻转。请注意,您可以在您的 Kanzi 应用程序中使用 DXT 文件,但由于 GPU 的限制,DXT 文件在 Windows 仿真中不受支持。请参阅 导入图像。
Kanzi Studio 在您创建 kzb 文件时压缩图像,但您也可以手动压缩它们。请参阅 手动预处理图像。
小技巧
当 Kanzi Studio 压缩图像时,默认情况下会使用您计算机的所有可用 CPU 资源。要在 Kanzi Studio 压缩多个图像时释放 CPU 资源以供其他应用程序使用,请选择 Edit > User Preferences,并在 Properties 选项卡中调整 Images to compress in parallel 设置的值。
Images to compress in parallel 设置限制了 Kanzi Studio 在预处理多个图像时使用的逻辑核心数量。您计算机中的逻辑核心数量决定了 Maximum 的值。
使用 ASTC 算法¶
如果您的目标硬件支持 ASTC 算法,请使用 ASTC 算法以获得最佳效果。ASTC 算法与 ETC 算法相比,创建的文件更小,图像质量更佳。
要使用 ASTC 算法:
在 Library 的 Kanzi Studio 中,选择 Resource Files > Images,然后选择您要应用压缩的图像。
在 Properties 中,将 Target Format 属性设置为 ASTC。
在 Properties 集中:
ASTC Profile 用于选择压缩颜色配置文件。
LDR linear、LDR sRGB、HDR + LDA A 和 HDRA 指的是压缩颜色配置文件:
LDR linear 使用线性 LDR 颜色配置文件。
LDR sRGB 使用 sRGB LDR 颜色配置文件。
HDR + LDR A 使用 HDR 颜色配置文件,针对具有 LDR 阿尔法通道的 HDR RGB 进行了调整。
HDRA 使用 HDR 颜色配置文件,针对 HDR RGBA 进行了调整。
ASTC Block Size 为您要用于压缩图像的像素块大小。
在 ASTC 中,一个压缩块的大小始终为 128 位。块中的像素越少,压缩图像的图像质量越好,但会生成更大的文件。每块 4x4 像素是支持的最大且最佳外观的值,而每块 12x12 像素则生成最小的文件大小输出。
ASTC Compression Speed 到压缩图像所需的时间。
Very fast、Fast、Medium、Thorough 和 Exhaustive 指的是压缩图像所需的时间和图像质量,而不是压缩图像的文件大小或解压时间:
Very fast 压缩图像所需的时间最少。
Exhaustive 压缩图像所需的时间最长,并且产生最佳质量。
若要速度快并且质量良好,则使用快速压缩,若要获得更好的质量,则使用较慢的压缩速度。
例如,为了获得最佳最终结果,请使用 Exhaustive。在开发期间,Very fast 是最有用的。
使用 ETC 算法¶
要使用 ETC 算法:
在 Library 的 Kanzi Studio 中,选择 Resource Files > Images,然后选择您要应用压缩的图像。
在 Properties 中,将 Target Format 属性设置为您要使用的 ETC 压缩:
ETC fast、medium 和 slow 指的是图像压缩的速度和图像质量,而不是生成的大小或解压时间。Slow 返回最佳图像质量。
为取得使用 ETC1 压缩方案的最佳最终结果,请使用 ETC slow perceptual。
ETC Perceptual 指的是基于人类视觉系统的颜色亲和性,强调绿色通道相对于红色和蓝色通道的作用。
当在开发期间使用 ETC1 压缩方案时,ETC fast 是最有用的。
要使用 ETC2 压缩方案,请参阅 ETC2。
要设置 ETC2 压缩质量,使用 Effort 属性。
Effort 的值对应于压缩时间和图像质量,而不是生成的文件大小或解压缩时间。要获得最佳图像质量,请将 Effort 设置为 100。在开发期间,0 最为实用,因为它的压缩时间最短。
ETC2 with alpha 以对具有阿尔法通道的图像使用 ETC2 压缩方案。
使用 Basis Universal 算法¶
要使用 Basis Universal 算法:
在 Library 的 Kanzi Studio 中,选择 Resource Files > Images,然后选择您要应用压缩的图像。
在 Properties 中,将 Target Format 属性设置为 Basis Universal。
在 Properties 集中:
Basis Universal Texture Mode 用于选择纹理模式。
UASTC LDR、UASTC HDR 4x4、UASTC HDR 6x6 和 ETC1S 表示纹理模式:
UASTC LDR 使用类似 ASTC 4x4 的自定义格式,该格式专为非常快速地转码为其他 LDR 纹理格式而设计,质量高。
UASTC HDR 4x4 使用标准 ASTC HDR 4x4 纹理数据,但经过约束,可非常快速地转码为 BC6H。
UASTC HDR 6x6 使用标准 ASTC HDR 6x6。
ETC1S 使用 ETC1 的超压缩子集,该子集专为非常快速地转码为其他 LDR 纹理格式而设计,质量为低到中等,但压缩率高。
UASTC Encoding Level 用于选择 UASTC 4x4 压缩级别。
ETC1S Encoding Level 用于选择 ETC1S 压缩级别。
手动预处理图像¶
Kanzi Studio 在您创建 kzb 文件时压缩图像,但您也可以手动压缩它们。要手动预处理图像,在 Library > Resource Files > Images 中,右键单击一个或多个您要预处理的图像,然后选择 Preprocess images。
小技巧
当 Kanzi Studio 压缩图像时,默认情况下会使用您计算机的所有可用 CPU 资源。要在 Kanzi Studio 压缩多个图像时释放 CPU 资源以供其他应用程序使用,请选择 Edit > User Preferences,并在 Properties 选项卡中调整 Images to compress in parallel 设置的值。
Images to compress in parallel 设置限制了 Kanzi Studio 在预处理多个图像时使用的逻辑核心数量。您计算机中的逻辑核心数量决定了 Maximum 的值。