1. 程式人生 > >【技術美術】貼圖、紋理、材質的區別

【技術美術】貼圖、紋理、材質的區別

貼圖:不願意做成 3d 的就用照片替代了一下,例如要做個門,為了省事用一張照片替代。

紋理:一張貼圖產生無數張效果叫做紋理,比如牆紙有很多花,其實是一朵花陣列的,拉伸之類的形成了貼牆紙的效果,這就是紋理。

材質:反光,折射,透明度,自發光,這些都屬於材料的光學特性和視覺特效被稱為材質。比如貼圖是不鏽鋼的,但是需要實時發反光線光是用貼圖是解決不了的,就需要不鏽鋼材質才可以解決。

貼圖是一張照片,用於替代模型。紋理是重複,陣列,縮放的貼圖。材質是視覺層面的表現力。

1、紋理即“紋路”,每個物體表面上不同的樣子,譬如說木頭的木紋狀。

2、貼圖是圖,最簡單的形式是 ps 之類的軟體做出來的一張圖,這些圖在 3D 中用來貼到物體的表面,用來表現物體的“紋理”。

3、材質主要是用來表現物體對光的互動(反射、折射等)性質的。譬如金屬對光的反射和毛毯對光的反射性質完全不一樣,那麼對 3D 程式來說,這樣的差別就通過材質這個屬性來計算出不同的顏色。

上面是最簡單的說法。對於 2 來說,在實際的 3D 程式中,貼圖經過歷史的演化,出現了很多的其他用作不同場合的種類,譬如有凹凸貼圖用作計算物體表面的凹凸感,這個就不是嚴格意義上的紋理作用。對於3來說,程式設計師往往讓“材質”這個東西包含貼圖在內,也就是在程式裡,材質就是(a)各種貼圖和(b)物體對光的互動性質的集合。

整個 CG 領域中這三個概念都是差不多的,在一般的實踐中,大致上的層級關係是:

材質 Material 包含貼圖 Map,貼圖包含紋理 Texture。

紋理是最基本的資料輸入單位,遊戲領域基本上都用的是點陣圖。此外還有程式化生成的紋理 Procedural Texture。

貼圖的英語 Map 其實包含了另一層含義就是“對映”。其功能就是把紋理通過 UV 座標對映到 3D 物體表面。貼圖包含了除了紋理以外其他很多資訊,比方說 UV 座標、貼圖輸入輸出控制等等。

材質是一個數據集,主要功能就是給渲染器提供資料和光照演算法。貼圖就是其中資料的一部分,根據用途不同,貼圖也會被分成不同的型別,比方說 Diffuse Map,Specular Map,Normal Map 和 Gloss Map 等等。另外一個重要部分就是光照模型 Shader ,用以實現不同的渲染效果。

貼圖英文叫做 map,最有名的是 lighting map,即光照貼圖,光照貼圖是生成或者繪製出來,用於物體表面模擬光照效果的。

而紋理英文 texture,包括手繪,以及照片加工,過程生成三種方式產生, 並且在 opengl 術語中,視訊記憶體中儲存的影象資料,也稱為紋理,視訊記憶體中有多種紋理,包括深度 texture,顏色 texture, 法向量 texture。

而材質,英文名 material,在 ogre 中,會寫一種材質檔案,用於描述渲染一個物件採用哪些技術, 如何使用紋理等資訊, 而在 3dmax,maya 等建模軟體中,材質球也表示類似的意思,即描述如何渲染一個物件。

通過分析這些詞的使用語境,來區分這些詞,首先貼圖和紋理的區別,例如分析常見的三種貼圖 法向量貼圖 normal map,反射貼圖 reflection map,環境貼圖等, 就指這些技術使用的紋理,以及對應的紋理座標集。 因為 cube 環境貼圖需要六張紋理,以及需要生成對應的紋理座標。

而材質概念則包含這些貼圖技術,以及shader渲染程式,因此屬於更高的層次。

貼圖是現象,紋理是特徵,材質是性質。

比如說木頭,貼圖只有看著像木頭,摸上去則是平面;紋理是看上去摸上去都像木頭,但不一定真是木頭;材質是不僅看和摸都像,還具有木頭纖維各向異性之類的材料特徵。

Unity 渲染主要是通過材質 (Materials),著色器(Shaders) 和紋理 (Textures) 來做的。貼圖和紋理依附於材質存在,著色器使用一定演算法確定紋理和貼圖等資訊對 Mesh 的渲染方式。貼圖就是紋理,這兩個詞其實是指的同一個東西,屬於翻譯導致的歧義,texture 被翻譯成了紋理和貼圖。

  • 材質是對如何渲染一個物件的表面的定義,對包括用到哪些紋理和貼片資訊,顏色色彩和深淺等等

  • 著色器是對於要渲染的每個畫素點的著色的計算和演算法,主要由一些小指令碼組成

  • 紋理是一些點陣圖

再囉嗦3句:
1 貼圖 ~ 紋理 ~ Texture, 就是美術提供的 png 圖片,我這裡的 2D 遊戲,用的就是這個,行內簡稱“換皮”

2 材質 ~ Material ~ shader,一般 Unity3D 軟體自動生成,例如 TK2D 預設提供了很多,幾乎不用考慮。

3 圖集 ~ Atalas:獨立一個 Texture (1個png) 在 CPU 下,會多 1 個 Draw Call,一般會把 n 個 png,打包為一個 png(例如 1024*1024),然後同步生成 UV 資訊使用。