【百人计划】图形3.5 纹理压缩的格式
笔记部分》
一、什么是纹理压缩格式(概念)
为了解决内存和带宽问题,在计算机图形渲染中(储存纹理)的一种图像压缩、优化技术。
二、为什么要进行纹理压缩?
对于低硬件设备和移动端,有两个问题需要解决。
①内存
假设有一张512*512的RGBA8图像,需要的储存空间为512*512*4b(一个像素4个字节),约等于1M,当游戏内贴图的数量过多,如果不进行压缩,对于移动端来说是难以接受的。
②带宽
在移动端这样内存带宽极度受限的平台上,每当渲染场景,大量贴图被传输给GPU,压缩纹理也能有效降低带宽的需求。
总结:压缩纹理是有效提升渲染效率的方法之一,但是压缩也是有损的,所以也需要在质量和大小之间做平衡。
三、区分图片格式和纹理格式
3.1、常见的格式
①常见的图片压缩格式:png,jpg,gif等
②常见的纹理压缩格式:DXTC,ETC,BC,ASTC(Texture Compression)等等;
3.2、两者的区别
①图片格式:计算机储存图片的格式。
对于图片压缩格式,GPU不能直接读取,需要CPU额外进行解压缩成RGBA32格式(所以无论什么图片格式经过CPU解压缩后都是RGBA);且是基于整张图像进行压缩,因此不支持像素的随机访问。(不太可能为了访问某一个像素对整张图进行解码)
②纹理格式: 是显卡能直接读取的格式。
对于纹理压缩格式,能被GPU直接读取对应大小的字节进行解压缩,因此可以高效的随机访问每一个像素。
3.3、总结
在实时渲染中,对于jpg,png这类图片压缩格式,解码代价高,且会增加额外的CPU工作。所以纹理压缩格式会更高效,在访问时会占用更少的带宽和内存。
四、常见的纹理压缩格式(详解)
4.1、DXTC
①核心思想:将4*4的像素块进行块状的压缩编码,每一块都储存两个颜色参考值/极端值,允许每个像素有2位/3位插值因子,在两个颜色值中进行插值。
(*颜色参考值为16位,RGB通道精度分别是565,查阅了资料后应该是基于“人眼对绿色更为敏感”这一特性。所以一些单通道贴图的组合会把精度做高的信息贴图放在G通道,像PBR金属工作流中的MRA)
②延伸
>DXT1 (6:1)
无Alpha通道。
>DXT2/3(4:1)
在DXT1的基础上,每块都有相同的64位数据编码,但每个像素都有额外的4位来储存Alpha通道,所以64+64=128位。Alpha通道不插值,直接储存数据。
>DXT4/5(4:1)在DXT1的基础上,每块都有相同的64位数据编码,不同的是,使用2个8位的单通道极端数值和额外每像素3位的索引值来储存Alpha。分别压缩,以获得更高的精度。64+2*8+3*16=128;
③优点:与RGB24相比,有着较高的的压缩率,且简化了解码过程。
④额外的Tips:
2/3,4/5的区别在于前者做了预乘,后者Alpha信息独立。
Unity中的DXTnrm,是基于DXT5的压缩方法,将R通道的值储存至A通道后,清空RB通道,这样利用精度最高的g通道和a通道,对法线的xy方向进行分别压缩,能获得更高的精度。
4.2、ATI1/2也被称为BC4/BC5
>BC4
和DXT5 Alpha通道的储存模式相同,使用2个8位的单通道极端数值和每像素3位的索引值来储存。只能储存单个颜色的通道,常用来从储存单通道的颜色信息贴图。Roughness,Ao,Mentalic贴图等。
>BC5
和DXT5 Alpha通道的储存模式相同,使用2个8位的单通道极端数值和每像素3位的索引值来储存。
4.3、BC6/BC7
>BC6 (6:1)
将4*4的像素进行块状编码,每块储存128位数据,(包含两个48位的浮点精度RBG值),外加每个像素有2位索引表。常用于压缩HDR。
>BC7 (3:1)
大致同BC6,常用于压缩LDR。也用于压缩高质量的RGBA,可显著减少法线压缩带来的错误效果。
4.4、在移动端广泛应用的ETC
①核心思想:类似于DXT,ETC也是把4x4的像素块压缩成一个64或128位的数据块,也是有损压缩。
>ETC1(6:1)
将4*4的像素块进行块状编码,每块储存64位数据,将整块编码分为2个大的子快,每个子块包含一个基本色,和一个3位的修饰值索引表,进行叠加就可以确立最终解码值。(也叫修饰值也叫亮部补偿值)
>ETC2(6:1)
为ETC的扩展,支持Alpha通道。ETC2相比ETC1,会增大由于色度所产生误差的可能性。
4.5、ASTC(4:1~36:1)
①核心思想:同样是块状编码,类似于BC7,其数据块大小固定为128位。但覆盖的像素数量是可变的,从4*4到12*12像素都有。每一块中储存了两个插值端点,但不一定储存的是颜色信息,也有可能是Layer信息。这样就可以针对所储存的信息进行更好的压缩。而对于块中的每一个像素,储存其对应的插值。储存的权重数量不一定要和纹素数量对等。即分配了很多的可变的可配置数据。
②优点:会根据不同的纹理贴图类型选择不同压缩率的算法,且贴图大小不一定要为2次幂,支持LDR与HDR。
③缺点:对设备有硬性要求,不兼容。解码时间过长。(随着移动端硬件的发展,GPU越来越不会变成计算瓶颈。所以ASTC的应用正逐渐广泛)
4.6、PVRTC(6:1)
①核心思想:一般针对苹果机的设备,不同于上述DXTC,BC,ASTC这几类的基于块的算法,PVRTC将图像分为高频信号和低频信号。低频信号由两张低分辨率的图像A、B表示。(两张图在维度上都缩小了4倍),高频信号是全分辨率的低精度调制图像,记录了每个像素混合的权重,在解码时低频信号的两张图会放大,根据高频信号调制图像的权重做混合。
拿4-bpp举例,这个压缩方式把每个4*4像素压缩成块状编码,每块储存64位数据。包含15位颜色A+1位标识(标识是用ARGB还是用RGB通道储存),14位颜色B+1位标识。32位调制图像的混合权重值。
②缺点:只支持苹果设备和部分安卓,不兼容。
总结:如果平台不支持对应设置的纹理压缩格式,纹理将被解压缩为RGBA 32并与压缩格式一起存储在内存中。感觉具体使用哪种压缩方式还是取决于目标平台与纹理用法。同时,也要根据纹理的重要程度,是否大程度影响最终效果,考虑是否需要压缩,或使用哪种压缩格式。
四、总结
抄作业环节:
作业部分》
作业:打包测试ASTC和ETC2
因为untiy抽风打包apk出了问题,我这个只能先欠着了555(抹泪)
我就分析分析同学们打的包吧 233
大致整体压缩后的内存占比为
未经压缩后的RGBA > ASTC4*4 >ETC2 >ASTC6*6及以上。ASTC8*8的占用容量几乎达到ETC2的一半。
ASTC6*6的质量看起来是高于ETC2的,但逐渐往上走,到了8*8开始产生明显失真的情况。
因为现在ASTC似乎因为压缩后内存占用小,且效果几乎接近原图,和BC7的高质量接近,应用的比较广泛,所以额外拓展了一下ASTC:
ASTC的适配机型为ios iphone6以上,安卓为大部分。(所以ASTC是真的快取代ETC了吗 233)对于带Alpha通道的贴图,使用同等区块大小,压缩质量明显降低。所以在使用ASTC时,要检查贴图是否带有A通道以更好规划选择的压缩等级。一般来说,同样的贴图带A通道,需要往上走选择质量更好的压缩等级才能避免失真的情况。如果贴图类型为法线贴图,也需要更高的要求,一般选用ASTC5*5,更高精度也可用ASTC4*4。
ASTC的缺陷在于不适配部分GPU配置不行的机型,且压缩时间过长。不过因为应用广泛各个厂商都在推,之后兼容性因该会越来越好,压缩时间过长的问题也可以用分布式解决。
ps:似乎法线贴图也不用强求ASTC,有时候ETC2的结果会更好。
对于纹理压缩格式,如果机型不适配或者贴图大小不符合对应的压缩格式规定,Unity会默认更改为sRGB。
【百人计划】图形3.5 纹理压缩的格式相关推荐
- 百人计划 图形1.4 PC手机图形API介绍
前言 电脑工作原理:电脑是有各种不同的硬件组成,由驱动软件驱使硬件进行工作.所有的如软件工程师都会直接或间接使用到驱动. 定义:是一个针对GPU的图形库,用于渲染2D.3D矢量图形的跨语言.跨平台的应 ...
- 百人计划 图形 2.5 BUMP图改进
基础感念 凹凸贴图技术是对物体表面贴图进行变化然后再进行光照计算的一种技术.例如给法线分量添加噪音,或者在一个保存扰动值的纹理图中进行查找,这是一种提升物体真实感的有效办法,但却不需要额外的提升物体的 ...
- 百人计划 图形2.1 色彩空间
色彩发送器 色彩认知:光源是出生点,光源发出光线,光线通过直射反射折射等路径最终进入人眼.在接收到光线后,人眼产生了一系列化学反应.由此把产生的信号传入大脑,大脑对颜色产生了认知感知. 光的要素: 光 ...
- 百人计划 图形2.2 模型与材质基础
渲染流水线大致过程 1.顶点数据输入到顶点着色器中进行相关的顶点计算,然后进行图元装配,通过点与点之间的关系将点进行连接.2.再到几何着色器(可选着色器)进行图元的增加,再到光栅化通过遍历像素点将一个 ...
- 【TA-霜狼_may-《百人计划》】图形3.6 纹理压缩——包体瘦身术
[TA-霜狼_may-<百人计划>]图形3.6 纹理压缩--包体瘦身术 @[TOC]([TA-霜狼_may-<百人计划>]图形3.6 纹理压缩--包体瘦身术 3.6.1 纹理压 ...
- 【TA-霜狼_may-《百人计划》】图形3.4 延迟渲染管线介绍
[TA-霜狼_may-<百人计划>]图形3.4 延迟渲染管线介绍 @[TOC]([TA-霜狼_may-<百人计划>]图形3.4 延迟渲染管线介绍 3.4.1 渲染路径 3.4. ...
- 【TA-霜狼_may-《百人计划》】图形3.7 移动端TP(D)R架构
[TA-霜狼_may-<百人计划>]图形3.7 移动端TP(D)R架构 @[TOC]([TA-霜狼_may-<百人计划>]图形3.7 移动端TP(D)R架构 3.7.1 当前移 ...
- 【TA-霜狼_may-《百人计划》】1.4 PC手机图形API介绍
[TA-霜狼_may-<百人计划>]1.4 PC手机图形API介绍 1.4.1 基础概念 1.4.2 DirectX, OpenGL, OpenGL ES Khronos Open Sta ...
- 【TA-霜狼_may-《百人计划》】图形2.7.2 GPU硬件架构概述
[TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 @[TOC]([TA-霜狼_may-<百人计划>]图形2.7.2 GPU硬件架构概述 GPU是什么 GP ...
最新文章
- oralce之 10046对Hash Join分析
- html绑定多个事件,jquery可以给多个元素绑定同一事件吗?
- 企业如何快速响应用户需求 且看云徙“数据+业务”双中台化简为繁
- 全网唯一C++调用由com组件生成的dll教程
- Tokenizers: How machines read
- pxe安装linux dhcp失败,利用PXE自动化安装Centos时启动DHCP服务时遇到错误,请求大佬指教...
- 《图解算法》学习笔记之散列表(hash table)
- python编写个人信息查询_使用Python改写的身份证信息查询小程序
- vsftp配置问题启示录
- 我想向你们推荐一门最好的python课程——CS61A学习笔记(一)
- 个人简历自我介绍求职面试PPT模板
- N卡显卡驱动更新,解决色彩准确度增强的问题
- Unity在运行时使用FBX SDK的API
- 微信小程序打开外部链接
- 未来办公利器-无影云超级桌面体验
- 获取HTML中文本框的值并进行比较两者的大小
- 让 Vivado有Zybo Board的配置文件
- 【Java 常用的设计模式】
- mysql脏读解决方案_MySQL为什么可以解决脏读和不可重复读?
- 如何通过数据分析,提升游戏次日留存
热门文章
- 国家级专精特新小巨人企业是什么?
- 公共数据库介绍~OpenCorporates
- yum安装报错:ImportError: No module named urlgrabber.grabber
- 【小白必看】2020 笔记本电脑选择科普
- pwm调速流程图小车_循迹+pwm调速的小车源程序
- java的像素与dpi_DPI与像素的关系
- 设备一路485如何供两台电脑使用_干货!消防设备供电系统有哪些部分构成,用电负荷等级如何划分?...
- 关于requests.exceptions.SSLError: HTTPSConnectionPool(host='XXX', port=443)问题
- python画xy轴_python画双y轴图像的示例代码
- android迷宫图像生成,Android - 绘制一个迷宫,以平滑的角色移动的画布