DXT3 (BC2) 压缩格式 alpha 数据

DXT3 (BC2) compression format alpha data

我正在尝试从 dds 文件中读取图像信息。我设法让 DXT1 和 DXT5 格式正常工作,但是我对 DXT3 格式(也称为 BC2)的 alpha 数据有疑问。 查看压缩后的布局时 BC2 block,它显示 16 像素块的 alpha 数据存储在数据的前 8 个字节中,每个值占用 4 位。

这是否意味着,由于存储的alpha值只能是0-15,实际的alpha数据计算如下:

unsigned char bitvalue = GetAlphaBitValue(); // assume this works and gets the 4-bit value i am looking for
unsigned char alpha = (bitvalue / 15.0f) * 255;

这是正确的,还是我看错了?

这就是 this specification 的意思:

The alpha component for a texel at location (x,y) in the block is
given by alpha(x,y) / 15.

因为结果应该在 [0 .. 1] 中,而不是 [0 .. 255]。

由于 255 可以被 15 整除,因此将 [0 .. 255] 转换为

可能更容易理解
uint8_t alpha = bitvalue * 17;

现在更明显的是,通常的 "replicate" 映射(就像 CSS 短颜色代码一样)可以很好地传播输出值(允许最小值和要编码的最大值,并且所有值之间的步长相等)。