KTX简介:
KTX (Khronos Texture) 是一种纹理存储格式,大部分移动设备的 GPU 均支持这种格式。可以有效降低设备的显存占用,提高运行效率和稳定性。
ktx是容器,astc是算法。ktx存的图像可以是BCn,astc,etc,astc存储的结果也可以放在ktx或者dds,或者自己随便弄个raw buffer存。 如果网络流式传输完全不需要这些gpu用的压缩啊(只需要体积减少)有压缩比更高还无损的比如zip(纹理压缩体积会变大,这个是给你GPU读取更快的算法) 这个是给你GPU读取更快的算法.
纹理压缩与图像压缩的内存对比
纹理压缩为什么存储体积变大,在显存占的显存是否变大: 只是传输体积会变大(网络传输或者磁盘体积变大),但是特别注意在GPU的内存会变小, 传输体积变大是因为JPG和PNG这种本来就设计有压缩, 传统图像只是因为编码减少了传输体积,还是要decode的!压缩纹理也可以GZIP但效果没那么好所以通常纹理压缩了的不再进行像JPG/png压缩,然而JPG/PNG decode后仍然是RGBA8/RGBA4/RGB24的,所以最终实际占据的内存和显存更多,decode也需要时间, 压缩纹理不需要再CPU做decode, 所以你文件体积多大在显存里就是多大 。容易混淆了两个"内存"(总结一下就是jpg\png那种是解压后在GPU采样得到的比纹理压缩的体积相对大) ;压缩纹理最大的问题就是有损,在UI这种情况可能不太适用.
Basis Universal 超压缩的支持,以实现可靠,无处不在的GPU纹理分布。 Basis Universal是Binomia l开发的一种压缩技术,可产生紧凑的纹理,这些纹理可以在运行时有效地转码为各种GPU压缩纹理格式。除此之外,Khronos发布了KHR_texture_basisu 扩展,使glTF可以包含KTX 2.0纹理,从而产生了可普遍发布的glTF资产,这些资产减小了下载尺寸,并使用了本地支持的纹理格式来减小GPU内存大小并提高了在各种设备和平台上的渲染速度。最后,Khronos发布了开源工具和代码转换器,以及开发人员和艺术家指南,以支持并鼓励在glTF生态系统中广泛使用KTX 2.0纹理,包括已经集成了支持功能的three.js,Babylon.js和Gestaltor查看器。
纹理贴图通常使用JPG或PNG压缩图像来传输具有减小的文件大小的纹理。 但是,这些格式不能直接由GPU处理,必须在GPU内存中解压缩为完整大小的图像,从而消耗宝贵的内存空间和带宽,并导致较差的渲染性能和高功耗,这在移动设备上尤其成问题。 GPU压缩的纹理格式可实现紧凑的内存纹理,并具有优化的内存访问,可实现更快,更高效的渲染。 但是,在分布广泛的glTF资产中使用GPU纹理格式是不切实际的,因为高度分散的GPU纹理格式格式(与硬件有关所以定义一种中间的格式),会使它们无法在许多目标设备上使用。
Binomial的Basis Universal压缩技术通过定义一种“通用”压缩纹理格式来解决此问题,该格式可以在运行时有效地转码为目标设备上本机支持的GPU格式。 Basis Universal为开发人员提供了两种压缩选项,这些选项将Khronos定义的ETC1和ASTC GPU纹理格式的选定模式与RDO编码和基于LZ的超压缩相结合,以实现紧凑的纹理文件尺寸。 与JPEG和PNG纹理相比,ETC1S模式可以实现更小的传输和内存大小。 与ETC1S相比,UASTC模式可提供更高质量的纹理,特别适用于法线贴图,同时仍可实现较小的文件大小和显着的内存节省。
ktx 有很多种格式,如 astc, dxt, pvrtc, etc1,etc2