貼圖、紋理、材質的區別是什麼?

學習unity的新手,最近在看渲染部分,遇到了貼圖,紋理,材質的概念,查看的資料有時候把貼圖叫做貼圖,有時候又叫紋理,被搞暈了。


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

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

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

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

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


3D中,這幾個概念沒有那麼複雜。

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

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

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

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


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

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

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

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

這個主要是針對unity方面的回答,如果涉及到有限元分析方面,我會有另外一套答案。


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

而紋理英文texture,包括手繪,以及照片加工,過程生成三種方式產生,

並且在opengl術語中,顯存中保存的圖像數據,也稱為紋理,顯存中有多種紋理,包括深度texture,顏色texture, 法向量texture。

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

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

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

可以參考一個ogre的材質文件是如何書寫的,可以理清這個概念,而unity中的shaderlab的語法和ogre的材質語法很類似。


材質:表示一個模型看起來像是用什麼做的。比如看起來像是金屬做的,看起來像是玻璃做的,等等。程序里一般是shader跑過管線之後的用來保存並繪製結果的結構。

貼圖:指的是需要繪製在某個表面上的那些圖像數據。一般就是那堆圖片資源。

紋理:貼圖貼在模型表面上之後,顯示出來的樣子叫做模型的紋理。


紋理:可以不是 CG 概念,一塊布料有它的紋理。

材質的資源:

貼圖:Map/mapping/映射,把紋理貼到 3D 物體表面,需要 UV 映射。

Shader:用來計算明暗的程序。

材質:Material,參數(如 Specular)、貼圖資源、Shader 資源和渲染狀態的集合。

吐個槽:曾被人問到 Unity 中材質類的名稱,想了半天就叫 Material 吧,結果人說是 MeshRender 。。。


可能是從不同的方面描述同一個東西。也有可能是:在那個引擎里,這些概念有不同的特指…………


貼圖:是一張圖用來貼的

紋理:是已經貼在3D模型上的貼圖

材質:是貼圖的分類,什麼木紋,金屬,這些

本質上都是圖。


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

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


貼圖:是指利用三維軟體之外的素材,貼圖有很多種類:bump,displacement,specular,normal,reflection,refraction,beauty......

紋理:包含貼圖,很多都是用軟體本身的數學運算得到的圖形,例如Ramp,sample等,在渲染時紋理運算比貼圖要快很多

材質(material):指物體本身的反射折射性質,lambert,phone,PhoneE等,

材質是基礎,細節靠紋理和貼圖來呈現,例如酒瓶,選一個反射材質,細節用各種貼圖來呈現


基本上貼圖就是紋理。材質的範圍就更大了,主要包括其他「物理屬性」,譬如說specular等。


雖然問題很久遠了,不過還是貼個Unity官方文檔,下半部分Shader technical details以實例的形式解釋更容易理解。Unity - Manual: Creating and Using Materials


上面的回答,很細了,我再啰嗦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信息使用。


物體表面的圖案,比如皮膚圖片、金屬圖片、樹葉圖片、木紋圖片等等,以及附著在這些圖案上的用於對物體表面的光照效果產生影響的信息。這些圖案被稱為顏色紋理(Color Texture),或者又被俗稱為貼圖(Map)。貼圖其實是一個動詞,其不僅指將一個bitmap圖案附著在物體表面的過程,其還指將一些光照處理效果(被稱為幾何紋理,Geometry Texture)應用到物體表面從而讓物體表面產生逼真的細節比如凹凸、明暗分離等效果。所以,附著顏色紋理和幾何紋理的過程稱為Map(映射),或者說紋理映射(Texture Mapping),繼而被俗稱為貼圖。顏色紋理(也被俗稱貼圖,名詞)、幾何紋理被統稱為材質(Material)。其中「材」體現為bitmap圖案,也就是原始素材,泛指顏色紋理;「質」體現為各種不同的凹凸對光纖的反射效果,體現為物體表面體現出來的不同質感,泛指幾何紋理。幾何紋理又包含一種叫做過程紋理(Procedure Texture)的技術,具體自行了解。


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

- 材質是對如何渲染一個對象的表面的定義,對包括用到哪些紋理和貼片信息,顏色色彩和深淺等等

- 著色器是對於要渲染的每個像素點的著色的計算和演算法,主要由一些小腳本組成

- 紋理是一些點陣圖


貼圖是紋理的子概念,紋理(Texture)表示材料的表面,而貼圖(Texture Map)是用來構造(映射到)表面紋理的圖像,也可以是視頻。總的層次關係是:材料(本質)-&>紋理-&>所選的表面圖像。除了簡單的圖像外,Texture Map還包含多種類型:如Bump Map, Color Map, Mask Map等,這些在概念上都是紋理的特殊形式。最高票答案弄反了層次關係。 @曹汐的答案雖然看起來和編程無關,但總體理解上是對的。


用 面向對象 編程(oop)來理解比較容易被開發人員接受:

材質 與 對象 同構,

對象有屬性 與 方法。

shader與 方法 同構

紋理 是 材質屬性的一種

貼圖(map)是shader里的一種


個人的理解

貼圖:只屬於渲染範疇內的概念,它是表達後兩者的主要方法

//插入,紋理和材質都是可以用於描述物件本身的概念,例如你可以談論木頭的紋理和它的質感,但見過說這塊木頭或者鐵器貼圖很好的么?

紋理:物件本身的視覺特徵,通常是具有一定重複性的

材質:物件對不同光源的反應(其實就是反光特性了)


根據我的理解,嚴格來說:「貼圖」特指貼在模型表面的那些圖片;「紋理」泛指物體表面,比如一個浮雕,是由凹凸不平的模型和其上的貼圖組成的,紋理則指這一整體效果,大多數情況貼圖和紋理是一個東西;材質則是指控制物體的各類屬性(貼圖效果參數、物理屬性等)的腳本+貼圖。


推薦閱讀:

獨自摸索unity近兩年了,沒跟過完整項目,想自己搭建一個通用框架,不知道如何下手,從哪入手?
cocos2dx 還有未來么?
Kizuna Ai (キズナアイ) 到底是不是 AI?
unity中動態批處理限制的頂點數是根據什麼來計算的?
unity的c#腳本和標準的c#語言有什麼區別和聯繫?unity是僅僅使用了c#的語法嗎?

TAG:Unity遊戲引擎 |