在计算机图形学中,纹理滤波(Texture filtering)是一种针对一个使用材质贴图的像素,使用临近的一个或多个纹素计算其纹理颜色的方法。从数学上来说,纹理滤波是抗锯齿的一种,但它更着重于滤掉纹理中的高频,而不像其他抗锯齿技术那样着重于改善边界显示效果。简单来说,它使得同一个纹理可以被用于不同的形状,尺寸和角度,同时尽可能减少显示时的模糊和闪烁。
用户可以权衡计算复杂度和图像质量,在许多种纹理滤波方法中进行选择。
为何需要纹理滤波:
在应用纹理贴图时,需要对于每一个像素中心所在的位置进行查询纹理值的操作。但是由于被渲染的目标表面相对于视角,可能处于任意距离或者角度,一个像素不一定有一个纹素对应。所以需要应用某种滤波方式来决定其纹理值,缺少滤波或使用不当都会造成最终的图像存在例如锯齿和闪烁之类的瑕疵。
由于应用纹理贴图的表面相对于视角的距离和角度不同,在表面之上的一个像素和对应的纹理之上一个或多个纹素之间可能存在多种对应关系,这也导致需要应用不同的滤波方式。如果把一个正方形的纹理映射到一个正方形的表面上,在离视角的某一个距离上,屏幕上的一个像素和一个纹素几乎等尺寸。如果比这个距离近,纹素就会比像素尺寸大,这是就需要将纹素相应地放大,这就是所谓的纹理放大。同理,如果比这个距离远,纹素将比像素尺寸小,一个像素最终的纹理值就会从其覆盖的多个纹素的值计算出,这也就是通常所说的纹理缩小。常见的图像应用程序接口,例如OpenGL,提供了多种的缩小和放大滤波方式。
值得注意的是,即使在像素和纹素尺寸相等的情况下,其之间也不一定就存在一一对应的关系。例如可能存在错位而导致一个像素覆盖了相邻四个纹素的各一部分。所以仍然需要某种滤波方式。
Mipmapping:
Mipmapping是一种常见的通过预计算减小渲染时所需滤波工作的方法。在纹理放大中,所参与计算一个像素的纹理值的纹素一般是四个或更少;而在纹理缩小中,随着目标表面远离视点,整个纹理尺寸可能最终将比一个像素还小,这将造成需要其上的所有纹素进行计算,这样造成的计算量和带宽在实时渲染中是不现实的。Mipmapping通过进行预计算,并将结果存储在一系