You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

块压缩格式(如BC1)的MipMap生成及小尺寸层级处理疑问

针对BC1块压缩格式的Mip层级生成方案

首先先修正原图128×64的常规Mip层级编号错误,完整层级如下:

Mip 0: 128 x 64
Mip 1: 64 x 32
Mip 2: 32 x 16
Mip 3: 16 x 8
Mip 4: 8 x 4
Mip 5: 4 x 2
Mip 6: 2 x 1
Mip 7: 1 x 1

针对BC1这类要求尺寸为4的倍数的块压缩格式,正确的Mip层级生成与处理方式如下:

1. 需完整生成全链路Mip层级

不能在4×4层级停止,必须生成到1×1的层级。这是因为硬件在纹理采样的LOD过渡过程中依赖完整的Mip链,DirectX规范对此有明确说明:

采样硬件使用虚拟尺寸;采样纹理时会忽略内存填充。对于小于4×4的MipMap层级,2×2的映射仅会使用前4个texel,1×1的块仅会使用第一个texel。但目前没有API结构可暴露包含内存填充的物理尺寸。

2. 小于4×4层级的填充规则

对于尺寸不足4×4的Mip层级,需先填充至4×4的虚拟尺寸再进行块压缩,填充逻辑遵循边缘重复原则:

  • 若维度横向不足4,重复最右侧的texel填充至4列;纵向不足4则重复最底部的texel填充至4行。
    • 比如Mip5(4×2):将第2行的内容重复填充到第3、4行,得到4×4的虚拟块;
    • 比如Mip6(2×1):横向将第2列重复填充到3、4列,纵向将第1行重复填充到2、3、4行;
    • 比如Mip7(1×1):用唯一的texel值填充整个4×4块。
  • 这种填充方式能保证LOD采样过渡平滑,契合硬件默认的纹理Clamp寻址逻辑,避免出现颜色断层。

3. 压缩与采样的实际逻辑

块压缩基于填充后的4×4块编码,但硬件采样时会严格按照该Mip层级的虚拟尺寸读取有效区域,填充的冗余部分会被直接忽略,不会影响最终采样结果。

内容的提问来源于stack exchange,提问作者Zebrafish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 06:52:42