flowchart TD
Start[选择贴图格式] --> HDR{HDR 内容?}
HDR -->|是:IBL / Lightmap / 天空盒| Platform_HDR{目标平台?}
Platform_HDR -->|PC / 主机| BC6H[**BC6H**<br/>RGB f16]
Platform_HDR -->|移动端| ASTC_HDR[**ASTC HDR**<br/>灵活码率]
HDR -->|否| Target{目标平台?}
Target -->|移动端| ASTC_Support{设备支持ASTC?}
ASTC_Support -->|是| ASTC[**ASTC**<br/>灵活码率]
ASTC_Support -->|否| ETC2[**ETC2 / EAC**<br/>OpenGL ES 3.0+ 兜底]
Target -->|PC / 主机| DataType{数据类型?}
DataType -->|色贴,无 alpha| Q1{需要高质量?}
Q1 -->|否,省显存| BC1[**BC1/DXT1**<br/>RGB]
Q1 -->|是,平滑渐变| BC7[**BC7**<br/>RGB]
DataType -->|色贴 + 平滑 alpha| BC3[**BC3/DXT5**<br/>RGBA]
DataType -->|色贴 + 高质量 alpha| BC7b[**BC7**<br/>RGBA]
DataType -->|切线空间法线| BC5[**BC5**<br/>RG]
DataType -->|单通道灰度| BC4[**BC4**<br/>R]
一、 桌面端与主机端
桌面端 GPU(NVIDIA / AMD / Intel)全面支持 DirectX 的 BCn (Block Compression) 体系。
| 格式 | 通道 | 现代工程地位与应用场景 |
|---|---|---|
| BC7 | RGBA | 🏆 现代 LDR (低动态范围) 贴图的绝对王者。DX11+ 硬件标配。画质极高,几乎无可见瑕疵,全面替代了老一代的 BC3 (DXT5)。用于角色 diffuse、复杂材质贴图等对画质要求高的场景。 |
| BC6H | RGB (HDR) | 🏆 HDR 贴图标配。用于 Cubemap、HDR 环境光照贴图、发光材质等。支持极高亮度的浮点数据压缩。 |
| BC5 | RG (双通道) | 🏆 法线贴图 (Normal Map) 标配。只存 X 和 Y 通道,Z 通道在 Shader 中实时推导。比存 RGB 省一半空间,且画质优于 BC3。 |
| BC4 | R (单通道) | 常用。用于高度图、金属度/粗糙度遮罩、UI 字体、灰度图等单通道数据。 |
| BC1 | RGB | 老项目/低配兼容。无 Alpha 或仅 1-bit Alpha。现代 3A 项目中较少使用,多用于对画质要求不低的远景或低模贴图。 |
| BC3 | RGBA | 逐渐被替代。带平滑 Alpha 的 RGBA。在 BC7 普及前是透明贴图的主力,现在多用于需要兼容老旧 DX9/DX10 硬件的项目。 |
二、 移动端
移动端 GPU 架构(ARM Mali、高通 Adreno、苹果自研 GPU 等)曾高度碎片化,但近年来已收敛到以下标准:
| 格式 | 现代工程地位与应用场景 |
|---|---|
| ASTC(Adaptive Scalable Texture Compression) | 🏆 现代移动端的绝对霸主。Khronos 官方标准,Vulkan / OpenGL ES 3.2 / Metal 广泛支持。苹果 A8 芯片及以上、近几年的 Android 手机接近 100% 支持。 最大优势:极其灵活。支持从 4x4 到 12x12 的各种块大小(Block Size),开发者可以自由在“极致画质”和“极限压缩率”之间做权衡。支持 LDR、HDR、单/多通道。 |
| ETC2 / EAC | 🛡️ 保底兼容方案。OpenGL ES 3.0 的强制标准。如果目标用户包含极老旧的低端安卓机(不支持 ASTC),ETC2 是最后的底线。缺点:RGBA 透明贴图的压缩质量和压缩率不如 ASTC。 |