Unity 贴图压缩格式 笔记

一、压缩格式一览:

平台 核心格式
Windows/Mac/Linux (桌面) DXT1、DXT5、BC4、BC5、BC6H、BC7
Android (移动端) ETC1、ETC2、ASTC
iOS (移动端) PVRTC、ASTC
Web (浏览器) DXT (桌面端) 、ASTC (移动端)

二、(桌面端) DXT 和 BC压缩格式:

DXT全称是 DirectX Texture Compression(DirectX 贴图压缩),是微软为DirectX接口设计的纹理压缩标准。

BC全称是 Block Compression (块压缩),它其实是 DXT 格式的官方标准名称。

命名统一:

微软在 DirectX 10 之后,为了规范命名,不再使用 DXT,而是将它们统一改名为 BC 系列。

第一代 (DirectX 9 时代,旧称 DXT)

这部分其实就是我们常用的 DXT1 到 DXT5,专门为普通的 RGB 和 RGBA 图片设计。

标准名称 旧称 (DXT) 主要用途
BC1 DXT1 不透明贴图,压缩比最高
BC2 DXT3 带"硬边缘"透明的贴图(如UI)
BC3 DXT5 带"平滑渐变"透明的贴图(最常用)

第二代 (DirectX 10/11 时代,新增)

为了解决法线贴图等特殊需求,以及追求更高画质而加入的新格式。

标准名称 旧称 (DXT) 专长领域
BC4 无 单通道纹理(如高度图、灰度图)
BC5 无 双通道纹理(专为法线贴图优化)
BC6H 无 HDR(高动态范围)贴图
BC7 无 高品质 RGB/RGBA(最佳画质,现代首选)

所以,BC 就是 DXT 的"学名",代表了这套从 1998 年沿用至今、被所有 GPU 硬件原生支持的纹理压缩技术。你在 Unity 里看到的 BC7 选项,就是 BC 家族里目前画质最好的成员。
核心原理 :名字里的"块"(Block)是指它会将纹理切成 4x4像素 的小块,对每个块单独压缩。这让显卡可以直接读取压缩数据,速度极快。

**注意:**BC 格式都要求贴图尺寸是 4 的倍数。

原因:

BC 系列的核心原理是把贴图切成 4x4 像素的块,对每个块单独压缩。如果贴图边长不是 4 的倍数,边缘无法形成完整的块,GPU 就无法直接读取压缩数据。


三、(移动端)ETC1 vs ETC2

  • ETC:Ericsson Texture Compression(爱立信纹理压缩)

快速对比表:

特性 ETC1 ETC2
核心差异 不支持透明通道 (Alpha) 完整支持 RGBA (含透明通道)
硬件要求 OpenGL ES 2.0 (几乎所有 Android 设备) OpenGL ES 3.0 (2014年后大部分中高端设备)
压缩质量 基准水平 质量更高,PSNR 平均提升约 0.5-1 dB
压缩比 6:1 (4 bits/像素) 6:1 (4 bits/像素,RGBA 为 8 bits/像素)
尺寸要求 需要 2 的幂次方 需要 2 的幂次方

四、(移动端)ASTC

ASTC (Adaptive Scalable Texture Compression) 是由 Arm 和 AMD 开发、Khronos Group 发布的先进纹理压缩标准。与 ETC1/ETC2 的固定压缩策略 不同,ASTC 的最大特点是灵活自适应,它已成为现代移动平台(尤其是 iOS 和 Android 中高端设备)的主流选择。

编码逻辑对比:

特性 ETC/传统压缩格式 ASTC(自适应可伸缩纹理压缩)
核心方式 固定块大小 (如 4x4 像素块) 可变块大小 (可选 4x4 到 12x12)
处理逻辑 将纹理严格切割成固定大小的块独立压缩,这就要求纹理尺寸必须是块大小的整数倍(如 4 的倍数) 编码器根据纹理尺寸和选择的块大小,在边缘自动进行**填充(Padding)**或适配处理
结果 对尺寸有严格要求( 2 的幂次方) 理论上支持任意尺寸 (NPOT)
完整支持 RGBA + HDR
  • 原生支持 Alpha 通道:与 ETC2 相同,无需拆分处理。

  • 支持 HDR 纹理:ASTC HDR 扩展可以压缩高动态范围纹理,用于光照等效果。

在相同的存储空间下,ASTC 能提供比 ETC2 更好的画质。学术测试数据如下:

格式 RGBA 纹理 PSNR 说明
ETC2 ~39.94 dB 基线质量
ASTC 4x4 45.01 dB 显著高于 ETC2

PSNR 值越高表示压缩质量越好,5 dB 的差距在人眼观察下相当明显。

实战选型:Unity 中如何选择块大小?

根据纹理类型选择合适的 ASTC 块大小,可以显著优化内存和包体:

纹理类型 推荐块大小 理由
3D 角色面部、UI 图标 ASTC 4x4 或 5x5 细节丰富,容不得瑕疵
普通场景贴图、建筑 ASTC 6x6 平衡画质与内存的首选
大面积背景、地形 ASTC 8x8 细节要求低,内存节约明显
法线贴图 ASTC 4x4 或 5x5 法线精度敏感,块不宜过大
带 Alpha 的特效贴图 ASTC 4x4 或 5x5 Alpha 通道需要更高精度

Unity 官方也建议:在分辨率不变的情况下,提高压缩等级(如从 ASTC 6x6 改为 8x8),纯色背景可减少 3/4 内存而视觉无差异。

ASTC 最大的"代价"------对设备硬件有要求。

平台 支持情况 起始设备
iOS A8 芯片起支持 iPhone 6、iPad mini 4 及更新机型
Android OpenGL ES 3.1 / Vulkan Adreno 4xx (2015)、Mali T624 (2012)、Tegra K1 (2014) 起
Web 需查询浏览器 WebGL 扩展 需 WEBGL_compressed_texture_astc 支持

关键结论:2014-2015 年以后的设备基本都支持 ASTC。老旧设备(如 iPhone 5s)不支持,Unity 会自动降级解压为 RGBA32,会导致内存激增。


五、JPEG图像存储格式 和GPU纹理压缩格式

JPEG是一种通用的图像存储格式 ,与你之前问的那些GPU纹理压缩格式,用途完全不同。

核心区别速览

特性 JPEG (存储格式) DXT/BC/ASTC/ETC (GPU纹理格式)
主要用途 存储照片、网络传输、磁盘保存 GPU实时渲染,供显卡直接采样使用
使用阶段 开发资源、最终发布包体 游戏运行时 (显存中)
压缩方式 复杂变换编码 (DCT/小波) 块压缩 (Block Compression)
是否开源 是 (标准公开) 大部分是 (ASTC/ETC开源,BC为行业标准)

1、与GPU压缩格式的本质区别

Unity文档明确指出:GPU在运行时不直接使用JPEG或PNG格式。原因如下:

  • 解码成本 :JPEG是面向存储优化的,GPU无法直接解析这种复杂编码。每次渲染都需要CPU解压,性能极差。

  • 随机访问:GPU渲染时需要快速任意读取纹理中的像素。JPEG压缩方式效率很低,而BC、ASTC等格式将纹理切成固定小块(如4x4),GPU能瞬间定位并解压。

2、 在Unity中的关系

你在Unity里看一张贴图,流程是这样的:

  1. 源文件 (JPEG/PNG) :放在 Assets 文件夹里,占用硬盘空间小,方便管理。

  2. 运行时转换 :构建项目时,Unity编辑器自动把JPEG转换成平台对应的格式(如Android转ASTC、Windows转DXT/BC7)。

  3. 最终格式 (ASTC/BC7) :打进包体里,运行时加载进显存,供GPU直接使用。

JPEG是存硬盘用的"交换格式",ASTC/DXT是供显卡使用的"运行时格式"。

GPU纹理格式的核心目的正是降低显存占用 和减少带宽压力。

  1. 省显存 :同样画质,显存占用减少 75%-90%

省带宽 :GPU读取纹理时传输数据更少,渲染速度更快

压缩格式不能 减小硬盘上的包体大小(那是JPEG/PNG的事),它优化的是运行时显存。

相关推荐
yi0113 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
志尊宝4 小时前
Vue3 零基础每日笔记(073):keep-alive 页面缓存实战——列表页返回不丢状态
vue.js·笔记·缓存·#vue #前端 #前端开发·#javascript·#vue.js
weixin_448119946 小时前
Datawhale Easy Data × AI:笔记1 已重做,看新的笔记
笔记
要开心吖ZSH7 小时前
MySQL 慢 SQL 排查操作手册-个人笔记版
java·笔记·sql·mysql·慢查询
咖啡忍者8 小时前
【SAP】程制造生产计划PP-PI(Production Planning for Process Industries)
笔记
Titan20249 小时前
MySQL索引学习笔记
笔记·学习·mysql
zhangrelay9 小时前
Arduino-MEGA-ESP单片机理论课笔记02-硬件-2026
笔记·单片机·嵌入式硬件
AOI小白新手上路9 小时前
VDMamba·AutoDL 复现笔记 · 学习笔记
笔记·学习
ACP广源盛1392462567311 小时前
USB3.0 高速信号切换方案评估,LH3412 @ACP双通道差分开关硬件选型笔记
笔记·硬件架构·硬件工程·国产芯片·开关
自不量力的A同学11 小时前
Goldfish Scheme v18.11.39 发布了:迈向现代宏系统与多核并发
笔记