Direct3D 9) (压缩纹理资源

纹理贴图是指在三维图形上绘制以添加视觉细节的数字化图像。 它们在光栅化期间被贴图到这些形状,而此过程会占用大量系统总线和内存。 为了降低纹理占用的内存量,Direct3D 支持压缩纹理曲面。 某些 Direct3D 设备支持本机压缩纹理曲面。 在这些设备上,当创建压缩曲面并载入数据后,此曲面可像任何其他纹理曲面一样在 Direct3D 中使用。 纹理被贴图到 3D 对象时,Direct3D 将处理解压缩。

存储效率和纹理压缩

所有纹理压缩格式都是二的幂。 虽然这并不意味着纹理一定是平方数,但它意味着 x 和 y 都是二的幂。 例如,如果纹理最初为 512 x 128 字节,下一个 Mip 贴图将为 256 x 64,依此类推,每个级别降低二次方。 在较低级别时,纹理被筛选为 16 x 2 和 8 x 1,由于压缩块始终为 4 x 4 纹素块,因此会出现浪费的位。 块中未使用部分将被填充。 尽管最低级别有浪费的位,但是整体增益仍然可观。 从理论上说,最糟糕的情况是 2K x 1 纹理(2⁰ 幂)。 此处,仅对每个块的单行像素进行编码,而未使用块的剩余部分。

在单个纹理中混合格式

任何一个纹理必须指定其数据存储为 64 位还是 128 位(每个 16 纹素组)。 如果纹理使用 64 位块(即格式 DXT1),则在同一纹理中基于每个块混合不透明和 1 位 alpha 格式。 换言之,分别为每个 16 纹素块比较 color_0 和 color_1 的无符号整数度量值。

使用 128 位块后,必须以显式 (格式 DXT2 和 DXT3) 或内插模式( (整个纹理的格式 DXT4 和 DXT5) )指定 alpha 通道。 与颜色一样,当选择内插模式 (格式 DXT4 和 DXT5) 时,可以逐个块使用 8 个内插 alpha 或 6 个内插 alphas 模式。 同样,分别为每个块比较 alpha_0 和 alpha_1 的度量值。

Direct3D 提供了压缩用于对 3D 模型进行纹理处理的曲面的服务。 此部分提供了有关如何在压缩纹理曲面中创建和操作数据的信息。

信息包含在以下主题中。

Direct3D 纹理