在三维电脑图形领域中,各向异性过滤(Anisotropic Filtering)是一种提升纹理影像品质的技术,主要用于改善在斜视角下的影像清晰度。这项技术的作用并不是在所有方向上都一视同仁,而是在观察到纹理的方向上,透过针对性过滤以减少模糊和保持细节,特别是在极端的观看角度中。
各向异性过滤能保留纹理的“锐利度”,避免因为使用普通的 mipmap 技术而失去的影像细节。
传统的等向性过滤(Isotropic Filtering)会在每个层级上同时减小x和y两个轴的解析度,因此当在相对于摄影机倾斜的平面上渲染时,会因为垂直轴频率的降低而使得水平解析度不足。这会导致虽然避免了别的方向上的混叠(Aliasing),但其它方向的纹理却可能变得模糊不清。
与此不同的是,各向异性过滤的技术允许纹理以不同的长宽比进行过滤。举例来说,当纹理解像度为256px × 256px时,这种过滤技术可将其减小为128px × 128px,还能进一步减小为256px × 128px和32px × 128px等非方形解析度。这样的做法不仅能提高斜角的纹理细节,也能在必须避免混叠的情况下保持其他方向的清晰度。
实际应用中,不同的各向异性过滤程度可以透过开发的设置调整,这个比例是过滤过程所支持的最大各向异性比。例如,4:1的各向异性过滤将使得比2:1的过滤在更为于斜面纹理下展现出更加清晰的效果。这意味着在高度倾斜的纹理情况下,4:1的过滤会显示出比2:1的过滤更高的细节。然而,大部分场景并不需要如此高精度,只在大量受距离影响的粒子上才会显示出具体差异。
现代图形硬体对这一过滤程度设定了一个上限,以避免过度复杂的硬体设计及日益减少的可视化回报。
真正的各向异性过滤通常是在每个像素基础上即时进行的。在渲染硬体中,当纹理得以进行各向异性取样时,系统会根据该像素的投影形状,周围取多个样本。最初的某些软件方法使用了总和区域表(summed-area tables),而每个取样过程本身也可能是经过过滤的 mipmap 范例,加重了取样的过程。举例来说,如果需要进行16个三重线性取样,那么可能需要从储存的纹理中取128个样本,因为三重线性mipmap 过滤需要取用四个样本来作为每个mipmap 的基础,这样的复杂性在某些情况下可能并不是必需的。
各向异性过滤的样本数目可能会导致其对带宽的需求极高。每个纹理样本可能超过四个字节,因此每个各向异性像素可能需要从纹理记忆体中提取多达512字节的数据。这使得视频显示设备的除了要求300-600 MB/s的带宽外,某些场景中的纹理过滤操作可达数百GB/s的需求也是常见的情况。所幸,某些因素有助于减少这一性能损耗:采样点可以共享缓存的样本,不论是相邻点之间,还是在同一像素内。即使是16次取样,也有可能不会需要所有16次,因为只有于距离较远的高倾斜像素才会显得特别的关键。
结合这些技术,当今各向异性过滤技术在现代图形硬件和视频驱动程序中变得越来越普遍。使用者可透过驱动程序设置调整过滤的比率,而开发者也能通过 APIs 实现自身的纹理过滤需求,从而让更丰富的画面细节呈现。然而,您是否思考过,这些技术在未来的影像呈现中,还能如何进一步演进呢?