金字塔纹理(MIPMAP)也称为多级渐远纹理,它为一个纹理存储多个分辨率版本,以便根据观察者的距离选择合适的分辨率,从而提高渲染效率并避免纹理的锯齿效应

对于 MIPMAP 纹理采样,WebGL 提供了四种不同的过滤模式,分别是:

  1. gl.NEAREST_MIPMAP_NEAREST
    • 纹理过滤:使用最接近的 MIPMAP 级别的纹理
    • MIPMAP 过滤:在选择的 MIPMAP 级别中,使用最接近的纹理像素
    • 效果:这种模式选择一个最接近的 MIPMAP 级别,并在该级别使用最近邻过滤。这种方法速度最快,但可能导致明显的纹理切换和较低的质量
  2. gl.LINEAR_MIPMAP_NEAREST
    • 纹理过滤:使用最接近的 MIPMAP 级别的纹理
    • MIPMAP 过滤:在选择的 MIPMAP 级别中,使用线性过滤(双线性过滤)
    • 效果:这种模式选择一个最接近的 MIPMAP 级别,并在该级别使用线性过滤。这种方法比 NEAREST_MIPMAP_NEAREST 稍慢,但可以提供更平滑的效果
  3. gl.NEAREST_MIPMAP_LINEAR
    • 纹理过滤:在两个最接近的 MIPMAP 级别之间进行线性插值
    • MIPMAP 过滤:在每个 MIPMAP 级别中,使用最接近的纹理像素
    • 效果:这种模式在两个最接近的 MIPMAP 级别之间进行线性插值,并在每个级别中使用最近邻过滤。这种方法可以提供比 NEAREST_MIPMAP_NEAREST 更平滑的效果,但性能稍差
  4. gl.LINEAR_MIPMAP_LINEAR
    • 纹理过滤:在两个最接近的 MIPMAP 级别之间进行线性插值
    • MIPMAP 过滤:在每个 MIPMAP 级别中,使用线性过滤(双线性过滤)
    • 效果:这种模式在两个最接近的 MIPMAP 级别之间进行线性插值,并在每个级别中使用线性过滤。这种方法提供了最平滑的效果,但也是最耗性能的

简单来说:

gl.AA_MIPMAP_BB 分为两个部分:AA_MIPMAP_BB

  • AA:如何像素点采样
    • NEAREST:最近邻插值。使用原纹理上距离(曼哈顿距离)映射后像素(新像素)中心最近的那个像素的颜色值,作为新像素的值
    • LINEAR:双线性插值。使用距离新像素中心最近的四个像素的颜色值的加权平均,作为新像素的值(与 NEAREST 相比,该方法图像质量更好,但是会有较大的开销)
  • _MIPMAP_BB:如何选择 mip 层级
    • _MIPMAP_NEAREST:选择最接近的 mip 层级
    • _MIPMAP_LINEAR:在两个 mip 层级间做线性插值以找到最佳匹配(与 _MIPMAP_NEAREST 相比,该方法会有更佳的匹配,但是会有较大的开销)