金字塔纹理(MIPMAP)也称为多级渐远纹理,它为一个纹理存储多个分辨率版本,以便根据观察者的距离选择合适的分辨率,从而提高渲染效率并避免纹理的锯齿效应
对于 MIPMAP 纹理采样,WebGL 提供了四种不同的过滤模式,分别是:
gl.NEAREST_MIPMAP_NEAREST
:- 纹理过滤:使用最接近的 MIPMAP 级别的纹理
- MIPMAP 过滤:在选择的 MIPMAP 级别中,使用最接近的纹理像素
- 效果:这种模式选择一个最接近的 MIPMAP 级别,并在该级别使用最近邻过滤。这种方法速度最快,但可能导致明显的纹理切换和较低的质量
gl.LINEAR_MIPMAP_NEAREST
:- 纹理过滤:使用最接近的 MIPMAP 级别的纹理
- MIPMAP 过滤:在选择的 MIPMAP 级别中,使用线性过滤(双线性过滤)
- 效果:这种模式选择一个最接近的 MIPMAP 级别,并在该级别使用线性过滤。这种方法比
NEAREST_MIPMAP_NEAREST
稍慢,但可以提供更平滑的效果
gl.NEAREST_MIPMAP_LINEAR
:- 纹理过滤:在两个最接近的 MIPMAP 级别之间进行线性插值
- MIPMAP 过滤:在每个 MIPMAP 级别中,使用最接近的纹理像素
- 效果:这种模式在两个最接近的 MIPMAP 级别之间进行线性插值,并在每个级别中使用最近邻过滤。这种方法可以提供比
NEAREST_MIPMAP_NEAREST
更平滑的效果,但性能稍差
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
相比,该方法会有更佳的匹配,但是会有较大的开销)