各向异性过滤(,简称AF)是一种3D显示技术,如其名称所示,它是对周围各个方向上的像素进行取样计算后映射到目标像素上的技术。与双线性过滤和三线性过滤相比,它在大角度显示方面具有更高的精度,令画面更逼真,但计算量也更大,对显示卡的要求也更高。
實作
OpenGL 擴展規範中說明了可能的實作方式,首先定義以下符號:
\begin{align}
P_x &= \sqrt{u_x^2+v_x^2}\\
P_y &= \sqrt{u_y^2+v_y^2}\\
P_{max} &= \max(P_x,P_y)\\
P_{min} &= \min(P_x,P_y)\\
N &= \min(\left \lceil \frac{P_{max}}{P_{min}} \right \rceil, maxAniso)\\
\lambda' &= \lg \frac{P_{max}}{N}
\end{align}
其中 P_x, P_y 和 mipmapping 中的定義相同,代表紋理座標對螢幕座標的微分。不同的是引入了變數 N 代表 anisotropic 的比例(一般不超過 16),並且只在\lambda' \approx P_{min} 的 mipmap 層級取樣(無視向上取整以及限制最大 anisotropic 程度的 min 的話,則\lambda'=P_{min})。
Anisotropic filter 的結果 \tau_{aniso} 可以用平均多個 mipmap 的採樣 \tau 求出。
\tau_{aniso} = \frac{1}{N}\sum_{1}^{N} \tau(u+u_x\frac{2i-N-1}{2(N+1)},v+v_x\frac{2i-N-1}{2(N+1)})
可以看到這個方式需要存取比原本多出 N 倍的紋理記憶體,而且跟原本的 mipmap 方法是正交的,也就是我們可以任意的 mipmap 方法,配合任意的 maxAniso。
優化
- 相鄰的像素點通常存在於快取裡面。
- 一般來說高度各向异性的點很少(通常小於10%),而需要材质过滤的點也不需要各向异性过滤。
参考文献
评论 (0)