【从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. llamafactory文档

    https://llamafactory.readthedocs.io/zh-cn/latest/index.html https://blog.csdn.net/python12345678_/ar ...

  2. Semantic Kernel 入门教程

    https://www.bilibili.com/video/BV1sr4y1f7zb/?spm_id_from=333.337.search-card.all.click&vd_source ...

  3. 技术分享 | MySQL TEXT 字段的限制

    一.背景说明项目中有一个数据交换的场景,由于使用了很多个 varchar(1000).varchar(2000),导致在创建表的时候,MySQL 提示: ERROR 1118 (42000): Row ...

  4. Mock 在 API 研发中的痛点、价值与进化及Apipost解决方案最佳实践

    在日常 API 研发过程中,Mock 是一个几乎无法绕开的话题.无论是项目初期的快速迭代,还是接口尚未就绪的场景,Mock 都能帮助我们在「没有真实后端数据」的情况下,保障前端开发的连续性和效率. 一 ...

  5. 每个 PHP 开发者都应该了解的 10 个必备 PHP 库

    每个 PHP 开发者都应该了解的 10 个必备 PHP 库 作为 PHP 开发者,我们都面临着同样的问题:重复性任务占用了太多时间.无论是管理数据库.发送邮件,还是处理图片,我们经常为每个项目编写相同 ...

  6. bash传参的使用记录

    cat > 1.sh << \EOF temp=$(getopt -o V:U:P:h --long version:,username:,password:,help -- &qu ...

  7. iOS播放音频

    转载请注明出处!!! 1.播放网络音频 NSURL * url = [NSURL URLWithString:MP3URL]; AVPlayerItem * songItem = [[AVPlayer ...

  8. 关于vue index.html文件引用本地js资源文件打包后404的问题

    1.vue-cli3之后要加载本地js资源,可以将js文件放在public文件下,即与index.html文件同级(可以创文件夹放文件夹中,比较规范) 2.在index文件中引入 这里要注意两种写法, ...

  9. 模拟集成电路设计系列博客——6.4.1 电阻电容混合DAC

    6.4.1 电阻电容混合DAC 在混合设计中,需要以不同的比例组合前三章中讨论的三种技术.混合设计是设计DA转换器中的一种流行方式,因为它能够组合不同方式的优点.例如,在设计中经常使用温度计码处理高几 ...

  10. Ubuntu20.04 安装向日葵SunloginClient并解决报错缺少依赖问题的解决方法

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...