跳到主要内容

纹理压缩

纹理数据存储在设备显存(VRAM)中。应避免耗尽显存,否则可能导致浏览器标签页崩溃等问题。

编辑器可通过 Basis 对纹理进行有损压缩,显著降低显存用量。

Basis 是一种超级压缩纹理格式,也是平台无关的有损块压缩格式。运行时可转码为硬件原生格式,支持 ASTC、DXT、ETC2、ETC、PVR 和 ATC,并按此顺序选择可用格式。

以下面的纹理资源为例:

砖墙纹理

这是一个 512×512 的 JPG,文件为 202 KB。但 JPG 是压缩文件,交给图形引擎后会展开为未压缩 RGB8,包括 mipmap 共占用 1.05 MB 显存。

启用纹理压缩后得到:

Basis 压缩结果

显存用量减少到约六分之一。本例使用 Default 质量和 ETC 模式时,下载大小还从 202 KB 降到最低 46 KB。

下面是在 Mac Chrome 中对砖墙纹理的并排比较:

砖墙纹理压缩对比

另一个例子是在 Mac Chrome 中比较 PlayCanvas 立方体的 Basis ETC 模式与未压缩版本:

PlayCanvas 立方体压缩对比

使用 Basis 纹理压缩​

纹理导入编辑器后,选中它,在 Inspector 中向下找到 Compression:

  1. 勾选 BASIS。
  2. 点击 Import Basis,将 Basis 运行时的 WASM 模块加入项目,只需执行一次。
  3. 若需要降低压缩伪影,将模式从 ETC(体积较小、质量较低)改为 ASTC(体积较大、质量较高)。
  4. 压缩法线贴图时,勾选 Normals。
  5. 调整质量,在文件体积与画质间权衡,较低质量产生更小文件。
  6. 点击 Compress Basis。
启用 Basis 纹理压缩

Basis WASM 模块会增加约 253 KB gzip 后的预加载下载量,但相比旧版纹理压缩,通常可以通过纹理体积节省抵消。

移除纹理的 Basis 压缩:

  1. 取消 BASIS。
  2. 点击 Compress Basis。
禁用 Basis 纹理压缩

如果项目不再使用 Basis,先移除所有纹理的 Basis 压缩,再删除项目中的 Basis 文件夹。

删除 Basis 模块

Basis 限制​

PlayCanvas 中的 Basis 压缩有以下限制:

  1. PVR 只支持正方形且边长为二次幂的纹理,例如 256、512 或 1024。较旧 iOS 设备(A6 及更早芯片,如 iPhone 5 和 5C)及较旧 iOS 版本(13.7 及更早)只支持 PVR。非正方形或非二次幂 Basis 纹理无法转为 PVR,会改用 16 位 565 像素格式,仍能正确显示,但可能占用更多显存。
  2. Basis 压缩最大支持 4096×4096。更大纹理压缩耗时过长,因此不提供此功能。

旧版纹理压缩​

建议尽可能使用 Basis,一个文件即可覆盖所有平台,而且比旧格式更小。我们的测试中,Basis 在画质差异很小的情况下,体积约减少 50%。

旧版纹理格式包括:

  • DXT:通常由桌面设备支持。
  • PVR:通常由 iOS 设备支持。
  • ETC:通常由 Android 设备支持。

使用旧版压缩时,选中纹理,在 Inspector 中找到 Compression:

  1. 勾选 LEGACY。
  2. 勾选需要的全部格式。
  3. 点击 Compress Legacy。
启用旧版纹理压缩

要移除一种或多种格式:

  1. 取消勾选要移除的格式。
  2. 点击 Compress Legacy。
禁用旧版纹理压缩

从旧版压缩迁移到 Basis​

如果项目已使用旧版压缩,希望改为 Basis:

  1. 移除所有旧版纹理格式。
  2. 启用并使用 Basis。
从旧版压缩迁移到 Basis