定义

各向异性过滤 (Anisotropic Filtering) 是一种纹理过滤技术,用于改善纹理在倾斜视角下的显示质量。

各向异性的字面意思是 ” 不同方向上性质不同 “。在图形学中,这表现为:

  • 当我们以倾斜角度查看纹理时,纹理在不同方向上的压缩比是不同的
  • 比如地板纹理在垂直方向可能几乎没有压缩,但在水平方向可能压缩得很厉害

没有各向异性过滤时的问题

普通的 MipMap:
1. 选择 MipMap 级别时只考虑一个缩放因子
2. 在倾斜视角下,会选择过度模糊的 MipMap 级别
3. 导致远处的纹理细节过度丢失

工作原理与配置

// 设置各向异性过滤
VkSamplerCreateInfo samplerInfo = {};
samplerInfo.anisotropyEnable = VK_TRUE;  // 启用各向异性
samplerInfo.maxAnisotropy = 16.0f;       // 设置最大各向异性级别

各向异性级别的含义:

  • 1.0:禁用各向异性过滤(等同于普通的 MipMap)
  • 2.0:在主方向上取 2 个样本
  • 4.0:在主方向上取 4 个样本
  • 8.0:在主方向上取 8 个样本
  • 16.0:在主方向上取 16 个样本(常见的最大值)

实际效果对比

想象你正在看一条延伸到远方的道路上的砖块纹理:

  1. 不使用各向异性过滤:
- 远处的砖块纹理变得非常模糊
- 几乎看不清砖块的形状和纹理
- 整体效果不真实
  1. 使用各向异性过滤:
- 远处的砖块纹理保持清晰
- 可以分辨出单个砖块的形状
- 提供更真实的视觉效果

性能考虑

// 高质量设置(性能开销大)
samplerInfo.anisotropyEnable = VK_TRUE;
samplerInfo.maxAnisotropy = 16.0f;
 
// 性能优先设置
samplerInfo.anisotropyEnable = VK_FALSE;
// 或者使用较低的各向异性级别
samplerInfo.maxAnisotropy = 4.0f;

常见使用场景

  1. 地形渲染
  2. 建筑物表面纹理
  3. 道路和地板纹理
  4. 任何会以倾斜角度观察的大面积纹理

使用建议

  1. 根据纹理的重要性和观察角度选择合适的各向异性级别
  2. 为不同类型的纹理使用不同的采样器设置
  3. 考虑性能和质量的平衡
  4. 注意检查设备对各向异性过滤的支持程度

在实际应用中,各向异性过滤是提升视觉质量的重要手段,特别是在需要清晰显示倾斜表面纹理的情况下。但由于它会增加采样计算量,所以需要根据具体需求合理使用。