Mipmap笔记

为何要使用mipmap

Mipmap笔记

如上图,假设像素覆盖的纹理范围是上图中的黑点的连线范围,那么在连线范围内的纹素(texel)都对改像素有贡献,要做的filter的半径就比较大,效率就低。

解决办法就是prefilter texel,额外把prefilter后的texel存下来,即mipmap。

 

Triangle Filter下的mipmap level选取

像素覆盖的texel的范围:(s和t方向)。

原则,filter width刚好覆盖选择level的4个texel。

如果mipmap层的数量是nLevels,当前层是Mipmap笔记,那么对应的resolution是:

Mipmap笔记

假设一个texel在纹理坐标系[0, 1]²下的spacing是w = 1/res,例如纹理大小是512,那么w = 1/512。

那么上式写成如下:

Mipmap笔记

Mipmap笔记

Mipmap笔记

不要纠结这个公式怎么来的,代入验证自然是正确的。

再看w如何算?

纹理坐标系(s,t)对raster坐标系(x,y)求导,求最大值:

w = max(∂s/∂x, ∂s/∂y, ∂t/∂x, ∂t/∂y)。

由于我们要求的是覆盖4个像素的w,所以w = w * 2。