【TA-霜狼_may-《百人计划》】图形3.6 纹理压缩——包体瘦身术
【TA-霜狼_may-《百人计划》】图形3.6 纹理压缩——包体瘦身术
- @[TOC](【TA-霜狼_may-《百人计划》】图形3.6 纹理压缩——包体瘦身术
- 3.6.1 纹理压缩
- 图片格式
- 纹理格式
- 纹理管线
- 3.6.2常见纹理格式
- 非压缩格式
- DXTC
- DXT 1
- DXT2/3
- DXT4/5
- 拓展
- ATI1/2
- BC6/7
- ETC
- ETC1
- ETC2
- ASTC
- PVRTC
- 3.6.3 总结
- 格式总结
- 作业(有误,看补充)
- 补充
3.6.1 纹理压缩
纹理压缩是为了解决内存、带宽问题,专为在计算机图形渲染系统中存储纹理而使用的图像压缩技术;
图片格式
图片格式是图片文件的存储格式,通常在磁盘、内存中储存和传输文件时使用;
纹理格式
纹理格式是显卡能够直接进行采样的纹理数据格式,通常在向显卡中加载纹理时使用;
纹理管线
不同点:
- 纹理压缩格式基于块压缩,能够更快读取像素所属字节块进行解压缩以支持随机访问;
- 图片压缩格式基于整张图片进行压缩,无法直接实现单个像素的解析;并且,图片压缩格式无法被GPU识别,还需要经CPU解压缩成非压缩文理格式才能被识别;
3.6.2常见纹理格式
非压缩格式
DXTC
DXTC纹理压缩格式来源于S3公司提出的S3TC算法,基本思想是把4x4的像素块压缩成一个64或128位的数据块,优点为创建了一个固定大小且独立的编码片段,没有共享查找表或其他依赖关系,简化了解码过程;
DXT 1
每一个块具有2个16位RGB颜色值(RGB565 565代表三个通道的位数),代表了此4x4像素块中颜色极端值,然后通过线性插值计算出两个中间颜色值,16个2位索引值则表示每一个像素的颜色值索引;
对于有Alpha信息的贴图,则插值只生成一个中间颜色,两位索引到第四个颜色的时候则代表该像素透明;
参照对象为:RGB24
16个像素共用64位数据,则单个像素用4位数据;
DXT2/3
与DXT1相似,在原有的64位基础上,新增64位数据用于表示每个像素的Alpha值,整个数据块变成128位;由此可得每个像素占用8位数据,0-3位表示透明信息,4-7位表示颜色信息;
DXT4/5
与DXT2/3的差异在于其Alpha信息是通过线性插值所得,表示颜色信息的64位数据块依然不变,而Alpha信息则由2个8位Alpha极端值和16个3位索引值组成;
拓展
如果在Unity内贴图类型选择为法线,则会采用DXTnm压缩格式,该格式会把法线贴图R通道存入A通道,然后RB通道清除为1,这样可以将发现XY信息分别存入到RGB/A中分别压缩,从而获得更高的精度,然后再根据XY构建出Z通道数据;
压缩比参考对象RGBA 32位
DXT2/3/4/5的位数为128位,可以对应16个像素,所以每一位像素所占位数为8位,所以压缩比为32/8 = 4
ATI1/2
ATI1也被称为BC4,其每个数据块存储单个颜色的数据通道,编码方式和DXT5中的Alpha数据相同,常用于存储高度图、光滑度贴图,效果与原始图像基本无差异;
比较对象为单通道则为8位,用64位表示16个像素,则压缩比为 8/ (64/16) = 2:1
ATI2也被称为BC5,每一个块中存储两个颜色通道的数据,同上以与DXT5中Alpha数据相同的方式进行编码,相当于存储了两个BC4块;
如果是在将发现存储在XY双通道中采用BC5格式压缩,由于每个通道都有自己的索引,因此法线贴图XY信息可以比在BC1中保留更多的保真度,缺点是需要使用两倍内存,也需要更多的带宽才能将纹理传递到着色器中;
比较对象为两个通道则为16位,用128位表示16个像素,则压缩比为16/(128/16) = 2:1
BC6/7
仅在D3D11及以上图形硬件中受到支持,每个块占用16字节,BC7针对8位RGB或RGBA数据,而BC6针对RGB半精度浮点数据,因此BC6是唯一一个可以原生存储HDR的BC格式;
BC6是专门针对HDR(高动态范围)图像设计的压缩算法,压缩比为6:1;
BC7是专门针对LDR(低动态范围)图像设计的压缩算法,压缩比为3:1,该格式用于高质量的RGBA压缩,可以显著减少用于压缩法线带来的错误效果;
ETC
ETC在安卓平台广泛应用:
通过亮度索引先横向的选择列,然后利用像素索引在对应的列中选择哪一行,最后在原始颜色的基础上进行调整,得到16个不同的颜色;
ETC1
比较对象为RGB,共24位
压缩比:24 / (64 /16) = 6:1
ETC2
对ETC1的扩展,支持了Alpha通道的压缩,硬件要求OpenGL ES 3.0 和 OpenGL4.3以上;
ETC1要求长宽为2的幂次
ETC2要求长宽能被4整除
ASTC
由AMD和ARM联合开发的纹理压缩格式,ASTC在各项指标上都挺不错,优点是可以根据不同图片选择不同压缩率的算法,图片不需要为2的幂次,同时支持LDR和HDR,缺点是兼容性不够完善且解码时间较长;
ASTC也是基于块的压缩算法,与BC7类似,其数据块大小固定为128位,但是像素数量可变,从4x4到12x12像素都有;
每一个数据块中存储了两个插值端点,但不一定存储的是颜色信息,也可能是Layer信息,这样可以用来对Normal或Alpha进行更好的压缩;可以根据贴图类型进行不同形式的压缩;
对于块中每一个纹素,存储其对应插值端点的权重,存储的权重数量可以少于纹素数量,可通过插值得到每一个纹素的权重值,然后再进行颜色的计算;
PVRTC
仅支持Iphone、Ipad和部分安卓手机;
PVRTC将图像分为了低频信号和高频信号,低频信号由两张低分辨率图像AB组成,高频信号则是低精度的调制图像,记录了每个像素混合的权重,解码时AB图像经过双线性插值放大,然后根据调制图像的权重进行混合;
PVRTC 4-bpp(4 bit per pixel)把一个4x4的像素单元压成一个64位数据块,每一个块中存储一个32位的调制数据(则每个像素分到2位调制数据,分别表示为00,01,10,11),一个1位的调制标志(用于控制调制数据),15位的颜色A,1位颜色A不透明标志,14位颜色B,1位颜色B不透明标志(用于决定是按照RGBA进行的存储还是RGB进行存储,如果不同,则按照位数高的那张图进行判定);
若果对应RGB则压缩率为6:1,如果对应RGBA则压缩率为8:1;
3.6.3 总结
画质比较:RGBA>ASTC4x4 > ASTC 6x6 > ETC2 ≈ ETC1
压缩比:
DXT1 6:1
DXT2/3 4:1
DXT4/5 4:1
ATI1 4:1
ATI2 4:1
BC6 6:1
BC7 3:1
PVRTC 6:1
ASTC 4:1 ~ 35.95:1
格式总结
PC:
- 低质量使用DXT1格式(不支持A通道),使用DXT5格式支持A通道;
- 高质量使用BC7格式,支持A通道;
安卓:
- 低质量使用ETC1格式,但不支持A通道;
- 低质量使用ETC2格式,支持A通道,需要在OpenGL ES 3.0 / OpenGL 4.3 以上版本;
- 高质量使用ASTC格式,需要在Android 5.0/ OpenGL ES 3.1以上版本;
IOS:
- 高质量使用ASTC格式,需要IPhone6以上;
- 低质量使用PVRTC2格式,支持IPhone6以下版本;
作业(有误,看补充)
实验场景:
纹理格式压缩为ASTC,单张纹理的大小为0.6MB,内存占用如下:
纹理格式压缩为ETC2,可以看到压缩后这张纹理大小为0.7MB内存占用如下:
纹理压缩为ETC格式,压缩后纹理大小为0.7MB,内存占用如下:
实验发现,当将整个场景的图片降低到一张图的时候,内存占用没有变化;下面两张图片使用不同的纹理压缩方式得到的纹理大小对比更加明显;
补充
前面在系统设置中修改图片的压缩格式没有起到效果,经过查找后发现需要在单张纹理图片中进行修改,经过修改后有了差别,还是利用URP进行性能分析,结果如下:(并且在此处关闭了Mipmap进行比较)
可以看到ASTC压缩的图片比RGBA的原始图片在Texture2D采样过程中消耗更少的内存空间。
又实验了一下,开启MIPMAP会稍微增加一点点内存消耗,但是仍然小于不压缩,应该还是和测试场景有关。
另外压缩的格式有非常多种,ASTC6x6的压缩结果是有可能小于ETC2的。
【TA-霜狼_may-《百人计划》】图形3.6 纹理压缩——包体瘦身术相关推荐
- 百人计划 图形1.4 PC手机图形API介绍
前言 电脑工作原理:电脑是有各种不同的硬件组成,由驱动软件驱使硬件进行工作.所有的如软件工程师都会直接或间接使用到驱动. 定义:是一个针对GPU的图形库,用于渲染2D.3D矢量图形的跨语言.跨平台的应 ...
- 百人计划 图形2.1 色彩空间
色彩发送器 色彩认知:光源是出生点,光源发出光线,光线通过直射反射折射等路径最终进入人眼.在接收到光线后,人眼产生了一系列化学反应.由此把产生的信号传入大脑,大脑对颜色产生了认知感知. 光的要素: 光 ...
- 百人计划 图形 2.5 BUMP图改进
基础感念 凹凸贴图技术是对物体表面贴图进行变化然后再进行光照计算的一种技术.例如给法线分量添加噪音,或者在一个保存扰动值的纹理图中进行查找,这是一种提升物体真实感的有效办法,但却不需要额外的提升物体的 ...
- 百人计划 图形2.2 模型与材质基础
渲染流水线大致过程 1.顶点数据输入到顶点着色器中进行相关的顶点计算,然后进行图元装配,通过点与点之间的关系将点进行连接.2.再到几何着色器(可选着色器)进行图元的增加,再到光栅化通过遍历像素点将一个 ...
- 【TA-霜狼_may-《百人计划》】图形3.4 延迟渲染管线介绍
[TA-霜狼_may-<百人计划>]图形3.4 延迟渲染管线介绍 @[TOC]([TA-霜狼_may-<百人计划>]图形3.4 延迟渲染管线介绍 3.4.1 渲染路径 3.4. ...
- 【TA-霜狼_may-《百人计划》】图形3.7.2 command buffer简
[TA-霜狼_may-<百人计划>]图形3.72command buffer 及urp概述 @[TOC]([TA-霜狼_may-<百人计划>]图形3.72command buf ...
- 【TA-霜狼_may-《百人计划》】图形4.5 DoF景深基础
[TA-霜狼_may-<百人计划>]图形4.5 Dof景深基础 @[TOC]([TA-霜狼_may-<百人计划>]图形4.5 Dof景深基础 4.5.1 景深 离散圈 4.5. ...
- 【TA-霜狼_may-《百人计划》】图形2.7.2 GPU硬件架构概述
[TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 @[TOC]([TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 GPU是什么 GP ...
- 技美 百人计划 (图形)1.1渲染流程
技美 百人计划 (图形) 图形 1.1 渲染流水管线2.1数学基础 很早之前就有关注百人计划这个系列的课程,也跟着看到了2.几的教学但是一直没有写笔记,最近看到百人计划已经快更新完毕了,决定从头看一遍 ...
最新文章
- TinyXml高速入门(一)
- 解决visual studio已安装的问题
- luogu p4767 邮局
- 面试时如何优雅地自我介绍?
- LuoGu P2002 消息扩散
- Python 不定长参数 *argc/**kargcs - Python零基础入门教程
- Js判断是否在微信浏览器中打开和微信版本号
- ExtJs页面布局总结(转载)
- Atitit 图像处理 平滑 也称 模糊, 归一化块滤波、高斯滤波、中值滤波、双边滤波)
- C语言初学之自学总结
- 最新版面具隐藏root过检测教程(免刷机)
- 华为手机信息不弹屏了为什么_华为手机顶部消息弹窗怎么关闭?
- 20款优秀的数据可视化工具 (建议收藏)
- 一篇文章告诉你什么是社群运营
- 打造自己的域名转向
- ABAQUS运行问题总结
- 3650M5 IMM 配置升级
- java 字符串驻留_JAVA 字符串驻留池
- WIN10+CUDA9.2+ZED双目SDK 安装教程(无人驾驶,感知)
- chkdsk /f P 很强大,帮我解决了硬盘写保护的问题