纹理优化三-KTX纹理压缩
KTX (Khronos Texture) 是一种纹理存储格式,大部分移动设备的 GPU 均支持这种格式。可以有效降低设备的显存占用,提高运行效率和稳定性。ktx是容器,astc是算法。ktx存的图像可以是BCn,astc,etc,astc存储的结果也可以放在ktx或者dds,或者自己随便弄个raw buffer存。 如果网络流式传输完全不需要这些gpu用的压缩啊(只需要体积减少)有压缩比更高还无
KTX简介:
KTX (Khronos Texture) 是一种通用的文件格式,用于存储和分发压缩或未压缩的纹理数据。KTX它是由Khronos Group开发,支持OpenGL、OpenGL ES和WebGL等API。简单来说KTX不是一种压缩算法,而是一种容器格式,它可以包含使用各种压缩技术(如ASTC、ETC、DXT/S3TC等)压缩的纹理数据!KTX可用于存储利用ASTC、BCn、ETC等不同压缩技术压缩后的纹理。这些压缩技术(ASTC、BCn、ETC)则是实现具体压缩算法的方式,每种算法都有其独特的特征和适用场景。
如果网络流式传输完全不需要这些gpu用的压缩啊(只需要体积减少)有压缩比更高还无损的比如zip(纹理压缩体积会变大,这个是给你GPU读取更快的算法) 这个是给你GPU读取更快的算法。就跟我之前的文章说过纹理压缩与图片压缩的区别。
压缩算法的区别:
ASTC (Adaptive Scalable Texture Compression)
-
ASTC是一种纹理压缩格式,由ARM公司提出并得到Khronos Group的支持。它被用于OpenGL、OpenGL
ES和Vulkan等API。 -
ASTC的主要优势是其高度可配置的块大小(4x4至12x12像素),压缩都是块压缩比如最小的2*2,它允许开发者根据需要在图像质量和压缩比率之间进行权衡。
-
ASTC支持更高级的颜色压缩和alpha通道压缩,并且适用HDR内容。
BCN (Block Compression, previously known as DXTn or S3TC)
- BCN(DXT1、DXT3、DXT5等)是一系列硬件友好的纹理压缩格式,由S3
Graphics开发,并成为DirectX的一部分,也被OpenGL广泛支持。
我之前的dds文章之前有介绍
ETC (Ericsson Texture Compression)
- ETC是由Ericsson公司开发的一种压缩格式,用于OpenGL ES和WebGL,主要用于安卓等移动端,ETC1仅支持RGB格式的压缩,没有alpha通道。后来推出的ETC2提供了完整的RGB和RGBA支持,成为了OpenGL ES 3.0标准的一部分。
纹理压缩与图像压缩的内存对比
纹理压缩为什么存储体积变大,在显存占的显存是否变大: 只是传输体积会变大(网络传输或者磁盘体积变大),但是特别注意在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 目前包含两种可以快速转码为任何 GPU 支持的格式的格式:LZ/ETC1S(结合了块压缩和超级压缩)和 UASTC(一种块压缩格式)。 LZ/ETC1S 以外的格式可以使用 Zstd 和 ZLIB 进行超级压缩。 Basis Universal为开发人员提供了两种压缩选项,这些选项将Khronos定义的ETC1和ASTC GPU纹理格式的选定模式与RDO编码和基于LZ的超压缩相结合,以实现紧凑的纹理文件尺寸。 与JPEG和PNG纹理相比,ETC1S模式可以实现更小的传输和内存大小。 与ETC1S相比,UASTC模式可提供更高质量的纹理,特别适用于法线贴图,同时仍可实现较小的文件大小和显着的内存节省。
ktx 有很多种格式,如 astc, dxt, pvrtc, etc1,etc2
纹理优化:
更关键的: Khronos 还发布了 KHR_texture_basisu 扩展,使 glTF 能够包含 KTX 2.0 纹理,从而产生可普遍分发的 glTF 资源,从而减少下载大小并使用本机支持的纹理格式来减少 GPU 内存大小并提高不同设备和平台上的渲染速度。
KHR_texture_basisu
Basis Universal 提供两种压缩选项。 ETC1S 模式可实现比 JPEG 和 PNG 纹理显着更小的传输和 GPU 内存大小。 UASTC 模式可提供比 ETC1S 更高质量的纹理,同时仍可显着节省内存。单击下图进行更高分辨率的比较。
添库与开发工具
参考资料:
更多推荐
所有评论(0)