压缩纹理资源 (Direct3D 9)
纹理贴图是在三维形状上绘制的数字化图像,可添加视觉细节。 它们在光栅化期间映射到这些形状,并且该过程可以使用大量的系统总线和内存。 为了减少纹理消耗的内存量,Direct3D 支持压缩纹理图面。 某些 Direct3D 设备原生支持压缩纹理表面。 在此类设备上,创建压缩图面并将数据加载到其中时,该图面可以像任何其他纹理图面一样在 Direct3D 中使用。 当纹理映射到 3D 对象时,Direct3D 处理解压缩。
存储效率和纹理压缩
所有纹理压缩格式都是两种幂。 虽然这并不意味着纹理一定是正方形的,但它确实意味着 x 和 y 都是两个幂。 例如,如果纹理最初为 512 到 128 个字节,则下一个 mipmapping 将为 256 到 64,依此等,每个级别将减少一个幂 2。 在较低级别的纹理被筛选为 16 到 2 和 8 到 1 时,将存在浪费位,因为压缩块始终为 4 到 4 块纹素。 填充块的未使用部分。 尽管在最低级别存在浪费位,但总体增益仍然很大。 最坏的情况是,从理论上讲,一个2K乘1纹理(2⁰力量)。 在这里,每个块只对一行像素进行编码,而其余块则未使用。
在单个纹理中混合格式
请务必注意,任何单个纹理都必须指定其数据存储为每个组 16 个纹素的 64 位或 128 位。 如果 64 位块(即 DXT1 格式)用于纹理,则可以在同一纹理中基于每个块混合不透明和 1 位 alpha 格式。 换句话说,对 16 个纹素块的每个块执行无符号整数数量级color_0和color_1的比较。
使用 128 位块后,必须为整个纹理指定 alpha 通道(格式为 DXT2 和 DXT3)或内插模式(格式 DXT4 和 DXT5)。 与颜色一样,在选择内插模式(格式 DXT4 和 DXT5)时,可以逐个块使用 8 个内插 alpha 或 6 个内插 alphas 模式。 再次对alpha_0和alpha_1进行数量级比较时,逐个块执行。
Direct3D 提供服务,用于压缩用于纹理 3D 模型的图面。 本部分提供有关在压缩纹理图面中创建和作数据的信息。
信息包含在以下主题中。
- 不透明和 1 位 Alpha 纹理(Direct3D 9)
- 使用 Alpha 通道 纹理 (Direct3D 9)
- 压缩纹理格式 (Direct3D 9)
- 使用压缩纹理(Direct3D 9)
相关主题