egret-docs-master/Engine2D/bitmapTexture/ktx/README.md

82 lines
4.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## KTX 纹理压缩使用说明
### 一.关于 KTX
KTX (Khronos Texture) 是一种纹理存储格式,大部分移动设备的 GPU 均支持这种格式。可以有效降低设备的显存占用,提高运行效率和稳定性。
* 关于 KTX 的具体信息可以参考下述2个文档
* [KTX 描述说明](https://www.khronos.org/opengles/sdk/tools/KTX/)
* [KTX 文件格式说明](https://www.khronos.org/opengles/sdk/tools/KTX/file_format_spec/)
![](p1.png)
如上图所示,第一步我们先把普通的 png\jpg 图片,转换成 `ios` 系统支持的 PVRTC 和安卓系统支持的 `ETC1` 格式的纹理。第二步再把纹理打包为 KTX 格式。
**ktx 有很多种格式,如 astc, dxt, pvrtc, etc1etc2。白鹭引擎在 iOS 平台只支持 pvrtc, 安卓平台只支持 etc1**
我们制作了一个 ktx 转换工具:[下载地址和说明文档](../ktxtool/README.md)
也可以使用其他的转换工具:
- [PowerVRSDK](https://www.imgtec.com/developers/powervr-sdk-tools/)
- [Mali_Texture_Compression_Tool](https://developer.arm.com/tools-and-software/graphics-and-gaming/graphics-development-tools/mali-texture-compression-tool)
- [texture-compressor](https://www.npmjs.com/package/texture-compressor)
### 二.如何使用 KTX
**[KTX 使用示例下载](http://tool.egret-labs.org/DocZip/engine/KTXHello_v2.zip)**
上面是一个 `HelloWorld` 的示例项目,其中只把 `egret_icon.png` 这个图片转换为 `KTX` 格式使用。
#### 1.资源说明
`resource/assets` 目录下,`egret_icon` 有如下几种格式,引擎会根据不同平台来读取不同的格式:
```
egret_icon.png
egret_icon.pvr.ktx
egret_icon_alpha.ktx
egret_icon.ktx
```
* `egret_icon.png`PC 平台使用。
* `egret_icon.pvr.ktx`pvr 格式的 ktxiOS 平台使用
* `egret_icon.ktx`(etc1 格式的颜色纹理) 和 `egret_icon_alpha.ktx`(alpha遮罩纹理):安卓平台使用。**注:也可以把 2 个 ktx 文件合成一个文件,具体方法请参考 [高级示例 v1.3](http://tool.egret-labs.org/DocZip/engine/CompressedTextureDemo_1.3.zip),该示例我们后续还会更新完善**
#### 2.代码说明
![](p2.png)
`Main.ts` 中的 `loadResource` 方法里,我们加了几行代码。
* `ignoreResource` 方法表示只有 `egret_icon.png` 这个图片才会进入 `ktx` 的使用流程,其他资源全部忽略
* `CompressTextureProcessor` 是加载资源的处理器,我们把它注册到了 `AssetsManager` 资源管理器中。具体的处理逻辑,请看示例中的代码。
#### 3.显示效果
![](p3.png)
为了更容易看出效果,我们把 `egret_icon.png` 换成了另外一张白鹭小鸟,而 `ktx` 格式还是标准 `HelloWorld ` 里的白鹭图标。
从上图中很容易看出,左侧是 `PC` 浏览器中的显示效果,因为不支持 `ktx` 格式,显示的是 `png` 图片。而右侧的 `iOS` 手机浏览器,因为支持 `ktx` 格式,显示的是 `pvr` 纹理格式的图片。
#### 4.远程加载 KTX 资源
您可以使用 `AssetsManager` 自动远程加载资源。也可以使用 `URLLoader` 自己控制资源加载。
* 注意:
* 因为 ktx 不是普通的图片格式,不能使用 ImageLoader 加载。
* URLLoader.dataFormat 要设置成 BINARY 二进制格式
使用 `URLLoader` 加载和显示 ktx 纹理 [可以参考此示例](http://tool.egret-labs.org/DocZip/engine/KTXURLLoader_v1.0.zip)
#### 5.KTX 性能测试
[纹理提交速度对比测试 v1.3](http://tool.egret-labs.org/DocZip/engine/ktx/CompressedTexturePerformance_v1.3.zip) 点击屏幕,可以对比测试提交 png 与 ktx 纹理的耗时和GPU占用等项目详细说明请看 demo 里的 readme 说明文档。
机型|平台|3000张ktx内存占用|3000张png内存占用
-----------|--------|----|----|----|----
华为P8|WebView|380M|1G
#### 6.各小游戏平台对 `KTX` 纹理支持的状况:
系统/平台 | 微信小游戏 | 百度小游戏 | 小米快游戏 | OPPO 小游戏| vivo 小游戏
------------- | ------------- | -------------| -------------| -------------| -------------
Android ETC1 | ✅ | ✅| ✅| ✅| ✅
iOS PVRTC | ✅ | ❌ | ❌ | ❌ | ❌