使用紋理(Texture)
????????當(dāng)物體表面并非是純色的時候,比如帶波點(diǎn),斑紋或者表面有刮痕或被裂紋等,這些效果該如何實現(xiàn)呢?
????????這里我們需要提到一個概念是貼圖(Maps)。Maps是覆蓋在游戲物體上的2D圖片,用來設(shè)置表面的顏色、specularity或metalness、物理紋理或其他相關(guān)屬性。包含maps的圖片文件稱為紋理(Textures)。
紋理是什么
????????紋理(Textures)可以看做是普通的圖像文件,比如BMP,TIF,PNG和JPG。圖像文件中的數(shù)據(jù)通過通道(channels)進(jìn)行組織。黑白圖像(也稱為灰度度,grayscale image)只有一個通道來表示每個像素的灰度值。彩色圖像一般需要RGB三個通道,每個像素使用RGB值來表示具體的某種顏色。還有一些圖像文件格式會使用四通道:RGBA,A表示alpha,用來調(diào)節(jié)透明度。

????????圖像文件中的通道數(shù)據(jù)可以看做是數(shù)字矩陣。在材質(zhì)中,這些數(shù)字可以表示顏色或透明度之外的其他屬性,比如smoothness,specularity或metalness,甚至是頂點(diǎn)的法線信息等。
????????藝術(shù)家們通常通過Blender、3DMAX等3D建模軟件來創(chuàng)造他們的3D模型,這些軟件也能夠生成模型所需的紋理文件。我們也可以使用普通的2D圖像文件當(dāng)做紋理來使用,如下圖所示:

查看紋理文件屬性
????我們可以點(diǎn)擊一個紋理文件,然后在其Inspector面板中查看其屬性。

????????其中Texture Type可以選擇紋理的類型,比如法線貼圖、2D精靈、UI元素、光照貼圖等。Texture Shape是貼圖形狀,可以是2D平面、2D平面數(shù)組,也可以是Cube或3D的。另外,在底部預(yù)覽窗口中,可以選擇紋理的單個通道比如R/G/B來看單個通道的值。

????????另外,可以雙擊紋理文件,其效果就和我們在資源管理器中雙擊打開圖片文件一樣,會使用圖片預(yù)覽器或PS等軟件來打開圖片(取決于圖片的默認(rèn)打開方式)。
????????當(dāng)我們在材質(zhì)窗口中,將我們的紋理拖動到了Inspector的Base Map左邊的方框中后,還可以設(shè)置Base Map的顏色,這樣可以得到紋理原始顏色和所選顏色的疊加的效果,如下圖:

Tiled Textures
????????在材質(zhì)的Inspector面板中,可以看到Surface Inputs下有Tiling和Offset兩個選項。
????????Tiling決定了mesh表面上會重復(fù)多少次紋理,這個值越高,我們的紋理就重復(fù)地越多,單個紋理看起來也就更小。
????????Offset決定了我們從紋理的哪個位置開始應(yīng)用到物體表面上。比如X設(shè)置為0.5表示從紋理的一半寬度的地方開始tiling。
????????這兩個值在Editor中可以根據(jù)需要自行設(shè)置,如下圖,我將Tiling設(shè)置為5,Offset設(shè)置為X=0.5,Y=0.5,效果如下:

UV貼圖
????????對于一些簡單的形狀如球體或長方體,紋理映射到物體mesh的哪個位置似乎不會影響很大。但對于其他復(fù)雜的物體就不是這樣了。比如對于一個人形角色的身體來說,其表面上可能會有皮膚,衣服,這些所有的東西都在一個材質(zhì)中。此時如果紋理映射的位置不正確,則角色就會看起來非常奇怪了,比如該是耳朵的地方,顯示的卻是眼睛(刻意而為除外^_^)。
????????當(dāng)在建模軟件中創(chuàng)建3D模型時,軟件會生成上面所提到的紋理,生成的過程稱為UV映射(UV mapping)。3D建模軟件如Blender,Maya,3DMax等,會生成UV坐標(biāo)的2D坐標(biāo)集。UV坐標(biāo)和普通的2D空間的XY坐標(biāo)是類似的。UV坐標(biāo)和mesh有關(guān)系,而和場景中的3D空間無關(guān)。
????????UV映射表示的過程是將3D模型的表面展開到一個平面,并將2D紋理貼圖到這個平面上。在這個過程中,建模軟件生成要被重新包裹到模型上的紋理的UV坐標(biāo)。

