小弟才疏學淺, 自己知道的講一下
如有講錯..還請版友指正
首先是材質貼圖
顯示卡一個重要的工作就是把圖貼到空空的骨架上去
但是因為要成的像是3D的
所以要把一張平面的圖..貼到有遠近之分的東西上去
勢必要對那張圖做一點處理
這就叫做材質過濾
那張"圖"..就是我們所稱的材質
就好像工藝課有那種木紋貼紙
貼到東西上面去就會讓它看起來像是木頭做的
關於材質的過濾
有好幾種做法
講講三個大家最常看到的
雙線性(Bilinear filtering), 三線性(Trilinear filtering), 非等相性過濾(Anisotropic filtering)
當談到Bilinear和Trilinear的時候
要講到一個東西叫做Mipmap
不管在做Bilinear filtering或是Trilinear filtering的時候
顯示卡首先要對材質做一件事就是Mipmapping
就是把那張材質弄成像金字塔一樣
比如說
這張材質原封不動放在金字塔的最下層, 叫level0
再把這張材質裡面每相鄰四個像素做平均 ( 這樣它的長跟寬會各減一半 )
會做出一張看起來圖案很像但是大小只有原本四分之一的圖
把這張圖放在level0的上面, 就是level1
這樣一直做下去, 把小張的放在大張的上面
一直到長跟寬有一邊的大小縮到只剩下一個像素為止
這樣的一個金字塔..我們稱做Mipmap
當然不一定要用每相鄰四個像素做平均這種方法來產生較小的材質
有更好的方法(像是使用Gaussian Filter)
做好了以後
在要貼圖的時候
顯示卡會去檢查要貼上去的那一個顯示像素
在材質中佔了多少的面積
用這個來判斷要從Mipmap的哪一個level去找材質來貼圖
Bilinear filtering和Trilinear filtering便是在這個步驟上有差異
Bilinear filtering會找到Mipmap中的一個level
然後以長跟寬兩個方向為軸去對"顯示像素在材質上佔的面積"去做Filtering的動作
來得到該顯示像素的值
因為只以兩個方向(長跟寬), 所以叫做Bilinear Filtering
Trilinear Filtering則是會再多一個自由度去做Filtering
這個自由度就是那個金字塔的高
也就是說Trilinear可以抓相鄰的level一起來做Filtering
這樣的顯示效果當然更好
因為用了三個方向(材質的長跟寬,以及Mipmap裡的高), 所以叫做Trilinear Filtering
而Anisotropic Filtering
是一個比較新的技術
它的想法是
只對"視角"去做Filtering
視角就是貼圖的部份在螢幕上顯示相對的角度
比如說如果我站在一面牆的旁邊
沿著牆面看過去..牆面相對於我的角度是很斜的
如果我們可以沿著視線的角度
在材質上畫出一條相對應的線
然後在落在該線上取兩個點
對這兩個點去做filtering來得到貼圖像素的值
這樣的做法就是Anisotropic Filtering
因為只取兩個點..所以是2X Anisotropic Filtering
如果我在那條線上取了16個點來做filtering
就是16X Anisotropic Filtering了
這樣的做法因為只在"我看過去的方向"上去做filtering
不像Bilinear或Trilinear只要做filtering
就會在每個自由度的方向都做Filtering
所以是"非等向性的", "各異向性的"
也就是為什麼會叫Anisotropic Filtering的原因了
正如同kjzz大所說
開了Texture Filtering後可以看看那種視角很大的東西
比如說剛剛我說的"貼在牆上沿著牆面看過去"
就可以發現遠端的圖會比較清楚
一般來說
效果最好的就是Anisotropic Filtering
開越多點的Anisotropic Filtering效果越好(16X Anisotropic Filtering)
你可以試試看喔
以上這些都是自己有興趣看書看來的
以前在學校也沒有修過相關的課程
如果有說錯的地方
還希望各位版友不吝指正!