什麼是材質
什麼是材質,這對於遊戲愛好者來說其實是比較陌生的概念,那放在現實生活中,什麼是材質呢?
仔細觀察你身邊的一切,你會發現,手機有手機的材質,關掉手機,看一看漆黑的屏幕,你會看到屏幕上有一些汙漬和指紋,以及屏幕帶來的一些反光。
再打開手機繼續讀下去吧。接著看看你的手,你能看到你手上的指紋,還有雜亂的褶皺,這些,就是真實的材質,你看著它,會意識到它是什麼東西,木頭、塑料、皮膚、金屬....而在遊戲中,材質所需要做到的,就是讓我們看著這個物體,意識到它是什麼。
在官方文檔的解釋中,材質是:定義了場景中對象的表面屬性。
一個普通的Box,賦予它一個材質使它看起來是一塊木頭
什麼是PBR
PBR即Physically based rendering,基於物理的渲染。PBR這東西其實看不見也摸不著,因為它實質上是一系列的理論、公式等等,其最終目的就是為了得出一套能模擬現實運轉的渲染理論,Unreal Engine的材質系統便是基於PBR開發的,在我們以後會不斷提到PBR,而如果對PBR有更濃厚的興趣,可以自己看一看理論基礎等等,這裡就暫時先說材質。
材質之路第一步:創建材質
學習材質,就先簡單的創建一個材質,並認識材質的各個節點設定。
安裝UE的話,用EPIC客戶端就可以安裝,打開新建一個工程即可,這裡不再贅述。
首先點擊左下角的內容側滑菜單,右鍵空白處---新建文件夾---取名"Materials"。
做好整理和命名規範非常重要,這極大的有助於我們的遊戲開發。
進入文件夾後,右鍵空白處,點擊材質。
創建一個材質
材質這一子菜單中,不僅有材質,還有:材質參數集、材質函數、材質實例、材質圖層、材質圖層混合、次表面面數文件,這些會在之後逐步瞭解和使用,目前我們僅需要創建一個材質。
材質的命名也需要注意一下,材質的命名通常會使用"M_"開頭,這也是比較通用的一個命名方式,M代表Material,因此在找尋文件的時候,一看“M_Wood"就知道,這是一個木頭的材質,”M_Water"就是水的材質,所以說命名非常重要。
打開材質之後,便能進入我們的材質編輯器。
材質編輯器
材質編輯器打開後會是這個樣子的,我們根據圖中框選的123逐個說明。
1:材質編輯面板,這個面板佔據了屏幕的大部分空間,我們日後的大部分操作也都會在面板中進行。
2:展示面板,這裡的球體可以暫時展示我們的材質是什麼樣子的,我們可以點擊右下角的小圖標將它更改成正方體、圓柱體、平面等。
3:詳細設置面板,這裡會有一些設置是針對整個材質的,在我們需要的時候會在這裡調整。
這三個部分便是材質編輯器主要的三個板塊,除此之外,在正上方還有一些按鈕,以及左下方還有一些按鈕,這些按鈕都非常淺顯易懂,把鼠標指上去停住一會兒就會顯示說明,我們會經常用到左上角的“保存”按鈕。
OK,我們打開了空蕩蕩的材質編輯器後,我們來看看處於畫面中心的這一排面板吧。
從上往下以此看,首先M_New是我們材質的名字,接著你會看到基礎顏色、Metallic(金屬度)、高光度、粗糙度等等。
那麼,這裡就是用到我們PBR的地方了,基於物理的渲染定義了我們在修改材質的時候,會從金屬度、高光度、粗糙度這些方向去定義修改,這是符合我們認知的,比如金屬度越高,那它就越像是金屬,粗糙度越高,則說明其表面越不平滑,這極大的方便了我們去製作材質,舉個例子,UE3並非使用PBR,因此你想要讓這個東西呈現金屬的質感,那你就需要調整很多名稱奇奇怪怪的參數,從而達到我們的效果,這非常不方便我們去理解和記憶。
基礎顏色:這個很好理解,就是物體呈現什麼樣的顏色,紅色藍色紫色綠色,那麼怎麼給它上一個顏色呢?
右鍵空白處
這裡我們就可以右鍵空白處,搜索“Color”。
怎麼樣?找得到color嗎?是不是有一堆奇奇怪怪的color但是就是沒有最簡單的color?
要賦予材質一個顏色,我們需要搜索“constant3vector”這個東西。你可以先按住橫向數字鍵3,再左鍵點擊空白處,快速創建這一節點。
接著,你可以雙擊它,選取一個你喜歡的顏色。
我選取了一個我喜歡的藍色,然後我們點擊確定,將小方塊右上方的節點,左鍵按住,拖動到基礎顏色節點。
這時,你就會看到,我們左邊的球已經變成藍色了,這說明我們成功的創建了一個可用的材質。
這個時候,你就會感到很奇怪,因為你會發現,constant3vector這個東西的翻譯是:常數3向量。這個東西和顏色沒有半毛錢關係,難道虛幻引擎工程師都是**?
其實並不是,材質實現的本質是通過代碼進行的,電腦可認不得花裡胡哨的顏色,那麼,我們在材質編輯器完成操作後,編輯器會將我們的命令編譯成著色器語言,著色器語言再轉化給電腦看。
高級著色器語言,High Level Shader Language,通常簡稱為HLSL,HLSL有很多,比如windows平臺的DirectX,這個大夥肯定很熟悉了。
UE的材質編輯器的好處在於,你可以不去真正的敲代碼來實現功能,但是這玩意的本質還是代碼,你可通過點擊上方菜單的 窗口---著色器代碼---HLSL代碼來查看項目的HLSL代碼。
所以說,這個時候你就明白,一個顏色,RGB三個值,剛好對應了constant3vector的三個值。
Metallic:金屬度,字面意思,定義了這個物體像不像是一個金屬,默認的值為0。
如何調節金屬度呢?我們右鍵空白處,搜索constant,就能拿到一個常數框框。
快捷的方式,是按住橫向鍵盤1,左鍵任意空白處創建。
我們左鍵點擊選擇它,然後在右側就可以修改它的值了。
我們先保持默認的0,連接至Metallic節點,你會神奇的發現!
它沒有任何變化!
對呀,因為默認值也是0。
我們將默認值更改為1,此時左側的小球已經呈現出了金屬的光澤,變成了一顆金屬小球。
看起來很棒,那我們改成100試試呢?
並沒有什麼變化。
實際上,對於金屬度的調節,值的範圍你可以看成百分比,0就是沒有,1就是百分百的金屬。
並且,通常情況下,金屬度的值要麼是0,要麼是1,0就不是金屬,1就是金屬。
如果把金屬度改成0.7
如果你選取的值在0-1中間,那麼這玩意看起來就既不像是金屬,也不像是非金屬,這玩意就會像是某種奇奇怪怪的外星材料,並不是說你不可以取中間的數值,只是在取值的時候你要想明白,這玩意這麼搞,最終得到的效果是不是你想要的?
高光度:高光度突然又抽象起來了,似乎我們在生活中很難去定義一個高光,高光在編輯器中的默認值為0.5,它與金屬度相同,同樣是百分比調節,0是沒有,1是百分百。
高光度其實更偏向於一些藝術性的修飾,我們可以創建一個常數,對比一下0高光度的效果,和1高光度的效果。
0高光度,跟一張圖片一樣
1高光度,亮堂堂的
粗糙度:粗糙度,顧名思義,指這玩意粗糙不粗糙,粗糙像是泥地裡的石頭,還是光滑的像太空望遠鏡的鏡片。默認值同樣是0.5。
同樣設定一個常數,我們觀察一下0和1的取值。
極致光滑,可以看到反射的背景
極致粗糙,有一種磨砂的質感
各項異性:難以理解的詞彙!什麼是各向異性?這個詞彙似乎難以理解,我們可以暫時先瞭解到,各向異性通常用於製作頭髮的材質,為什麼是頭髮?因為真實的頭髮是一根一根的,所形成的高光與一塊平面並不相同,因此我們需要達到相同的效果,這時候就需要各向異性。
各向異性為0時
各向異性0.5
這個時候你就會發現,白色發亮的地方,變成一個環狀的。
頭髮上的高光
自發光顏色:又好理解了,自發光顏色嘛,就是說這玩意會不會發亮,很簡單,0就是不亮,1就是亮,對不?
所以我們試一試,你就會神奇的發現。
這玩意怎麼發白光?
為什麼會是白光呢?
因為這是顏色嘛,給定一個1,那就是代表RGB都是1,那就是最亮的白色咯。
所以我們再次創建一個constant3,給一個紅色。
就可以看到,這顆球冒著一種粉色的光。
接下來,我們看到了不透明度和不透明蒙版都是暗的,無法選擇,這是為什麼呢?
我們暫時先擱置在這裡,後續會再進行講解。
我們先保存一下材質,點擊左上角的保存,此時引擎會編譯著色器代碼。
接著關閉材質編輯器,看到我們的關卡。
選擇一個你喜歡的物體,點擊選擇到它,然後將內容瀏覽器裡,你創建的材質拖上去,OK,大功告成。
同時,你也可以拖到右側的材質菜單裡,這樣也能完成材質的替換!
我們創建的第一個材質就完成了。