【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 ...
随机推荐
- 1010 Reports
http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&cid=909 Reports Time Limit: 2000 ...
- 记一次C#平台调用中因非托管union类型导致的内存访问越界
离奇现象 大家在C#代码中遇到这样的问题吗:一个局部变量,上一秒还是非null的,下一秒就变成null了,中间只调用了一个非托管函数. 我前几天就遇到了这样的问题,问题代码长这样: private s ...
- 用c#编写的,模仿mysql服务端协议的开源项目
是的,有一些用 C# 编写的开源项目模仿了 MySQL 服务端协议.这些项目通常用于测试.学习或实现自定义的数据库服务端逻辑.以下是一些相关的开源项目: --- ### 1. **MySqlConne ...
- C#WinForm中支持透明的TextBox控件
WinForm 的 TextBox不支持透明背景色,设置背景色透明会报错:"控件不支持透明的背景色".this.textBox1.BackColor = Color.Transpa ...
- sql server查询表结构
DECLARE @tableName NVARCHAR(MAX ) SET @tableName='表名称'; SELECT CASE WHEN col.colorder = 1 THEN obj.n ...
- JavaSE 中的队列简介
一.Java 中的队列 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构. Queue 接口与 List.Set同一级别,都是继承了Collection接口. 队列分为两大类:非阻 ...
- Linux 安装 MySQL 5.7.27 教程
1. 检查当前系统是否安装过mysql [root@yum ~]# rpm -qa|grep mariadb mariadb-libs-5.5.68-1.el7.x86_64 #已经存在 # 存在则先 ...
- 软件检测的中国方案:Gitee Test 在核心领域的实际应用
Gitee Test:国产信创安全测试领域的破局者与标准制定者 在数字化转型浪潮席卷全球的今天,软件系统已成为国家安全体系中的关键基础设施.特别是在军工.电力.轨道交通.金融等涉及国计民生的重要行业, ...
- 在富文本编辑器中实现 Markdown 流式增量解析算法
在先前我们我们实现了SSE流式输出的实现,以及基于向量检索的RAG服务,这些实现都可以算作是AI Infra的范畴.这里我们再来聊一下在SSE流式输出的基础上,将Markdown解析和富文本编辑器的渲 ...
- 岐金兰"AI元人文"构想的多维创新体系研究
岐金兰"AI元人文"构想的多维创新体系研究:从价值对齐到价值共生的范式革命 一.引言:AI发展的价值困境与新范式需求 当前人工智能发展正面临根本性挑战:主流AI范式无法有效处理人类 ...