在三維電腦圖形領域中,各向異性過濾(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 實現自身的紋理過濾需求,從而讓更豐富的畫面細節呈現。然而,您是否思考過,這些技術在未來的影像呈現中,還能如何進一步演進呢?