定义
各向异性过滤 (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 个样本(常见的最大值)
实际效果对比
想象你正在看一条延伸到远方的道路上的砖块纹理:
- 不使用各向异性过滤:
- 远处的砖块纹理变得非常模糊
- 几乎看不清砖块的形状和纹理
- 整体效果不真实
- 使用各向异性过滤:
- 远处的砖块纹理保持清晰
- 可以分辨出单个砖块的形状
- 提供更真实的视觉效果
性能考虑
// 高质量设置(性能开销大)
samplerInfo.anisotropyEnable = VK_TRUE;
samplerInfo.maxAnisotropy = 16.0f;
// 性能优先设置
samplerInfo.anisotropyEnable = VK_FALSE;
// 或者使用较低的各向异性级别
samplerInfo.maxAnisotropy = 4.0f;常见使用场景
- 地形渲染
- 建筑物表面纹理
- 道路和地板纹理
- 任何会以倾斜角度观察的大面积纹理
使用建议
- 根据纹理的重要性和观察角度选择合适的各向异性级别
- 为不同类型的纹理使用不同的采样器设置
- 考虑性能和质量的平衡
- 注意检查设备对各向异性过滤的支持程度
在实际应用中,各向异性过滤是提升视觉质量的重要手段,特别是在需要清晰显示倾斜表面纹理的情况下。但由于它会增加采样计算量,所以需要根据具体需求合理使用。