BC 贴图压缩格式
什么是BC贴图压缩
BC(Block Compression)是一种基于块的纹理压缩技术,广泛应用于DirectX和现代GPU。它将纹理划分为4x4像素的块,每个块独立压缩,因此支持随机访问和快速解压。BC系列格式包括BC1至BC7,每种格式针对不同数据类型设计,在压缩比和图像质量之间权衡。
常见BC格式详解
- **BC1(DXT1)**:用于不透明纹理或仅需1位Alpha的纹理。每个4x4块64位,压缩比8:1(对于RGB纹理)。支持RGB和1位Alpha,但颜色精度较低,可能导致色带。
- **BC2(DXT3)**:用于具有显式Alpha的纹理。每个块128位,压缩比4:1。Alpha使用4位/像素,适合锐利Alpha边缘,但颜色部分与BC1相同。
- **BC3(DXT5)**:用于具有渐变Alpha的纹理。每个块128位,压缩比4:1。颜色部分同BC1,Alpha使用BC4格式,提供更好的Alpha平滑度。
- **BC4(ATI1)**:单通道格式,存储高度图或粗糙度等。每个块64位,压缩比2:1(对于单通道)。
- **BC5(ATI2)**:双通道格式,常用于法线贴图(存储X和Y分量)。每个块128位,压缩比4:1。质量较高。
- **BC6H**:用于HDR纹理(RGB半精度浮点)。每个块128位,压缩比6:1(对于RGB16F)。支持有符号和无符号模式。
- **BC7**:高质量RGBA格式,每个块128位,压缩比4:1。提供比BC3更好的质量,尤其适合复杂颜色和Alpha,但压缩速度较慢。
如何选择BC格式
选择BC格式取决于纹理类型和质量要求:
- **不透明颜色贴图**:常用BC1,若质量要求高可用BC7。
- **带Alpha的颜色贴图**:根据Alpha需求选择BC2或BC3,高质量用BC7。
- **法线贴图**:推荐BC5(仅保留X和Y,Z在着色器中重建)或BC1(质量较低)。注意DirectX和OpenGL法线贴图格式差异。
- **单通道数据**(如粗糙度、金属度、AO):可打包到BC4或BC7的Alpha通道。
- **HDR纹理**:使用BC6H。
BC压缩的优点和缺点
**优点**:
- 显著减少显存占用,允许更多纹理驻留。
- 降低纹理采样带宽,提升性能。
- 硬件支持解压,不增加额外计算成本。
**缺点**:
- 有损压缩,可能引入块状伪影或色带。
- 不同格式质量差异大,需要针对性选择。
- 压缩过程可能较慢(尤其BC7),影响资源导入时间。
实践中的注意事项
- **法线贴图**:使用BC5时,需要确保着色器从双通道重建Z分量,并归一化。
- **sRGB**:颜色贴图通常以sRGB格式存储,压缩时会进行颜色空间转换,确保正确解码。
- **Mipmap**:BC格式支持mipmap,建议启用以减少远处纹理闪烁。
- **平台支持**:所有现代GPU支持BC1-BC5,BC6H/BC7在较新硬件上支持。移动平台可能使用不同的压缩标准(如ETC、ASTC)。
总结
BC贴图压缩是实时渲染中优化内存和带宽的重要工具。理解不同BC格式的特点,有助于在项目中做出合理选择,平衡质量与性能。
常见问题
BC1和BC7有什么区别?
BC1压缩比高(8:1),但颜色质量较低,仅支持1位Alpha;BC7压缩比4:1,但颜色和Alpha质量更高,适合复杂纹理,但压缩速度较慢。
法线贴图应该使用哪种BC格式?
推荐使用BC5,它存储双通道数据,质量高且压缩比4:1,适合法线贴图的X和Y分量。若质量要求较低,也可使用BC1。
移动平台支持BC格式吗?
大多数移动GPU不支持BC格式,而是使用ETC、ASTC等。因此移动开发需使用平台特定格式或选择通用格式。
BC压缩会导致明显的质量损失吗?
取决于格式和纹理内容。BC1可能在平滑渐变上产生色带,BC7通常能提供接近无损的视觉质量。合理选择格式可以平衡。
如何生成BC压缩纹理?
可以使用GPU厂商提供的工具(如NVIDIA Texture Tools、AMD Compressonator)或引擎的导入设置自动压缩。许多图像编辑软件也支持导出BC格式。