mirror of
https://github.com/galacean/engine.git
synced 2026-05-19 19:46:19 +08:00
2.2 KiB
2.2 KiB
order, title, type, group, label
| order | title | type | group | label |
|---|---|---|---|---|
| 4 | 纹理压缩 | 图形 | 纹理 | Graphics/Texture |
KTX2(Khronos Texture Container version 2.0) 是 Khronos 推出最新的纹理压缩方案,Galacean 自 1.1 版本开始已经支持。KTX2 会根据设备平台支持运行时转码到对应格式的压缩纹理(BC/PVRTC/ETC/ASTC)。
使用
在引擎中,直接使用 resourceManager 加载即可:
engine.resourceManager.load("xxx.ktx2");
// 或
engine.resourceManager
.load<Texture2D>({
type: AssetType.KTX2,
url: "xxx.ktx2"
})
.then((tex) => {
material.baseTexture = tex;
});
glTF 中使用 ktx2 需要包含 KHR_texture_basisu 扩展。
KTX2 的生成可以使用:
- toktx
- basisu
编辑器
编辑器在项目打包时,可以配置选项生成 KTX2,可以参考『项目发布』文档。项目导出是全局的配置,也可以独立给不同的纹理资源配置不同的压缩格式。在编辑器的纹理面板下勾选 overwrite 可以覆盖全局配置:
- ETC1S 尺寸小,内存极小,但是质量较低,适合 albedo, specular 等贴图
- UASTC 尺寸大,质量高,适合 normal 这类贴图
兼容性
需要特别注意的是:
-
KTX2 转码使用到了 WebAssembly 技术,需要保证使用 Chrome 57+,和 iOS 11.3+(11.0 ~ 11.2.以下的 WebAssembly 存在 bug)
-
引擎会默认开启 worker 解析 KTX2 文件,但在 IOS 16 以下系统在通过 worker 加载必要的 KTX2 解析文件时会概率发生无返回的情况,此时可以通过 IOS 不走 worker 绕过去:
// 判断 IOS 系统
const isIOS = SystemInfo.platform === Platform.IPhone || SystemInfo.platform === Platform.IPad;
// 将 IOS 环境下的 worker 数量设置为 0
webGlEngine.create({ canvas: "canvas", ktx2Loader: { workerCount: isIOS ? 0 : 4 } });