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

38 lines
2.5 KiB
Markdown
Raw Normal View History

2024-06-19 13:32:32 +08:00
## KTX 纹理压缩常见问题
#### 我使用的图片转换成 KTX 后在 iOS 手机上显示变形了
答:因为 iOS 使用的 ktx 是 PVRTC 格式的。PVRTC 必须是正方形边长为2的N次方如128、256、512`否则会强制转换成正方形,显示出来就变形了`。建议把资源打包成正方型的 SpriteSheet 纹理集后,再转换成 ktx 格式使用。
正方形纹理使用示例,[可以参考此Demo](http://tool.egret-labs.org/DocZip/engine/KTXSquare.zip)
![](p1.png)
#### 为什么图片转换成 KTX 后体积变大了?会占用更多的内存影响游戏性能吗?
##### 答:
* PVRTC 格式的 ktx因为会转换成正方形所以体积会变大。例如原图尺寸为 228x380 的图片,转换成 PVRTC 的 ktx 后,尺寸为 512x512
* ETC1 格式的 ktx因为会转换成纹理 ktx 和 alpha 通道 ktx所以体积会变大。
* 文件体积变大并不会占用更多的内存。ktx 是一种 GPU 能直接读取并显示的格式,使得图像无需解压即可进行渲染,节约大量的内存。
#### 原始资源加上转换后的 ktx 资源,包体变的很大怎么处理?
##### 答:
* 我们建议初始包体里只放普通的 png、jpg 图片,然后根据设备信息远程加载适合 该平台使用的 ktx 资源。
* 不过 ktx 文件体积大,远程加载资源的时候会慢一些,这个就需要开发者权衡资源加载时间和游戏性能之间的利弊了。
* 服务器可以开启 gzip ktx 压缩后的体积会很小。[或者直接把 ktx 打包成 zip 使用](http://tool.egret-labs.org/DocZip/engine/ktx/ktx_zip.zip)
#### etc1 的 ktx 和 png ,哪种格式的帧频更快?
png 在 shader 中调用一次 texture2D ,而 etc1 格式的 ktx 会多调用一次用于获取 alpha 遮罩,所以在 benchMark 极限测试下会有性能损失。[etc1 ktx 和 png 的帧频对比 benchmark](http://tool.egret-labs.org/DocZip/engine/ktx/KTX_VS_PNG.zip)
#### KTX 文件在 web 服务器上用什么 MIME 映射
KTX 是一种二进制格式MIME 设置成 `application/octet-stream
`
#### Egret 发布的原生游戏,是否支持 KTX
iOS 和 Android 的 Egret Naive 原生项目,都已经支持 KTX
#### 游戏的资源很多显存不够用了KTX 是否是唯一的解决方式:
答:请确保您已经在游戏中完善的进行了资源管理,例如使用 `RES.destroyRes()` 方法销毁不用的资源。如果显存还是过大,可以尝试使用 ktx。