前言:
通常无人机拍摄生成的地形模型文件较大(倾斜摄影),要将三维模型显示到网页上,先要压缩模型(可以减面删除重复点、重复的面),前面这些已经实现了再来就是进行的纹理压缩!像我们做CIM,智慧城市场景主要是室外当然也有部分室内的功能与展示那一部分是BIM只有在高精度模型才能使用 BIM 的功能,平时比如漫游或者在城市模型比如广州这种特大城市场景里面非常多的模型建筑数据消耗内存还有卡顿问题资源的管理与优化是非常重要的以及使用LOD,来回切换高精度与低精度的模型,但是单单这里还远远不够比如给的模型一个房子就非常多的纹理贴图就需要压缩优化!这个很重要!这个很重要!这个很重要!重要的说三遍。
两种压缩:
一、jpg、png、tiff等等图片格式的压缩这种压缩,这些文件格式当被读入后,还需要经过CPU解压成bitmap,再传送到GPU端获取rgb,图片压缩主要是纹理贴图的图片体积变小(压缩都会存在失真的情况~)但是在 gpu处理的时候和bmp没有区别(jpg/jpeg格式,bmp是bitmap的缩写,是无损压缩图质最好但是文件太大不利于传输) 不会省显存,节省的是磁盘存储空间,与网络传输!
二、 还有一种dds格式,这种压缩格式是显卡支持的压缩格式, 无需在cpu中解压成rgb, 直接上传显存, 显卡也不解压直接显示!
区别**: jpg、png就是省硬盘,不省内存和显存!但是 dds除了磁盘空间外都省然而dds有一定的限制 比如图片尺寸什么的(新的不会了旧的会)、 在某些绘制场景下会略慢,常用情况下速度应该略好于位图;**
顶点的压缩磁盘体积减少但是会给GPU带来压力(相当于GPU需要解压恢复),但是纹理的压缩是磁盘体积会增大,但是速度快内存少,显存减少渲染绘制变快,gpu压力减少load的加载时间减少;如下图的实验:
我实测PNG转为DDS后内存占用减少了70% ,加载时间减少了40%。当然实验证明不管是obj、fbx、gltf等等格式都是支持dds作为它的纹理;
重点理清关系:
为什么使用DDS因为DDS是主流的,不过需要澄清的是png jpg dds 都是文件的封装格式,png、jpg不支持压缩纹理和纹理压缩没关系;像素格式: 纹理格式是能被GPU所识别的像素格式,能被快速寻址并采样。压缩纹理,是一种GPU能直接读取并显示的格式,使得图像无需解压即可进行渲染,节约大量的内存。
DDS(DirectDraw Surface)是一种图形文件格式,用于存储纹理和立方体贴图数据,并且通常用于视频游戏中。DDS格式的一个重要特性是它支持多种不同的压缩和非压缩像素格式。它是为了和DirectX图形API一起使用而设计的,因此与Microsoft Windows平台和游戏开发紧密相关。
DXT(S3 Texture Compression),现在更常称为DXTC,是DDS中所支持的一系列压缩像素格式的总称。DXT格式经过专门设计来减少图形数据占用的空间和带宽,同时还能提供合理的图像质量。DXT格式通常包括以下几种变体:
- DXT1: 1:8 压缩比最高,它只有1Bit Alpha,Alpha通道信息几乎完全丧失。一般将不带Alpha通道的图片压缩成这种格式。如Worldwind 用的卫星图片。
- DXT3: 1:4 使用了4Bit Alpha,可以有16个Alpha值,可很好地用于alpha通道锐利、对比强烈的半透和镂空材质。
- DXT5: 1:4 使用了线形插值的4Bit Alpha,特别适合Alpha通道柔和的材质,比如高光掩码材质。
BCn
随着图形硬件和标准的发展,DXTC压缩格式族扩展到了新的压缩技术,被统一命名为BC(Block Compression)格式。BC格式是DXTC的一种延伸和改进,其中每个BC格式都针对不同类型的图像数据进行优化。BCn格式包括从BC1到BC7等多种不同的压缩技术:
- BC1: 实际上与DXT1相同,用于RGB纹理压缩。
- BC2: 对应于DXT3,用于RGB纹理压缩带有显式alpha通道。
- BC3: 对应于DXT5,用于RGB纹理压缩带有插值alpha通道。
- BC4: 专为单通道纹理设计,如灰度纹理。
- BC5: 用于压缩包含两个通道的纹理,常用于存储法线贴图的红色和绿色通道(通常忽略蓝色通道,因为它可以在着色器中重新计算)。
- BC6: 针对高动态范围(HDR)图像进行优化的压缩格式。
DDS的限制与像素编码:
-
平台兼容性:DDS格式(dtx)与DirectX紧密关联,因此它在非Windows平台上的支持不如其它更通用的纹理格式,如KTX(Khronos Texture)等。
-
数据处理效率:与较新的纹理容器相比(如KTX 2.0支持基于GPU的超级压缩),DDS的某些压缩格式可能不那么高效,可能需要更多的CPU处理时间来解压纹理数据。
-
功能限制:Basis Universal等新的压缩技术提供了跨平台支持并允许在运行时选择最合适的压缩格式,而DDS容器可能无法直接支持这样的灵活性.Basis Universa的中间格式在win上转换为dxt等dds的格式,在安卓或IOS等移动端使用ETX1、ETX2等,ASTC 在安卓 ,win等都支持,随着iOS 设备 OpenGL ES 3.0的支持,这些格式也得到了支持!
纹理压缩特点:
- 增加渲染速度
- 减低纹理内存需求
- 快速纹理下载到纹理内存
- 低磁盘存储空间需求和高速磁盘存取
纹理压缩通常分为纹理生成层和运行时间层二部分,纹理生成又分成两种方法: - 通常方法:使用GL来压缩图像,存储到磁盘
- S3TC DDS文件格式:使用ISV的S3TC压缩工具来处理图像,在GL中载入DDS文件
运行时间层的主要工作分三步: - 从磁盘载入压缩图像
- 上载压缩图像到GL
- 不压缩动态纹理
查看与支持:
OPENGL 与OSG都是支持DDS 因为是显卡能够直接上传到显存直接能显示出来无需解码解压等等!
安装有DX 或者winsdk的就会有texcov,当然使用osg的osgconv --compressed是压缩纹理都可以,或者使用OSG的API就可以转换read/writeImageFile就可以;
拥有的查看器比如blender等等不支持查看或者说:“不支持该纹理格式”这个是程序本身的问题就好像3Dmax 要查看也需要安装插件~