Ⅰ 紋理的各向異性過濾
「各向異性過濾」(Anisotropic Filtering,縮寫為 AF) 是一種紋理過濾方法。在一些銷笑情況下可以提升畫面的清晰度。
下面這幅圖是來自 ARM 網站。 https://developer.arm.com/documentation/101897/0200/buffers-and-textures/anisotropic-sampling-performance
其中,左圖採用一般的「三線性過濾」,右圖採用了 2x 的「各向異性過濾」。
可以看到在這個木頭箱子的側面,左圖較為模糊,右圖較為清晰。
對於有 mipmap 的情形。
如果是「三線性過濾」,會根據紋理坐標的變化率,計算其應該採用哪一級 mipmap。
但,紋理坐標是二維的,有 u,有 v。
如果 v 和 v 的變化率並不一致,則根據 u 和根據 v 可計算得到不同的 mipmap 級別。
一般「三線性過濾」會取兩者之間較大的 mipmap,但這樣就不精確了。
「各向異性過濾」則會根據 mipmap_u 和 mipmap_v 的差異,進行多次采樣,然後綜陪鎮合。
這樣就能提升畫質。
實際的采樣次數由硬體決定。
當物體的表面正對攝像機時,u 和 v 的虧亂含變化率差異小,采樣的次數也少。
當物體表面近乎垂直於視線時,u 和 v 的變化率差異大,采樣的次數也多。
程序可以通過圖形 API(Direct3D、OpenGL)設置最大采樣次數。
設置 2x 的「各向異性過濾」,則最多會采樣 2 次。
如果設置 16x 的「各向異性過濾」,則最多會采樣 16 次。
次數越多,畫質越好,但性能越差。
下圖是各種設置的視覺效果對比(為了凸顯問題,圖片已經被放大至 200%)
「各向異性過濾」會導致更多次數的紋理采樣,影響性能。
看各個 GPU 廠商的說法。
按 ARM 的說法,2x 的各向異性過濾是很不錯的。不過接下來就需要進一步測試了。特別是蘋果,沒有找到對應的文章。
用 shader 來做過濾,達到更佳的畫質:
https://bgolus.medium.com/sharper-mipmapping-using-shader-based-supersampling-ed7aadb47bec
Ⅱ 顯卡特效中的各向異性過濾是什麼
Bilinear Interpolation (雙線過濾)
這是一種較好的材質影像插補的處理方式,會先找出最接近像素的四個圖素,然後在它們之間作差補效果,最後產生的結果才會被貼到像素的位置上,這樣不會看到「馬賽克」現象。這種處理方式較適用於有一定景深的靜態影像,不過無法提供最佳品質。其最大問題在於,當三維物體變得非常小時,一種被稱為Depth Aliasing artifacts(深度贗樣鋸齒),也不適用於移動中的物件。
Trilinear Interpolation (三線過濾)
這是一種更復雜材質影像插補處理方式,會用到相當多的材質影像,而每張的大小恰好會是另一張的四分之一。例如有一張材質影像是512×512個圖素,第二張就會是256×256個圖素,第三張就會是128×128個圖素等等,總之最小的一張是1×1.憑借這些多重解析度的材質影像,當遇到景深極大的場景時(如飛行模擬),就能提供高品質的貼圖效果。一個「雙線過濾」需要三次混合,而「三線過濾」就得作七次混合處理,所以每個像素就需要多用21/3倍以上的計算時間。還需要兩倍大的存儲器時鍾帶寬。但是「三線過濾」可以提供最高的貼圖品質,會去除材質的「閃爍」效果。對於需要動態物體或景深很大的場景應用方面而言,只有「三線過濾」才能提供可接受的材質品質。
Anisotropic Interpolation (各向異性過濾)
它在取樣時候,會取8個甚至更多的像素來加以處理,所得到的質量最好。
-----------------------------------
在 OpenGL 里我嘗試使用 三線過濾 ,出來的畫面平滑感覺比 各向異性過濾的還要好點。哈,我就覺得三線過濾效果比各向異性過濾效果好點。在國內的網站上很少關於 OpenGL 使用這三線過濾和各向異性過濾的文章,有的都是理論,沒有代碼,我看了一個國外的代碼。其實就是在載入紋理的時候把代碼改為:
// <<<三線過濾>>>
//設置紋理縮小時採用的過濾方法,這里設置的是三線性過濾
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
//設置紋理放大時採用的過濾方法,這里設置的是線性過濾
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//用OpenGL實現支持的最大各異向程度設置最大各異向程度參數
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.0f);
// <<<各向異性過濾>>>
//設置紋理縮小時採用的過濾方法,這里設置的是三線性過濾
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
//設置紋理放大時採用的過濾方法,這里設置的是線性過濾
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//用OpenGL實現支持的最大各異向程度設置最大各異向程度參數
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, xxx);
// 注意:這里的 xxx 代表 各向異性過濾 的異向程度參數
// 你可以設置為:4 , 8 , 16 等。這里也可以在 InitGL() 驅動 OpenGL 函數里寫上
int LrgSupAni;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &LrgSupAni);
那麼 xxx 就得小於或等於 LrgSupAni。
Ⅲ 游戲里過濾方式中的「單線性」「雙線性」「三線性」「各向異性XX」等是啥意思啊
1、單線性過濾:指進行紋理平滑的一種紋理過濾方法。在大多數情況版下,紋理在屏幕上顯示的時候權都不會同保存的紋理一模一樣,所以一些像素要使用紋素之間的點進行表示。
2、雙線性過濾:指進行縮放顯示的時候進行紋理平滑的一種紋理過濾方法。利用這些點在像素所表示點周圍四個最近的點之間進行雙線性插值。
3、三線性過濾:指用來減輕或消除不同組合等級紋理過渡時出現的組合交疊現象。它必須結合雙線性過濾和組合式處理映射一並使用。
4、各向異性過濾:是一種3D顯示技術,它是對周圍各個方向上的像素進行取樣計算後映射到目標像素上的技術。
(3)各向異性過濾模式級別擴展閱讀:
相關介紹:
三線性過濾、雙線性過濾的原理都是將相鄰像素及彼此之間的相對關系都記憶下來,然後在視角改變的時候繪制出來。只不過三線性過濾的採集范圍更大,計算更精確,畫面更細膩,佔用資源也更多。
各向異性過濾的原理是需要對映射點周圍方形8個或更多的像素進行取樣,獲得平均值後映射到像素點上。對於3D游戲來說,各向異性過濾則是很重要的一個功能,因為它可以使畫面更加逼真,自然處理起來也比三線性過濾會更慢。
Ⅳ 200分!各向異性過濾是AF平滑處理是AA嗎那16XQ是什麼意思
中2x、4x、8xQ是標準的MSAA(多重取樣抗鋸齒),8x、16x、16xQ是CSAA(覆蓋取樣抗鋸齒:Coverage Sampling Antialiasing)。其中8xQ和16xQ是桌面PC領域畫面質量最高的抗鋸齒模式。由於CSAA的像素取樣量大大低於MSAA,因此在很多游戲中,16x的CSAA可以和4x的MSAA達到相近的fps,但是16x CSAA可以提供好的多的畫質,只是在少數情況,如DOOM3中大量使用的stencil shadow,CSAA會失效,這時候需要用MSAA來進行抗鋸齒。