【URP】Unity[纹理压缩]算法多平台对比
【从UnityURP开始探索游戏渲染】专栏-直达
纹理压缩技术发展节点
- 早期阶段 2000年代初
- DXT/S3TC成为PC和主机平台主流,采用4×4像素块压缩,但移动端支持有限。
- PVRTC(2008年)专为PowerVR GPU设计,要求纹理尺寸为2的幂次方且宽高相等,成为iOS早期标准。
- 移动平台标准化 2012-2014年
- ETC1(2012年)成为Android基础格式,但缺乏透明通道支持。
- ETC2(OpenGL ES 3.0强制支持)扩展了RGBA和sRGB支持,2013年后中高端Android设备普及。
- ASTC(2012年推出)由ARM开发,支持灵活分块(4x4至12x12)和NPOT纹理,2014年后A8/iPhone 6及以上设备支持。
- 现代统一化趋势 2020年后
- ASTC逐渐成为Android/iOS首选,压缩比和质量优于ETC2/PVRTC。
- Unity Crunched压缩(如ETC2+二次压缩)用于进一步减少纹理体积。
ASTC(Adaptive Scalable Texture Compression)
实现原理
- 分块压缩:将纹理划分为4×4至12×12像素的块(Block),每个块独立压缩为128位固定大小。
- 颜色插值:每个块存储2个端点颜色(RGB或RGBA)和权重网格(Weight Grid),通过插值计算中间颜色值。
- 动态分区:根据颜色分布自动选择最优分区方式(如4×4块可拆分为2×2子块),平衡压缩比与质量。
示例
- ASTC 4×4 RGBA:
- 原始数据:4×4=16像素×32位(RGBA)= 512位
- 压缩后:128位(8:1压缩比)
- 解码时,通过端点颜色和权重插值还原每个像素的RGBA值。
ETC2(Ericsson Texture Compression 2)
实现原理
- 4×4块压缩:每个块分为两个2×4子块,子块间通过1位标记选择横/竖分割方式。
- 颜色模式:
- Individual模式:子块独立存储RGB444颜色(高对比度区域)。
- Differential模式:子块存储RGB555基色+RGB333偏移量(低对比度区域)。
- 透明通道:通过额外64位数据存储Alpha值(ETC2+Alpha)。
示例
- ETC2 RGB:
- 原始数据:4×4=16像素×24位(RGB)= 384位
- 压缩后:64位(6:1压缩比)
- 解码时,根据子块模式选择基色+偏移量计算最终颜色。
PVRTC(PowerVR Texture Compression)
实现原理
- 双通道压缩:仅压缩RGB通道,Alpha通道单独处理(PVRTC2支持RGBA)。
- 颜色索引:每个4×4块存储2个主色(RGB565)和64位颜色索引表,通过插值生成中间颜色。
- 固定尺寸:仅支持2的幂次方纹理(如256×256)。
示例
- PVRTC4:
- 原始数据:4×4=16像素×24位(RGB)= 384位
- 压缩后:64位(6:1压缩比)
- 解码时,通过主色和索引表插值还原颜色,但透明通道需额外处理。
DXT(DirectX Texture Compression)
实现原理
- DXT1:
- 4×4块存储2个RGB565颜色和16位插值索引(无Alpha)。
- DXT5:
- 4×4块存储2个RGB565颜色+2个8位Alpha极值+16位Alpha插值索引。
- 块状伪影:高对比度区域易出现色带(如渐变纹理)。
示例
- DXT1 RGB:
- 原始数据:4×4=16像素×24位(RGB)= 384位
- 压缩后:64位(6:1压缩比)
- 解码时,通过端点颜色和插值索引计算中间颜色。
压缩方式对比
| 格式 | 压缩比 | 透明支持 | 适用平台 | 典型问题 |
|---|---|---|---|---|
| ASTC | 4:1~12:1 | 是 | iOS(A8+)/Android(ES3.1) | 低端设备兼容性差 |
| ETC2 | 6:1 | 是(需扩展) | Android(ES3.0+) | 高对比度区域色带明显 |
| PVRTC | 4:1~6:1 | 是(PVRTC2) | iOS | 强制2的幂次方尺寸 |
| DXT | 4:1~6:1 | 是(DXT5) | PC/主机 | 移动端不支持 |
多平台压缩方案对比
| 格式 | 支持平台 | 压缩比 | 优势 | 劣势 |
|---|---|---|---|---|
| ASTC | iOS(A8+)、Android(ES3.1+) | 4x4块=8bit/像素 | 高灵活性,支持NPOT和透明通道4 | 低端Android设备可能不兼容 |
| ETC2 | Android(ES3.0+) | 8bit/像素 | 广泛兼容,支持透明通道2 | 压缩质量低于ASTC,块状伪影明显 |
| PVRTC | iOS(全系列) | 4bit/像素 | 苹果硬件原生优化1 | 强制2的幂次方尺寸,透明通道效果差 |
| DXT | PC/主机 | 4-8bit/像素 | DirectX高效解码2 | 移动端不支持,高细节纹理易失真 |
URP中各平台推荐方案与问题
iOS平台
- 首选ASTC 4x4:平衡质量与性能,但需放弃iPhone 5s等旧设备。
- 备选PVRTC4:兼容性最佳,但渐变和透明区域易出现色带。
Android平台
- 高端设备ASTC:需检测OpenGL ES 3.1支持,否则回退ETC2。
- ETC2通用方案:可通过分离Alpha通道(ETC1+Alpha图)优化透明纹理,增加复杂度。
特殊情况处理
- 高保真需求:使用RGBA32无压缩,但内存占用激增(如1024x1024纹理达16MB)。
- 渐变纹理:RGBA16结合Dithering抖动处理,减少色阶断裂。
性能优化建议
- 平台检测:通过
SystemInfo.SupportsTextureFormat动态选择压缩格式。 - 分级压缩:根据纹理用途(UI/场景)采用不同压缩级别,UI优先ASTC/ETC2,背景可用PVRTC。
- 冗余检查:避免AssetBundle重复打包纹理导致内存翻倍
【从UnityURP开始探索游戏渲染】专栏-直达
(欢迎点赞留言探讨,更多人加入进来能更加完善这个探索的过程,)
【URP】Unity[纹理压缩]算法多平台对比的更多相关文章
- Unity --- 纹理压缩基本知识点
1.Unity支持的压缩格式的分类,这里主要指Android平台和IOS平台: DXT格式 --- Nvidia Tegra(图睿)提供ETC --- 安卓原生支持的,OPNEGL2.0都支持,ET ...
- Unity游戏开发图片纹理压缩方案
Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式. 在Texture2D的设置选项中,你可以针对不同的平台,设 ...
- DXT纹理压缩
转:http://blog.csdn.net/lhc717/article/details/6802951 我们知道游戏中对于3D物体表面细节的表现最重要的还是靠贴图来实现的,那么越是高分辨率越是真彩 ...
- 201871010203-陈鹏昱 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 学习软件工程的理论和知识,掌握软件开发流程,增强实践能力 这个作业在哪些方面帮助我实现学习目标 体验软件项目开发中 ...
- 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...
- 国内app快速生成平台对比
泰格老虎 2013-03-07 00:39:10 这是海恒CEO高鹏写的一篇国内app快速生成平台对比文章,介绍了国内快速生成APP的平台与自己平台的对比,很有参考价值. 同类网站 安米网 http ...
- Unity3D for Android 纹理压缩支持
http://blog.csdn.net/asd237241291/article/details/48548557 首先附图:Unity3D for Android支持的纹理压缩格式 纹理压缩可以通 ...
- 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...
- 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...
- 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告
项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...
随机推荐
- llamafactory文档
https://llamafactory.readthedocs.io/zh-cn/latest/index.html https://blog.csdn.net/python12345678_/ar ...
- Semantic Kernel 入门教程
https://www.bilibili.com/video/BV1sr4y1f7zb/?spm_id_from=333.337.search-card.all.click&vd_source ...
- 技术分享 | MySQL TEXT 字段的限制
一.背景说明项目中有一个数据交换的场景,由于使用了很多个 varchar(1000).varchar(2000),导致在创建表的时候,MySQL 提示: ERROR 1118 (42000): Row ...
- Mock 在 API 研发中的痛点、价值与进化及Apipost解决方案最佳实践
在日常 API 研发过程中,Mock 是一个几乎无法绕开的话题.无论是项目初期的快速迭代,还是接口尚未就绪的场景,Mock 都能帮助我们在「没有真实后端数据」的情况下,保障前端开发的连续性和效率. 一 ...
- 每个 PHP 开发者都应该了解的 10 个必备 PHP 库
每个 PHP 开发者都应该了解的 10 个必备 PHP 库 作为 PHP 开发者,我们都面临着同样的问题:重复性任务占用了太多时间.无论是管理数据库.发送邮件,还是处理图片,我们经常为每个项目编写相同 ...
- bash传参的使用记录
cat > 1.sh << \EOF temp=$(getopt -o V:U:P:h --long version:,username:,password:,help -- &qu ...
- iOS播放音频
转载请注明出处!!! 1.播放网络音频 NSURL * url = [NSURL URLWithString:MP3URL]; AVPlayerItem * songItem = [[AVPlayer ...
- 关于vue index.html文件引用本地js资源文件打包后404的问题
1.vue-cli3之后要加载本地js资源,可以将js文件放在public文件下,即与index.html文件同级(可以创文件夹放文件夹中,比较规范) 2.在index文件中引入 这里要注意两种写法, ...
- 模拟集成电路设计系列博客——6.4.1 电阻电容混合DAC
6.4.1 电阻电容混合DAC 在混合设计中,需要以不同的比例组合前三章中讨论的三种技术.混合设计是设计DA转换器中的一种流行方式,因为它能够组合不同方式的优点.例如,在设计中经常使用温度计码处理高几 ...
- Ubuntu20.04 安装向日葵SunloginClient并解决报错缺少依赖问题的解决方法
.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...