雙線性紋理篩選
雙線性紋理篩選會計算最接近取樣點之 4 個紋理像素的加權平均。 這個篩選方法比最接近點篩選更加精確且常見。 由於它會在現代化圖形硬體上執行,因此為效率十足的方法。
範例
紋理一律從左上角的 (0.0,0.0) 到右下角的 (1.0,1.0) 線性尋址。 下圖顯示紋理的線性尋址。
紋理通常以純色區塊組成的方式表示,但以您應該考慮點陣顯示的方式思考紋理實際上更為正確:每個紋素都是在方格資料格的確切中心定義,如下圖所示。
如果您在 UV 座標 (0.375,0.375) 上詢問紋理取樣器此紋理的色彩,您會得到純紅色 (255,0,0)。 這很合理,因為紅色紋素資料格的中心位於 UV (0.375,0.375)。 如果您向取樣器詢問紋理在 UV (0.25,0.25) 下的顏色會怎麼樣? 這並不容易,因為 UV (0.25,0.25) 處的點正好位於 4 個紋素的角落。
最簡單的配置只是讓取樣器傳回最接近紋素的色彩;這稱為點篩選 (請參閱最接近點取樣),而且通常是由於粒紋或區塊結果而不需要的。 在 UV (0.25, 0.25) 處對紋理進行點取樣顯示了最近點過濾的另一個微妙問題:有四個距取樣點等距的紋素,因此沒有單一最近的紋素。 將選擇這四個紋理像素之一做為傳回的色彩,但選擇取決於座標的四捨五入方式,這可能會引入撕裂成品 (請參閱 SDK 中的最近點取樣文章)。
稍微準確且更常見的篩選配置是計算距離取樣點最接近 4 個紋素的加權平均值:這稱為雙線性篩選。 雙線性篩選的額外計算成本通常可以忽略不計,因為此例程是在現代圖形硬體中實作的。 以下是我們使用雙線性篩選來取得幾個不同樣本點的色彩:
UV: (0.5, 0.5)
此點位於紅色、綠色、藍色和白色紋素之間的精確邊界。 取樣器傳回的色彩為灰色:
0.25 * (255, 0, 0)
0.25 * (0, 255, 0)
0.25 * (0, 0, 255)
## + 0.25 * (255, 255, 255)
------------------------
= (128, 128, 128)
UV: (0.5, 0.375)
此點位於紅色和綠色紋素之間邊界的中點。 取樣器傳回的顏色是黃灰色 (請注意,藍色和白色紋素的貢獻調整為 0):
0.5 * (255, 0, 0)
0.5 * (0, 255, 0)
0.0 * (0, 0, 255)
## + 0.0 * (255, 255, 255)
------------------------
= (128, 128, 0)
UV: (0.375, 0.375)
這是紅色紋素的位址,它是傳回的色彩 (篩選計算中的所有其他紋素都加權為 0):
1.0 * (255, 0, 0)
0.0 * (0, 255, 0)
0.0 * (0, 0, 255)
## + 0.0 * (255, 255, 255)
------------------------
= (255, 0, 0)
將這些計算與下圖進行比較,下圖顯示如果在 4x4 紋理中的每個紋理位址執行雙線性篩選計算會發生什麼。
相關主題