www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 21ic電子網(wǎng)
[導(dǎo)讀]在計算機圖形學(xué)中,紋理過濾或者說紋理平滑是在紋理采樣中使采樣結(jié)果更加合理,以減少各種人為產(chǎn)生的穿幫現(xiàn)象的技術(shù)。紋理過濾分為放大過濾和縮小過濾兩種類型。對應(yīng)于這兩種類型,紋理過濾可以是通過對稀疏紋理插值進(jìn)行填充的重構(gòu)過濾(需要放大)或者是需要的

在計算機圖形學(xué)中,紋理過濾或者說紋理平滑是在紋理采樣中使采樣結(jié)果更加合理,以減少各種人為產(chǎn)生的穿幫現(xiàn)象的技術(shù)。紋理過濾分為放大過濾和縮小過濾兩種類型。對應(yīng)于這兩種類型,紋理過濾可以是通過對稀疏紋理插值進(jìn)行填充的重構(gòu)過濾(需要放大)或者是需要的紋理尺寸低于紋理本身的尺寸時(需要縮小)的一種抗鋸齒過濾。
簡單來講,紋理過濾就是用來描述在不同形狀、大小、角度和縮放比的情況下如何應(yīng)用紋理。根據(jù)使用的過濾算法的不同,會得到不同等級的模糊、細(xì)節(jié)程度、空域鋸齒、時域鋸齒和塊狀結(jié)果。根據(jù)使用環(huán)境的不同,過濾可能是在軟件或者專用硬件中完成,也可能是在軟件和專用硬件中共同完成。對用大多數(shù)常見的可交互圖形應(yīng)用,現(xiàn)代的紋理過濾是使用專用的硬件進(jìn)行完成。這些硬件通過內(nèi)存緩沖和預(yù)提取技術(shù)優(yōu)化了內(nèi)存讀寫,并且實現(xiàn)了多種可供用戶和開發(fā)者選擇的過濾算法。
有多種紋理過濾方法,不同的方法在計算復(fù)雜度、內(nèi)存帶寬和圖像質(zhì)量上分別有不同的權(quán)衡。

為什么需要紋理過濾?

對于任意的3D表面在紋理映射過程中,需要進(jìn)行紋理查找來找到屏幕上的一個像素對應(yīng)于紋理上的哪個位置。紋理映射的過程會根據(jù)目標(biāo)點離相機的遠(yuǎn)近,占用屏幕上不同大小的范圍的像素,例如一個三角面在距離相機20m時占用100個屏幕像素,當(dāng)三角面離相機更遠(yuǎn)時會看起來更小,此時可能占用20個屏幕像素,但是在兩種情況下這個三角面使用的紋理貼圖的大小是不變的。換句話說,由于紋理化表面可以相對于觀察者處于任意距離和朝向,因此一個像素通常不直接對應(yīng)于一個紋理像素。必須應(yīng)用某種形式的濾波來確定像素的最佳顏色。濾波不足或不正確將在圖像中顯示為偽像(圖像中的錯誤),例如“阻塞”,鋸齒狀或閃爍。
屏幕的一個像素與它在對應(yīng)的紋素之間可以存在不同類型的對應(yīng)關(guān)系。這取決于紋理化表面相對于觀察者的位置,并且在每種情況下都需要不同形式的過濾。給定映射到世界中的正方形表面的正方形紋理,在某個觀看距離處,一個屏幕像素的大小與一個紋理像素完全相同。當(dāng)觀察者靠近時,紋素(紋理上一個顏色點)大小大于屏幕像素,需要適當(dāng)放大 - 這一過程稱為紋理放大。更遠(yuǎn)時,每個紋素大小小于一個像素,因此一個像素覆蓋多個紋素。在這種情況下,必須通過紋理縮小來基于所覆蓋的紋理元素拾取適當(dāng)?shù)念伾D形API如OpenGL允許程序員為縮小和放大過濾設(shè)置不同的過濾方案。
注意,即使在像素和紋素是完全相同的大小的情況下,一個像素也不一定完全匹配一個紋素。它們可能未對齊或發(fā)生旋轉(zhuǎn),一個像素可能覆蓋多達(dá)四個相鄰紋素的部分。因此,仍然需要某種形式的過濾。
Mipmapping是一種標(biāo)準(zhǔn)技術(shù),用于保存紋理縮小過程中所需的一些過濾工作。它對緩存一致性也非常有益- 沒有它,從遠(yuǎn)距離紋理采樣期間的存儲器訪問模式將表現(xiàn)出極差的局部性,即使沒有執(zhí)行濾波也會對性能產(chǎn)生不利影響。
在紋理放大時,需要為任何像素查找的紋素的數(shù)量總是四個或更少; 然而,在縮小時,隨著紋理多邊形移動得更遠(yuǎn),潛在地整個紋理可能落入單個像素中。這將需要閱讀所有它的紋素和它們的值組合以正確地確定像素顏色,這是一個非常昂貴的操作。Mipmapping通過預(yù)先過濾紋理并將其以較小的尺寸存儲到單個像素來避免這種情況。隨著紋理表面移動得更遠(yuǎn),應(yīng)用的紋理切換到預(yù)過濾的較小尺寸。mipmap的不同大小被稱為“級別”,級別0是最大的級別(最接近觀看者),并且隨著距離增加,對應(yīng)要增加mipmap等級。

過濾方法

下面列出了幾種最常見的過濾方法,按照順序,越靠后的運算開銷越大,但采樣結(jié)果效果也更好。
最近點插值法(Nearest-neighbor interpolation )
最近點插值法是最簡單的紋理過濾方法 — 使用最接近采樣點紋素作為采樣結(jié)果的顏色。簡單的代價就是會產(chǎn)生很多人為現(xiàn)象 - 在放大觀察時會有明顯色塊(馬賽克),而縮小時會有閃爍和鋸齒現(xiàn)象。這種方法在放大的情況下非???,但是在縮小時開銷卻極高,因為屏幕上相鄰的像素點,可能對應(yīng)于紋理上距離很遠(yuǎn)的兩個點,而這會破壞紋理采樣時的內(nèi)存連續(xù)性,導(dǎo)致L1或者L2緩存的命中率極低,使得紋理采樣性能大大降低。
GPU科普:為什么需要紋理過濾?
如上圖可以看到大量的噪點,這些噪點在運行時則會表現(xiàn)為閃爍,因為噪點基本是隨機的
最近點插值+mipmap的方式
這種方式在最近點插值的基礎(chǔ)上,引入了mipmap,當(dāng)距離相機很近時,使用miplevel0,此時和最近點插值完全一樣。當(dāng)距離下相機很遠(yuǎn)時,使用更高的miplevel等級,此時使用最近點插值采樣更小尺寸的紋理。因此可以緩解縮小時的閃爍和鋸齒現(xiàn)象,并且能夠充分利用紋理采樣時的內(nèi)存連續(xù)性,使得紋理采樣性能提高。但是在紋理放大時,不能解決產(chǎn)生的色塊現(xiàn)象。
GPU科普:為什么需要紋理過濾?
加了mipmap之后可以看到噪點消失,但是遠(yuǎn)處紋理明顯模糊,而且不同mipmap過渡處有明顯分界,而近處的紋理有明顯鋸齒
線性過濾+mipmap
OpenGL和其他圖形API提供在單獨的mipmap層級的貼圖上進(jìn)行最近點采樣,但是會對兩個相鄰的mipmap等級的采樣結(jié)果進(jìn)行插值,作為最終結(jié)果。該方法很少使用
雙線性過濾(Bilinear filtering)
雙線性過濾對于鋸齒問題會有一個很明顯的提升。該方法中,采樣目標(biāo)點附近的4個紋素,并且根據(jù)權(quán)重(距離中心點的距離)進(jìn)行加權(quán)平均。這種方法使得放大紋理時的色塊現(xiàn)象得以消失,因為此時兩個相鄰像素之間是平滑過度的。當(dāng)縮小紋理時可以結(jié)合mipmap進(jìn)行使用,盡管當(dāng)縮小很多時,依然會有和最近點過濾方法一樣的鋸齒和閃爍現(xiàn)象,但是對于大部分合理的縮小比例,可以作為一種開銷較少的有硬件加速的紋理超采樣方案。
GPU科普:為什么需要紋理過濾?
相比最近點采樣,可以看到近處紋理空間的鋸齒明顯消失,但是不同mipmap等級間的分界依然明顯
三線性過濾(Trilinear filtering)
三線性過濾是對雙線性過濾中當(dāng)紋理距離相機的距離剛好處于兩個mipmap等級的交界處時的明顯的一個過渡現(xiàn)象的解決方案。通過對兩個相鄰的mipmap等級的紋理進(jìn)行雙線性過濾采樣,并對兩個采樣結(jié)果線性插值得到最終的顏色。這樣當(dāng)紋理到相機的距離逐漸增加時,可以得到平滑的一個過渡,而不是突兀的變化。當(dāng)然,對于足夠近的紋理,因為使用miplevel0這個等級,因此和雙線性過濾完全一致。
GPU科普:為什么需要紋理過濾?
三線性過濾解決了mipmap過渡中的分界問題,但是對角方向上的紋理依然很奇怪,并且異常模糊
各向異性過濾(Anisotropic filtering)
到目前為止我們討論的都是各向同性過濾方法,也就是說在紋理采樣時,不考慮紋理的xy軸與屏幕的xy軸的角度,認(rèn)為在任何角度時采樣結(jié)果都是應(yīng)該一致的(各向同性)。事實上,各向異性過濾是當(dāng)前消費級顯卡中的最高質(zhì)量的過濾方法。各向同性方案只使用了正方形的mipmap來應(yīng)用于雙線性或三線性紋理過濾(各向同性是指在所有方向上都相同,用來描述所有的mipmap貼圖都是方形而不是在某一個軸向上有壓縮的長方形或者其他形狀)。
GPU科普:為什么需要紋理過濾?
上圖各向異性mipmap圖片存儲模式(左),和普通mipmap存儲模式
當(dāng)一個物體的表面和相機有很大的夾角時,紋理在屏幕上的對應(yīng)填充區(qū)域就不是方形的。例如一個地板,距離相機遠(yuǎn)的地方,填充區(qū)域的寬高是不對等的,此時方形的紋理貼圖就不是很合適了,此時就會導(dǎo)致模糊或者閃爍或者兩者皆有。各向異性過濾通過采樣一個非方形紋理解決了這個問題。
GPU科普:為什么需要紋理過濾?
使用各向異性過濾之后,紋理清晰度得到了很大的提升
GPU科普:為什么需要紋理過濾?
上圖三線性過濾和各向異性過濾的區(qū)別,可以看到遠(yuǎn)處的地面明顯清晰很多。
其他紋理過濾方法
其他紋理過濾方法,因為硬件支持不廣泛,很多算法中使用的是軟件實現(xiàn),因此Unity引擎默認(rèn)沒有支持,不再詳述。

版權(quán)聲明:本文為CSDN博主「linbozhang88」的原創(chuàng)文章,
遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u013746357/article/details/90723268


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

21ic電子網(wǎng)

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉
關(guān)閉