3分钟认识KTX2纹理

作者:游梦

图片与纹理区别

日常沟通中通常把图片与纹理混为一谈,实际在图形学中,它俩是严格意义上的两个对象,主要有以下两个方面的区别:

文件格式:

图片:JPG、JPEG、PNG、bmp、webp、SVG等常见格式

纹理:ETC(安卓)、DXT(Windows)、PVRTC(VR设备)、ASTC(跨平台)、Basis Universal(跨平台)

而常见的纹理文件如KTX、KTX2、DDS等,只是纹理存储介质俗称纹理容器,本文主要讲解KTX2纹理。

(图片生命周期,图源:PVRTexTool现支持KTX™2.0和 Basis Universal超级压缩_ktx2压缩-CSDN博客

使用方式:
图片:先从硬盘加载到内存中,通过解析成GPU可识别的纹理再供着色器程序使用
纹理:直接供着色器程序使用

纹理格式

在生产过程中见不到非压缩纹理,因为图形学中带宽与内存占用是一个引擎必须考虑的点,出于性能考虑所以通常会对图片与纹理进行压缩用于节省带宽与内存。

纹理压缩算法

纹理压缩算法主要用于减少纹理图像在计算机图形处理中所占用的存储空间,‌同时保持或接近原始图像的质量。‌这些算法通过不同的技术来压缩纹理数据,‌从而在保证图像质量的前提下,‌提高图形渲染的效率和性能。‌以下是一些常见的纹理压缩算法及其特点:‌

  1. DXT系列:‌包括DXT1、‌DXT2、‌DXT3、‌DXT4和DXT5,‌这些算法主要用于PC游戏和图形应用。‌DXT2和DXT3的主要区别在于Alpha信息的处理方式,‌而DXT4和DXT5则侧重于处理复杂的透明信息。‌DXT系列算法通过颜色和Alpha值的压缩,‌以及线性插值计算,‌实现了高效的纹理压缩。‌
  2. ETC系列:‌包括ETC1和ETC2,‌这些算法主要用于移动设备和嵌入式系统,‌如安卓设备。‌ETC2是ETC1的扩展,‌支持Alpha通道的压缩,‌并且对硬件要求较高,‌需要OpenGL ES 3.0或更高版本的支持。‌
  3. ASTC:‌由ARM和AMD联合开发,‌是一种灵活的纹理压缩格式,‌可以根据不同的图片选择不同的压缩率算法。‌ASTC不需要图片尺寸为2的幂次,‌同时支持LDR和HDR。‌其数据块大小固定为128位,‌但像素数量可变,‌从4×4到12×12像素都有。‌
  4. PVRTC:‌专为PowerVR显卡设计,‌仅支持iPhone、‌iPad和部分安卓机。‌PVRTC将图像分为低频信号和高频信号,‌通过不同的处理方式实现压缩。‌PVRTC分为4-bpp和2-bpp两种,‌提供了较高的压缩率。‌

KTX2纹理:

KTX 2.0增加了对Basis Universal超压缩GPU纹理的支持。这种压缩技术由Google与Binomial合作开发,可以产生紧凑的纹理,在运行时可以有效地转码为各种GPU压缩的纹理格式。此外,Khronos还发布了KHR_texture_basisu扩展,使glTF能够包含KTX 2.0纹理,从而产生可普遍分发的glTF资产,减少下载大小,并使用本机支持的纹理格式来减少GPU内存大小,提高不同设备和平台上的渲染速度,又因3DTiles瓦片使用的是glTF,从而为GIS行业常用的3DTiles模型提供了轻量化方案。

(压缩对比图,图源:Google与Binomial合作开源Basis Universal GPU纹理编解码器-腾讯云开发者社区-腾讯云

KTX2纹理格式优势:

1. 高效压缩:KTX2提供了先进的纹理压缩算法,例如ASTC(Adaptive Scalable Texture Compression)、BC(Block Compression)系列(如BC6/BC7)、ETC2(Embedded Texture Compression 2),这些算法可以显著减小纹理数据的大小,从而减少带宽需求和存储空间。

2. 多格式支持:KTX2不仅支持上述压缩格式,还支持非压缩格式,这使得它非常灵活,可以根据不同的应用场景选择最优的压缩方案。

3. GPU友好:KTX2格式直接与现代图形API(如OpenGL、Vulkan)兼容,这意味着它可以被GPU高效读取和处理,减少了CPU预处理的开销。

4. 多维度纹理:KTX2可以包含各种类型的纹理,包括2D、3D、立方体贴图以及纹理数组,甚至可以包含Mipmap层次结构,使得它成为一种非常全面的纹理存储格式。

5. 元数据嵌入:KTX2文件可以包含有关纹理的元数据,如纹理格式、尺寸、像素格式等,这样可以避免在加载时需要额外的信息,简化了纹理加载过程。

6. 跨平台:由于KTX2是Khronos Group制定的标准,它被设计为跨平台的,可以在不同的操作系统和硬件上使用,提高了纹理的可移植性和兼容性。

7. 未来兼容性:KTX2格式设计时考虑到了未来的发展,预留了空间用于添加新特性或支持新的压缩格式,确保了长期的可用性和可扩展性。

需要注意的是,KTX2的优势主要体现在现代硬件和软件环境中,对于老旧的系统或设备,可能因为硬件不支持这些高级压缩格式而无法完全利用KTX2的所有优点。

Mapmost SDK for WebGL 在多源数据支持上经过多年研发以及多个版本迭代,目前是市面上唯二支持DDS与KTX2纹理模型加载的引擎,相比于另一个CesiumJS引擎,Mapmost SDK for WebGL同时支持矢量瓦片渲染,CesiumJS目前尚不支持矢量瓦片渲染且没有研发规划。

(矢量瓦片 + DDS纹理的i3s格式数据渲染,图源:Mapmost SDK for WebGL)

(KTX2纹理的b3dm格式数据渲染,图源:Mapmost SDK for WebGL)

参考文献:

PVRTexTool现支持KTX™2.0和 Basis Universal超级压缩_ktx2压缩-CSDN博客

KTX Overview - The Khronos Group Inc

https://zhuanlan.zhihu.com/p/665140982DXT纹理压缩-CSDN博客


  关注Mapmost,持续更新GIS、三维美术、计算机技术干货

Mapmost是一套以三维地图和时空计算为特色的数字孪生底座平台,包含了空间数据管理工具(Studio)、应用开发工具(SDK)、应用创作工具(Alpha)。平台能力已覆盖城市时空数据的集成、多源数据资源的发布管理,以及数字孪生应用开发工具链,满足企业开发者用户快速搭建数字孪生场景的切实需求,助力实现行业领先。

欢迎进入官网体验使用:Mapmost——让人与机器联合创作成为新常态

WebGL是一种在浏览器中实现3D图形渲染的技术,它允许开发者使用JavaScriptWebGL API创建和显示3D场景。加载ktx纹理是使用WebGL加载3D纹理的一种方式。 KTX纹理是一种特殊的3D纹理格式,它被广泛用于游戏开发和3D渲染。这种格式纹理文件通常使用.ktx后缀,并且可以在大多数现代图形处理器(GPU)上以高效的方式渲染。 要使用WebGL加载ktx纹理,你需要执行以下步骤: 1. 确保你已经安装了适当的WebGL和OpenGL库,例如Three.js或GLGE。这些库提供了用于加载和渲染3D纹理的API。 2. 在你的代码中,使用库提供的API加载ktx纹理文件。通常,你需要使用库提供的函数来读取文件并将其转换为可在WebGL中使用的数据格式。 3. 将加载的纹理数据传递给WebGL上下文的纹理对象。这可以通过调用库中的相关函数来完成,该函数将纹理数据分配给纹理对象,并将其绑定到WebGL纹理单元中。 4. 在渲染循环中,将已绑定的纹理对象传递给着色器程序,以便在3D场景中使用。 需要注意的是,加载ktx纹理可能需要特定的库和环境支持。不同的库可能会有不同的API和语法,因此你需要查阅相关文档以了解如何正确加载和使用ktx纹理。 总的来说,使用WebGL加载ktx纹理是一个相对复杂的过程,需要一定的3D编程和图形处理知识。如果你不熟悉这些概念,建议查阅相关文档和教程以获取更详细的指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值