前言

当纹理贴到具体的像素上时,纹理中心不一定位置上刚好对应着像素坐标的中心,因此在贴图时会产生一定的偏差,会产生模糊错位等问题。这时我们就需要纹理的映射过程进行一定的处理时,这就是纹理过滤。

最近点采样(Nearest Point Sampling)

这是一种最简单的采样过滤方式,它对于纹理采样点texel与最终画面上的pixel不对应时,会采样离这个pixel最近的texel进行采样。这种方式一看就是简单粗暴的方式,实际效果也不是很理想。

双线性过滤(Bilinear)

与之前的最近点采样相比,双线性过滤在它的基础上,对每个pixel周围四个texel进行采样,根据离pixel的距离进行加权平均。这种方法比之前简单粗暴型好不少,但效果仍然不是很好

三线性过滤(Trilinear)

在双线性过滤中只选取了texel和pixel之间大小最接近的一层mipmap进行采样,而三线性则是分别对texel与pixel最接近的两层mipmap进行双线性采样然后再将这两层的结果进行线性插值。

Mipmap

mipmap就是针对不同大小的像素长宽按相同比例分别生成不同大小的纹理,如下图就是一张mipmap,这张图中分别有128X128,64X64,32X32,16X16,8X8,4X4,2X2,1X1,八张图,这就组成一个mipmap
纹理过滤

各向异性过滤(Anisotropic Filtering)

之前的几种纹理过滤方式都是各向同性,也就是他们在纹理贴图时是默认贴图是平行于屏幕进行贴的,但实际是贴图会与屏幕有一定倾斜的。这个倾斜会导致投射到屏幕空间后U方向和V方向比例是不一样的,因此我们引入各向异性。与各向同性的mipmap中纹理都是正方形不同,各向异性过滤会按比例在各方向上采样不同数量的点来进行计算,如下图所示采样可能是长方形。

纹理过滤

但是这样针对各向异性消耗很大,因此我们不能对每个纹理都进行各向异性处理,只有当屏幕空间与纹理空间的夹角到达一定程度时,才能进行各向异性过滤。这是对各向异性的大致说明,细节很多,具体我也不是很清楚。
以下是mipmap和各向异性过滤呈现效果的一个对比图(左边采用mipmap,右边采用各向异性过滤)
纹理过滤

参考

https://en.wikipedia.org/wiki/Anisotropic_filtering

http://www.cnblogs.com/cxrs/archive/2009/10/18/justaprogramer.html

相关文章:

  • 2022-12-23
  • 2021-07-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-04
  • 2022-02-08
  • 2021-09-22
  • 2022-12-23
  • 2021-12-26
相关资源
相似解决方案