圖片
Unity3D支持使用大部分位圖格式作為圖片素材,甚至包括帶圖層和圖層效果的
.psd
格式文件。但在實際使用中,并不推薦直接使用非通用的文件格式。這是因為對于任何格式的圖片素材,Unity3D在導入時都會自動執行一個轉換過程,如果面對的是非通用格式,則會調用相應的第三方軟件功能來執行轉換,所以實際轉換過程會比較慢,而且有些特殊文件格式,如果沒有安裝對應的軟件,甚至根本不能識別。
因此,推薦先使用PS將圖片素材另存為
.png
格式(無損且較小),然后使用.png
格式的文件作為圖片素材來使用。
在Project面板中選擇圖片,Inspector中對應出現圖片轉換的參數選項(要注意的是,選擇不同Texture Type,其他的選項會略有不同)。
-
Texture Type
:選擇貼圖類型 -
Texture Shape
:選擇貼圖形狀,這里是設置在預覽區的顯示方式,有2D
和Cube
兩種,這個圖例中選擇2D
是因為這是2D游戲素材 -
Advanced
:高級選項(略) -
Alpha Source
:選擇透明通道來源 -
Wrap Mode
:修改貼圖重復包裹方式,Repeat
代表會不斷重復,Clamp
代表如果模型UV不在(0,1)象限的話就不會被附上貼圖,只會顯示材質的默認顏色 -
Filter Mode
:對通道數據的過濾方式,通常選擇Bilinear
,但如果是高動態色彩貼圖(hdr),就要選擇Point (no filter)
各種不同的貼圖類型:
-
Default
是作為普通類型,也就是顏色貼圖 -
Normal map
是作為法線貼圖,法線貼圖必須指定成這個type,否則渲染不正確 Editor GUI and Legacy GUI
-
Sprite
是作為“精靈”來使用,2D精靈是一種特殊的圖片顯示方法,圖片不失真,不受光照,同時還具備可切割的屬性,通常用作UI元素或者2D游戲的素材 -
Cursor
是拿來替換游戲中鼠標形狀的 Cookie
-
Lightmap
是作為光照烘焙貼圖使用,有的時候我們想把以前烘焙好的貼圖直接導入使用,就要選擇這個類型 -
Single Channel
是單通道圖片,這種類型的貼圖轉換后只會保留alpha通道的信息
最下面一欄是關于貼圖尺寸和貼圖壓縮的選項:
-
Max Size
代表轉換后該貼圖的最大可能尺寸,如果本身貼圖尺寸就小于這個尺寸的話,貼圖不會被放大,但如果本身貼圖尺寸大于這個尺寸,就會被縮小成這個尺寸; -
Compression
選擇壓縮質量,有高中低三檔; -
Format
(略)
最關鍵的是,做完所有設置工作以后一定要點擊
Apply
按鈕應用設置,否則就白做了。旁邊的Revert
按鈕可以將設置參數恢復到修改前的狀態。
普通圖片素材
普通圖片素材選擇Default
類型即可。需要注意的是,對于一些很小的貼圖,最好設置一下Max Size
屬性,這樣比較節約系統資源。
Sprite類型素材
Sprite類型又叫精靈類型,主要用于UI、粒子、2D游戲等等。
將圖片設置成sprite類型之后會得到以下特性,首先,圖片不會被壓縮,所以不會有JPEG圖片顏色失真等現象;其次,圖片可以被再次分割成為多個Sprite。
Unity3D 2017中新增了對Sprite的九宮格切分功能支持。所謂九宮格切分是指將圖片按3*3的方式分成9個部分,當該圖片被縮放是,不同部分會進行不同的變化,四個角落的4部分會保持不變,上中和下中的兩部分會橫向重復(tile),左中和右中的兩部分會縱向重復(tile),而正中間一部分會橫向縱向一起重復(tile)。這種方式很適合用在2D游戲的地面、墻面、門窗等物體上。
對法線貼圖的處理
法線貼圖必須設置成Normal map
類型,否則不會被正確識別。
對HDR素材的處理
HDR素材要單獨設置。通常被運用在天空球的貼圖上。
HDR素材最關鍵的是要設置其為16bit色深或者32bit色深,否則引擎會自動將其處理成8bit色深的普通貼圖,這樣就丟失了高動態顏色信息了。
著色器(shader)
著色器(Shader)和材質球(Material)的區別
使用過三維軟件的同學對材質的概念都很熟悉,在Maya中我們稱之為“材質球”,其英文名稱是Material。但在Unity3D(以及其他的很多游戲引擎)中,“材質”通常被用來指Shader,而非Material,所以這里我給shader起了個專門的中文名字叫“著色器”,以示區別。
Shader是編寫的材質腳本,而shader編譯出來的結果顯示為各種不同的material。很多游戲都自己寫shader,這樣更自由也更優化,但我們不具備這個能力,只能使用系統給出的默認shader或者下載其他人寫好的shader來使用。
自己寫的shader需要放在Assets文件夾下才會起作用。可以在Project面板中點擊Create
或者直接右鍵單擊選擇創建不同類型的shader資源。
根據shader中編寫的設置,shader會出現在material設置選項的Shader
下拉框中,比如上面圖例中的NewSurfaceShader就顯示在Custom一欄之中。
內置常用Shader的使用
因為內置shader太多了,而且并不是所有的都常常會被用到,所以這里我先不細講每一種shader可以做什么,只介紹最常用的基本類別。
-
Standard
類型的shader和我們在Maya中使用的材質球最接近,初學者為了方便可以完全用這一個shader來制作所有材質。 -
Mobile
類別下面的shader顧名思義是給移動平臺做游戲時使用的shader,下屬的shader基本上也能涵蓋各種用途了。 -
Nature
類別下的shader主要是給Unity3D自己的Tree類型物體準備的,有些特殊屬性專門針對Tree物體的顯示。通常創建Tree的時候會自動賦上對應的material,初學者不要胡亂改shader類型和參數。
同理,Particles類別下的shader專為Unity3D的自帶粒子系統準備,Skybox類別下的shader專為Unity3D的自動天空盒功能準備,Sprites是給精靈面片用的,UI是給UI物體貼圖用的,VR是給VR用的(我也不清楚怎么用)。 -
Unlit
類別下的shader都是所謂“無光照“shader,也就是說光照對這類材質無影響。
分成這么多類別,主要還是出于性能優化的考慮。比如Standard shader當然可以用來模擬unlit shader,但使用unlit shader無疑會減少很多計算量。
材質球(Material)
材質球(Material)可以被認為是一個基于shader的參數文件,同樣需要手動創建在Assets目錄中,后綴名是.mat
。
Maya的材質球可以隨著
.ma
格式文件被導入Unity3D(但嚴重不推薦)。實際上Unity3D自動識別了Maya材質球的相關參數,并以此創建了基于Stadard Shader的新的
.mat
文件,然后賦給轉換后的模型。因此實際上并不一定能夠保證新material的效果和在Maya中的效果一樣,畢竟兩個軟件所采用的渲染方式都是天差地別的。所以建議大家導入模型之后還是自行創建material并手動指定比較好。自動轉換的material如果不使用的話最好刪除掉,避免混淆。
所以,在Unity3D中給模型添加材質的一般流程是這樣的:
- 如果不是使用內置shader的話,就要先下載shader資源并導入Unity3D,或者用可視化shader插件(比如Shader Forge)創建好shader;
- 在Unity3D中新建一個Material,并附加給模型;
- 選擇這個Material,指定合適的shader(在Assets目錄下的所有有效shader都會自動被加載到material的shader選擇列表中去);
- 修改Material的各項參數并指定各種貼圖
Material可以在Inspector最下面的預覽窗口被預覽到,右上方的模型按鈕可以切換不同的預覽模型(有方塊、球、圓環、單面等)
常用材質球參數
Standard:
-
Albedo
是顏色,可以將貼圖資源從Project面板拖到前面的小方塊上來添加貼圖,貼圖與后面的顏色設置相乘才是最終的效果(也就是說這個顏色會被multiply到貼圖顏色上去) -
Metallic
是金屬質感,數值越高,反光顏色越偏向本色(貼圖顏色×顏色值) -
Smoothness
是光滑度,數值越高,表面越光滑,高光越集中,反射越清晰 -
Source
是透明通道來源,可以選擇使用Albedo貼圖上的透明通道或者Metallic貼圖上的透明通道 -
Normal Map
是法線貼圖 -
Height Map
是高差圖 -
Occlusion
是模擬AOCC效果的貼圖 -
Detail Mask
是在表面再疊加一層細節遮罩時使用的貼圖 -
Emission
勾選表示材質“自發光”,會多出一個Color參數來指定發光的顏色、發光貼圖、發光強度。強度可以設置到超過1,表示是一個很亮的物體。自發光材質會影響光照烘焙的結果 -
Tiling
是貼圖重復次數 -
Offset
是貼圖位移 -
Secondary Maps
是可以添加次級細節貼圖,當物體很靠近攝影機是會自動切換顯示次級細節貼圖-
Detail Slbedo ×2
是次級細節顏色貼圖,建議創建成原來貼圖的2倍大 -
Normal Map
是次級細節法線貼圖
-
-
Tiling
同上 -
Offset
同上 -
UV Set
是選擇UV組
Standard (Specular setup)與Standard的唯一區別,就在于采用Specular
而非Metallic
屬性來設置高光,這樣可以獲得不同于顏色貼圖色彩的高光顏色。
Mobile/Bumped Specular:
Mobile類型的shader就簡單很多了,可以看到只有最最基礎的參數:
-
Shininess
:光亮度 -
Base (RGB) Gloss (A)
:這里使用一張貼圖的RGB通道作為顏色,A通道作為高光貼圖 -
Normalmap
:法線貼圖
Unlit/Texture:
Unlit類型的shader就更簡單,就只有貼圖參數。Unlit/Color更簡單,就只有一個顏色參數。Unlit/Transparent可以識別貼圖的A通道并將其作為透明貼圖,Unlit/Transparent Cutout與之類似,但處理透明貼圖的方式不太一樣,會將半透明區域簡化成全透明或者全不透明。