材質過濾知識:
當材質被貼到螢幕所顯示的乙個3d模型上時,材質處理器必須決定哪個圖素要貼在哪個畫素的位置。 由於材質是2d,而模型是3d物件,所以通常圖素的範圍與畫素範圍不會是恰好相同的。此時要解決這個畫素的貼圖問題,就得用插補處理的方式來解決。而 這種處理的方式共分三種:「近鄰取樣」、「雙線過濾」、「三線過濾」以及「各向異性過濾」。
1.nearest neighbor (近鄰取樣) 又被稱為point sampling(點取樣),是一種較簡單材質影像插補的處理方式。會使用包含畫素最多部分的圖素來貼圖。換句話說就是哪乙個圖素佔到最多的畫素,就用那個圖素來貼圖。這種處理方式因為速度比較快,常被用於早期3d遊戲開發,不過材質的品質較差。
2.bilinear interpolation (雙線過濾) 這是一種較好的材質影像插補的處理方式,會先找出最接近畫素的四個圖素,然後在它們之間作差補 效果,最後產生的結果才會被貼到畫素的位置上,這樣不會看到「馬賽克」現象。這種處理方式較適用於有一定景深的靜態影像,不過無法提供最佳品質。其最大問 題在於,當三維物體變得非常小時,一種被稱為depth aliasing artifacts(深度贗樣鋸齒),也不適用於移動中的物件。
3.trilinear interpolation (三線過濾) 這是一種更複雜材質影像插補處理方式,會用到相當多的材質影像,而每張的大小恰好會是另一張的 四分之一。例如有一張材質影像是512×512個圖素,第二張就會是256×256個圖素,第三張就會是128×128個圖素等等,總之最小的一張是 1×1。憑藉這些多重解析度的材質影像,當遇到景深極大的場景時(如飛行模擬),就能提供高品質的貼圖效果。乙個「雙線過濾」需要三次混合,而「三線過 濾」就得作七次混合處理,所以每個畫素就需要多用21/3倍以上的計算時間。還需要兩倍大的儲存器時鐘頻寬。但是「三線過濾」可以提供最高的貼圖品質,會 去除材質的「閃爍」效果。對於需要動態物體或景深很大的場景應用方面而言,只有「三線過濾」才能提供可接受的材質品質。
4.anisotropic interpolation (各向異性過濾) 它在取樣時候,會取8個甚至更多的畫素來加以處理,所得到的質量最好。 2-sided (雙面) 在進行著色渲染時,由於物體一般都是部分面向攝像機的,因此為了加快渲染速度,計算時常忽略物體內部的細節。當然這對於實體來說,不影響最終的渲染結果; 但是,如果該物體時透明時,缺陷就會暴露無遺,所以選擇計算雙面後,程式自動把物體法線相反的面(即物體內部)也進行計算,最終得到完整的圖象。
ogre中的應用:
//各向異性過濾
ogre::texturefilteroptions tfo = ogre::tfo_anisotropic;
unsigned int aniso = 8;
//三線過濾
tfo = ogre::tfo_trilinear;
aniso = 1;
//雙線過濾
tfo = ogre::tfo_bilinear;
aniso = 1;
//無過濾
tfo = ogre::tfo_none;
aniso = 1;
//設定
ogre::materialmanager::getsingleton().setdefaulttexturefiltering(tfo);
ogre::materialmanager::getsingleton().setdefaultanisotropy(aniso);
ogre內部定義:
Ogre材質指令碼
ogre sdk版本 1.9.0 ogre sdk的media materials scripts 目錄下的example.mateiral,示例材質。ogre材質指令碼語法 注釋 單行注釋 多行注釋 關鍵字 texture 定義紋理 如 ambient 設定環境光如 ambient 1.0 1.0...
OGRE 3D 程式設計 Ogre 材質1 轉
材質 material 材質是乙個很基本的術語,表示你的物體對光的反射方式。但是對它的實現並不像其解釋這樣簡單,我們會用這一章節進行詳細地介紹ogre中相關的技術。我們剛才提及過,材質定義了物體對光線反射的處理方法。這裡暗示了材質的表現與光源的型別相關 聚光 spotlights 點光源 point...
Unity中材質球無法修改問題的解決
今天在使用unity18過程中,發現有些情況下匯入材質會出現材質 貼圖丟失的情況。並且材質無法更改。網上有不少相似的問題但都沒有解決清楚。於是決定寫一小段詳細說明一下此問題的解決方法。我們發現材質球沒有問題,而是材質球上的貼圖出現了丟失,但材質球並不能修改 17中貌似沒有這個問題 這種情況是mate...