前言:
通常无人机拍摄生成的地形模型文件较大(倾斜摄影),要将三维模型显示到网页上,先要压缩模型(可以减面删除重复点、重复的面),前面这些已经实现了再来就是进行的纹理压缩!像我们做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的加载时间减少;如下图的实验:
DDS是一种图片格式。DirectDraw Surface的缩写,它是DirectX纹理压缩(DirectX Texture Compression,简称DXTC)的产物。DDS是NVDIA开发的硬解纹理压缩格式,主要代表为DXT1,DXT3,DXT5无需软件甚至系统解析,直接将字节发送给GPU即可呈现图像,我实测PNG转为DDS后内存占用减少了70% ,加载时间减少了40%。当然实验证明不管是obj、fbx、gltf等等格式都是支持dds作为它的纹理;
重点理清关系:
为什么使用DDS因为DDS是主流的,不过需要澄清的是png jpg dds 都是文件的封装格式,png、jpg不支持压缩纹理和纹理压缩没关系;像素格式: 纹理格式是能被GPU所识别的像素格式,能被快速寻址并采样。压缩纹理,是一种GPU能直接读取并显示的格式,使得图像无需解压即可进行渲染,节约大量的内存。所以才要改为其他格式不能是jpg或者png做纹理压缩连rgba32 都不!默认bc7就是压缩纹理,jpg png只支持RGB8( RGBA8888 每个像素4字节,RGBA通道各占用8位),而exr hdr是输出RGBA32得hdri图得,dds可以存储压缩纹理+mipmap。
DDS的限制与像素编码:
DDS格式的长宽应该是2 的N次幂,长宽不一定要求是相同但是理应都是2次幂!
dds是容器,dxt是编码,用什么编码是转换的时候就决定好的:
有3种DXTC的格式可供使用,分别是DXT1,DXT3和DXT5。
DXT1 压缩比例:1:8 压缩比最高,它只有1Bit Alpha,Alpha通道信息几乎完全丧失。一般将不带Alpha通道的图片压缩成这种格式。如Worldwind 用的卫星图片。
DXT3 压缩比例:1:4 使用了4Bit Alpha,可以有16个Alpha值,可很好地用于alpha通道锐利、对比强烈的半透和镂空材质。
DXT5 压缩比例:1:4 使用了线形插值的4Bit Alpha,特别适合Alpha通道柔和的材质,比如高光掩码材质。
纹理压缩特点:
- 增加渲染速度
- 减低纹理内存需求
- 快速纹理下载到纹理内存
- 低磁盘存储空间需求和高速磁盘存取
纹理压缩通常分为纹理生成层和运行时间层二部分,纹理生成又分成两种方法: - 通常方法:使用GL来压缩图像,存储到磁盘
- S3TC DDS文件格式:使用ISV的S3TC压缩工具来处理图像,在GL中载入DDS文件
运行时间层的主要工作分三步: - 从磁盘载入压缩图像
- 上载压缩图像到GL
- 不压缩动态纹理
查看与支持:
OPENGL 与OSG都是支持DDS 因为是显卡能够直接上传到显存直接能显示出来无需解码解压等等!
安装有DX 或者winsdk的就会有texcov,当然使用osg的osgconv --compressed是压缩纹理都可以,或者使用OSG的API就可以转换read/writeImageFile就可以;
拥有的查看器比如blender等等不支持查看或者说:“不支持该纹理格式”这个是程序本身的问题就好像3Dmax 要查看也需要安装插件~