压缩纹理

在 Kanzi 中,您可以使用 ASTC、ATC、ETC 和 PVRTC 算法来压缩纹理,以及预压缩的 DXT 纹理。

如果您的应用程序尝试从内存中读取超过内存可处理的数据量,读取内存将成为应用程序的性能瓶颈。如果您的目标硬件支持这些压缩方法中的任何一种,使用纹理压缩来减少内存带宽并提高应用程序的性能。您可以使用现代 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)。

../../_images/compressing-textures.svg

如果您的目标硬件不支持上述任何压缩算法,则在某些情况下,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 的值。

../../_images/images-to-compress-in-parallel.png

使用 ASTC 算法

如果您的目标硬件支持 ASTC 算法,请使用 ASTC 算法以获得最佳效果。ASTC 算法创建的文件更小,并且比旧的 ATC、ETC 和 PVRTC 算法产生更好的图像质量。

您可以对图像和立方体贴图纹理使用 ASTC 压缩。

要对图像使用 ASTC 算法:

  1. 在 Library 的 Kanzi Studio 中,选择 Resource Files > Images,然后选择您要应用压缩的图像。

  2. 在 Properties 中,将 Target Format 属性设置为 ASTC。

    ../../_images/target-format-astc-compression.png
  3. 在 Properties 集中:

    • ASTC Block Size 为您要用于压缩图像的像素块大小。

      在 ASTC 中,一个压缩块的大小始终为 128 位。块中的像素越少,压缩图像的图像质量越好,但会生成更大的文件。每块 4x4 像素是支持的最大且最佳外观的值,而每块 12x12 像素则生成最小的文件大小输出。

      ../../_images/astc-block-size.png
    • ASTC Compression Speed 到压缩图像所需的时间。

      Very fast、Fast、Medium、Thorough 和 Exhaustive 指的是压缩图像所需的时间和图像质量,而不是压缩图像的文件大小或解压时间:

      • Very fast 压缩图像所需的时间最少。

      • Exhaustive 压缩图像所需的时间最长,并且产生最佳质量。

      若要速度快并且质量良好,则使用快速压缩,若要获得更好的质量,则使用较慢的压缩速度。

      例如,为了获得最佳最终结果,请使用 Exhaustive。在开发期间,Very fast 是最有用的。

      ../../_images/astc-compression-speed.png
    • ASTC sRGB Variant 到:

      • False 使用线性空间作为图像格式。这是最常见的用例。

      • True 要使用图像格式的 sRGB 色彩空间。这会在压缩之前将图像从 sRGB 色彩空间转换为线性空间,然后在 GPU 中解压缩后再转换回 sRGB 色彩空间。

      ../../_images/astc-srgb-variant.png

要对立方体贴图纹理使用 ASTC 压缩,请配置立方体贴图纹理的图像属性。Kanzi Studio 会将 ASTC 压缩设置应用于立方体贴图的全部六个面。

有关对立方体贴图纹理使用 ASTC 压缩的信息,请参阅 使用立方体贴图纹理。

使用 ATC 算法

要使用 ATC 算法:

  1. 在 Library 的 Kanzi Studio 中,选择 Resource Files > Images,然后选择您要应用压缩的图像。

  2. 在 Properties 中,将 Target Format 属性设置为 ATC。

    ../../_images/target-format-atc-compression.png
  3. 将 ATC Compression Scheme 属性设置为:

    • Explicit alpha。RGBA 图像,其中每个像素的 alpha 分量是显式的,数据压缩到 pixel_count / 1,压缩比为 1:4。

    • Interpolated alpha。RGBA 图像,其中 alpha 分量在像素之间插值,数据压缩到 pixel_count / 1,压缩比为 1:4。

    • No alpha。RGB 图像,数据压缩到 pixel_count / 2,压缩比为 1:6。

    ../../_images/atc-compression-scheme.png

使用 ETC 算法

要使用 ETC 算法:

  1. 在 Library 的 Kanzi Studio 中,选择 Resource Files > Images,然后选择您要应用压缩的图像。

  2. 在 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 压缩方案处理带有 alpha 通道的图像。

    ../../_images/target-format-etc-compression.png ../../_images/etc2-compression-effort.png

使用 PVRTC 算法

PVRTC 算法最适合照片级真实感纹理。

Kanzi 支持根据 PVRTC1 和 PVRTC2 方案进行 PVRTC 压缩。

PVRTC2 比 PVRTC1 具有更高的质量,特别是在需要锐利 alpha 过渡的纹理方面,但并非所有 PowerVR 硬件都支持。此外,只有 Imagination Technologies 硬件或使用开发仿真器的桌面平台支持 PVRTC 压缩。

备注

使用 PVRTC 压缩纹理时,要获得正确的结果,纹理必须是正方形纹理,且其大小必须是二的幂。

要使用 PVRTC 算法:

  1. 在 Library 的 Kanzi Studio 中,选择 Resource Files > Images,然后选择您要应用压缩的图像。

  2. 在 Properties 中,将 Target Format 属性设置为 PVRTC。

    ../../_images/target-format-pvrtc.png
  3. 在 Properties 集中:

    • PVRTC Bit Depth 到以下任一项:

      • 2 bits/pixel 会导致纹理更小,但质量较低。

      • 4 bits/pixel 会导致更大但质量更高的纹理。使用 4 bits/pixel 位深度时,纹理文件的大小是 2 bits/pixel 纹理的两倍,但它会产生更高质量的纹理。

    • PVRTC Encoding Quality 到 Fastest、Fast、Normal、High 或 Best。

      这些值对应于图像的压缩时间和质量,而不是最终的大小或解压缩时间。要获得最佳最终结果,请使用 Best。在开发期间,Fastest 是最有用的。

    • PVRTC Compression Scheme 到 PVRTC1 或 PVRTC2。两种方案都支持 RGB 和 RGBA 纹理。Kanzi 会自动对包含 alpha 通道的所有图像使用 RGBA。

    • Premultiply Alpha。选择 True 如果您想在具有 alpha 通道的图像中将 alpha 通道预乘到颜色通道中,否则选择 False。选择 Project default 如果您想使用 Kanzi Studio 项目属性 Use Premultiplied Alpha by Default 来控制此属性的值。请参阅 配置 Kanzi Studio 项目。

      ../../_images/pvrtc-settings.png

手动预处理图像

Kanzi Studio 在您创建 kzb 文件时压缩图像,但您也可以手动压缩它们。要手动预处理图像,在 Library > Resource Files > Images 中,右键单击一个或多个您要预处理的图像,然后选择 Preprocess images。

../../_images/preprocess-images.png

小技巧

当 Kanzi Studio 压缩图像时,默认情况下会使用您计算机的所有可用 CPU 资源。要在 Kanzi Studio 压缩多个图像时释放 CPU 资源以供其他应用程序使用,请选择 Edit > User Preferences,并在 Properties 选项卡中调整 Images to compress in parallel 设置的值。

Images to compress in parallel 设置限制了 Kanzi Studio 在预处理多个图像时使用的逻辑核心数量。您计算机中的逻辑核心数量决定了 Maximum 的值。

../../_images/images-to-compress-in-parallel.png

另请参阅

调整数据大小

并行加载资源

使用 mipmap

过滤纹理

使用图块图集

排除应用程序性能问题

图像 (Images)

配置 Kanzi Studio 项目