纹理压缩
纹理数据存储在设备显存(VRAM)中。应避免耗尽显存,否则可能导致浏览器标签页崩溃等问题。
编辑器可通过 Basis 对纹理进行有损压缩,显著降低显存用量。
Basis 是一种超级压缩纹理格式,也是平台无关的有损块压缩格式。运行时可转码为硬件原生格式,支持 ASTC、DXT、ETC2、ETC、PVR 和 ATC,并按此顺序选择可用格式。
以下面的纹理资源为例:
这是一个 512×512 的 JPG,文件为 202 KB。但 JPG 是压缩文件,交给图形引擎后会展开为未压缩 RGB8,包括 mipmap 共占用 1.05 MB 显存。
启用纹理压缩后得到:
显存用量减少到约六分之一。本例使用 Default 质量和 ETC 模式时,下载大小还从 202 KB 降到最低 46 KB。
下面是在 Mac Chrome 中对砖墙纹理的并排比较:
另一个例子是在 Mac Chrome 中比较 PlayCanvas 立方体的 Basis ETC 模式与未压缩版本:
使用 Basis 纹理压缩
纹理导入编辑器后,选中它,在 Inspector 中向下找到 Compression:
- 勾选 BASIS。
- 点击 Import Basis,将 Basis 运行时的 WASM 模块加入项目,只需执行一次。
- 若需要降低压缩伪影,将模式从 ETC(体积较小、质量较低)改为 ASTC(体积较大、质量较高)。
- 压缩法线贴图时,勾选 Normals。
- 调整质量,在文件体积与画质间权衡,较低质量产生更小文件。
- 点击 Compress Basis。
Basis WASM 模块会增加约 253 KB gzip 后的预加载下载量,但相比旧版纹理压缩,通常可以通过纹理体积节省抵消。
移除纹理的 Basis 压缩:
- 取消 BASIS。
- 点击 Compress Basis。
如果项目不再使用 Basis,先移除所有纹理的 Basis 压缩,再删除项目中的 Basis 文件夹。
Basis 限制
PlayCanvas 中的 Basis 压缩有以下限制:
- PVR 只支持正方形且边长为二次幂的纹理,例如 256、512 或 1024。较旧 iOS 设备(A6 及更早芯片,如 iPhone 5 和 5C)及较旧 iOS 版本(13.7 及更早)只支持 PVR。非正方形或非二次幂 Basis 纹理无法转为 PVR,会改用 16 位 565 像素格式,仍能正确显示,但可能占用更多显存。
- Basis 压缩最大支持 4096×4096。更大纹理压缩耗时过长,因此不提供此功能。
旧版纹理压缩
建议尽可能使用 Basis,一个文件即可覆盖所有平台,而且比旧格式更小。我们的测试中,Basis 在画质差异很小的情况下,体积约减少 50%。
旧版纹理格式包括:
- DXT:通常由桌面设备支持。
- PVR:通常由 iOS 设备支持。
- ETC:通常由 Android 设备支持。
使用旧版压缩时,选中纹理,在 Inspector 中找到 Compression:
- 勾选 LEGACY。
- 勾选需要的全部格式。
- 点击 Compress Legacy。
要移除一种或多种格式:
- 取消勾选要移除的格式。
- 点击 Compress Legacy。
从旧版压缩迁移到 Basis
如果项目已使用旧版压缩,希望改为 Basis:
- 移除所有旧版纹理格式。
- 启用并使用 Basis。
