纹理压缩格式详解:ASTC、BC、ETC 与 PVRTC
概述 纹理压缩(Texture Compression)是实时渲染中降低显存占用和带宽消耗的核心技术。与通用图像压缩(如 PNG、JPEG)不同,硬件纹理压缩格式支持随机访问——GPU 无需解压整幅图像即可直接读取单个 texel,这对纹理缓存和着色器采样至关重要。 本文系统梳理主流硬件纹理压缩格式的技术细节、适用场景及硬件支持情况,所有关键数据均来自官方文档与公开规范。 BC 系列(Block Compression) BC 系列是 DirectX 生态中最主流的压缩格式,由 S3TC(DXT)发展而来,后续经 RGTC、BPTC 扩展为今日形态。所有 BC 格式均以固定 4×4 texel 块为单位进行编码。 BC1(原 DXT1 / S3TC) 数据量:64 bits / 4×4 block(4 bpp) 结构:两个 16-bit RGB565 端点色 + 16 个 2-bit 索引 色板:4 色(两个端点 + 两个插值色) Alpha:无独立 alpha,仅支持 1-bit “镂空”(punch-through)透明 支持通道:RGB(无独立 Alpha) 典型用途:不透明漫反射贴图、简单遮罩 据 Khronos Data Format Specification 描述,BC1 的 1-bit alpha 行为由两个端点值的相对大小决定: color0 > color1(按无符号整数比较):4 色不透明模式,00/01/10/11 均为插值颜色,无透明 color0 <= color1:3 色 + 透明模式,11 表示完全透明像素(alpha = 0) 实际使用方式 编码端:向压缩器提供带 Alpha 的源图(如 PNG with 1-bit alpha),大多数 BC1 编码器(如 DirectXTex、nvcompress、Compressonator)会自动判断 block 是否需要透明模式。若源图 alpha 为纯 0/255,编码器会尽量使用 color0 <= color1 模式将 11 映射为透明。 ...