【从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[纹理压缩]算法多平台对比的更多相关文章

  1. Unity --- 纹理压缩基本知识点

    1.Unity支持的压缩格式的分类,这里主要指Android平台和IOS平台: DXT格式 --- Nvidia Tegra(图睿)提供ETC  --- 安卓原生支持的,OPNEGL2.0都支持,ET ...

  2. Unity游戏开发图片纹理压缩方案

    Unity3D引擎对纹理的处理是智能的:不论你放入的是PNG,PSD还是TGA,它们都会被自动转换成Unity自己的Texture2D格式. 在Texture2D的设置选项中,你可以针对不同的平台,设 ...

  3. DXT纹理压缩

    转:http://blog.csdn.net/lhc717/article/details/6802951 我们知道游戏中对于3D物体表面细节的表现最重要的还是靠贴图来实现的,那么越是高分辨率越是真彩 ...

  4. 201871010203-陈鹏昱 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 学习软件工程的理论和知识,掌握软件开发流程,增强实践能力 这个作业在哪些方面帮助我实现学习目标 体验软件项目开发中 ...

  5. 201871030139-于泽浩 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    201871030139-于泽浩 实验三 结对项目-<D{0-1}KP 实例数据集算法实验平台>项目报告 项目 内容 课程班级博客链接 2018级卓越班 这个作业要求链接 软件工程结对项目 ...

  6. 国内app快速生成平台对比

     泰格老虎 2013-03-07 00:39:10 这是海恒CEO高鹏写的一篇国内app快速生成平台对比文章,介绍了国内快速生成APP的平台与自己平台的对比,很有参考价值. 同类网站 安米网 http ...

  7. Unity3D for Android 纹理压缩支持

    http://blog.csdn.net/asd237241291/article/details/48548557 首先附图:Unity3D for Android支持的纹理压缩格式 纹理压缩可以通 ...

  8. 201871010110-李华 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)理解并掌握代码风格及设计规范:(2)通过任务3进行协作开发,尝试进行代码复审,在进行同伴复审的过程中体会结对 ...

  9. 201871030108-冯永萍 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    实验三 软件工程结对项目 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs ...

  10. 201871030116-李小龙 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

随机推荐

  1. 1010 Reports

    http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1010&cid=909 Reports Time Limit: 2000 ...

  2. 记一次C#平台调用中因非托管union类型导致的内存访问越界

    离奇现象 大家在C#代码中遇到这样的问题吗:一个局部变量,上一秒还是非null的,下一秒就变成null了,中间只调用了一个非托管函数. 我前几天就遇到了这样的问题,问题代码长这样: private s ...

  3. 用c#编写的,模仿mysql服务端协议的开源项目

    是的,有一些用 C# 编写的开源项目模仿了 MySQL 服务端协议.这些项目通常用于测试.学习或实现自定义的数据库服务端逻辑.以下是一些相关的开源项目: --- ### 1. **MySqlConne ...

  4. C#WinForm中支持透明的TextBox控件

    WinForm 的 TextBox不支持透明背景色,设置背景色透明会报错:"控件不支持透明的背景色".this.textBox1.BackColor = Color.Transpa ...

  5. sql server查询表结构

    DECLARE @tableName NVARCHAR(MAX ) SET @tableName='表名称'; SELECT CASE WHEN col.colorder = 1 THEN obj.n ...

  6. JavaSE 中的队列简介

    一.Java 中的队列 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构. Queue 接口与 List.Set同一级别,都是继承了Collection接口. 队列分为两大类:非阻 ...

  7. Linux 安装 MySQL 5.7.27 教程

    1. 检查当前系统是否安装过mysql [root@yum ~]# rpm -qa|grep mariadb mariadb-libs-5.5.68-1.el7.x86_64 #已经存在 # 存在则先 ...

  8. 软件检测的中国方案:Gitee Test 在核心领域的实际应用

    Gitee Test:国产信创安全测试领域的破局者与标准制定者 在数字化转型浪潮席卷全球的今天,软件系统已成为国家安全体系中的关键基础设施.特别是在军工.电力.轨道交通.金融等涉及国计民生的重要行业, ...

  9. 在富文本编辑器中实现 Markdown 流式增量解析算法

    在先前我们我们实现了SSE流式输出的实现,以及基于向量检索的RAG服务,这些实现都可以算作是AI Infra的范畴.这里我们再来聊一下在SSE流式输出的基础上,将Markdown解析和富文本编辑器的渲 ...

  10. 岐金兰"AI元人文"构想的多维创新体系研究

    岐金兰"AI元人文"构想的多维创新体系研究:从价值对齐到价值共生的范式革命 一.引言:AI发展的价值困境与新范式需求 当前人工智能发展正面临根本性挑战:主流AI范式无法有效处理人类 ...