虛幻4渲染編程(材質編輯器篇)【第三卷:正式準備開始材質開發】

虛幻4渲染編程(材質編輯器篇)【第三卷:正式準備開始材質開發】

來自專欄虛幻4渲染編程10 人贊了文章

前面兩章我們已經完成了對工具的研究,下面我們久正式開始啟程啦!後面的內容可能就比較美術了。

還是老規矩上個效果先:

(高級紗材質)

不過這一節我們不會立刻開始開發材質,我們先探究一下材質的基礎。(上面的可不是alpha blend,沒有透明亂序和高光混合損失!)。上面那個效果我會在後面介紹布料的章節連同:絲綢,紗,布,皮,麻,鐳射重金屬,棉等一起介紹。

現在的次世代遊戲,材質表現已經成為遊戲中非常重要的一部分,本專欄將一步步簡述遊戲開發中的材質開發。

首先要普及一個概念,到底什麼叫「材質」。是一個材質球嗎?是一個shader嗎?是幾張貼圖嗎。我理解的材質準確地說應該叫 shading。請不要把它翻譯為「著色」,我認為這是不對的。在計算機里shading包含了很多事情。一個材質的表現需要模型,貼圖,shader,燈光,後期等一系列配合。

在我們開始我們的材質開發之旅之前我們需要具備以下知識:

(1)C++和C#

(2)DirectX+HLSL或者OpenGL+GLSL等,還需要直到一些圖形學知識。

(3)3DMax或Maya,Photoshop,SusbtancePainter和SubstanceDesigner,Zbrush等DDC軟體

(4)引擎的話需要掌握Unity和UnrealEngine4

後面的文章將默認閱讀者已經掌握或至少入門以上知識。如果你還沒有掌握上述的知識,也不必擔心,可以大家一起來討論學習自然就會了。或者現在先去看以下上述羅列的基礎知識。也可以去看看我以前的一些文章,希望有所幫助

下面是我們主要需要用到的軟體:

其中VS的插件需要以下:

UnrealVS這個插件是虛幻引擎自帶的,在引擎目錄的extra下即可找到,其餘的插件除VSAssist外全部都能在VS的拓展里找到。

VSCode需要以下插件:

也是直接在VSCode的拓展更新里就能找到。編寫max腳本會非常方便。如果你喜歡用maya請跳過這一步。

下面我們來對材質作進一步探索。現在的遊戲工業大致有兩個走向,一個是真實向如刺客信條起源等。一個是風格化向,如塞爾達,二之國等。特別是歐美等大作,都是喜歡寫實風格,但是其實不管是那種方向,其實都感覺你中有我我中有你。就拿神秘海域4來說,其實他寫實的背後也做了不少風格化處理,這一點很好論證,你拿刺客信條的畫面和神秘海域的做對比就能輕易發現,各個寫實類遊戲都有自己的風格化的東西在裡面。一提到寫實我們會常常聽到PBR。所以到底什麼是PBR呢?

PBR顧名思義,基於物理的渲染,可以更加準確地表示光和表面的相互作用。PBR其實是一套渲染方案,它不是一個材質球,不是幾張貼圖,不是SubstancePainter!!!我們在做PBR材質的時候,需要讓我們的貼圖是基於物理的,我們的shader是基於物理的,我們的燈光是基於物理的,我們的攝像機需要是基於物理的等等。如果只是shader的計算是基於物理的,那隻能叫PBS。下面我們就來梳理一下PBR材質製作過程。

很多美術被很多錯誤的理論所誤導,比如有些人會去根據經驗,金屬的metalic是多少,布料的Rouph是多少。這些其實會變化的,不同的引擎,不同的計算公式,這些值多多少少都會有變化,那麼如何才能做出正確的效果呢,最好的辦法就是在你們項目所在的環境下去實驗,找出正確的那幾個值。

我們可以做一個陣列,這樣就一目了然了。

不同的項目不同的計算公式,這些值多多少少都會有所變化,我們可以去挨個實驗,找出非金屬,高光塑料皮革,亞光塑料皮革,高光金屬,亞光金屬的值,然後把這個值記錄下來,以後就按照這個值去做。當然會有偏移,偏移造成的主要原因是臟跡掛痕造成的。

其實現在業界流行的這套PBR材質模型能夠描述遊戲內90%的材質效果,如金屬石頭,沙子泥土等等,但是這並不意味著有了這個我們能做一切事情了,有些比較特別的材質如寶石,頭髮,皮膚,眼睛,絨布,皮毛,羽毛等可能現在的這套比較流行的PBR材質模型就不適用了。而且PBR材質模型也有很多種,更多詳情可以去網上搜搜PhysicbasedRendring相關文章。遊戲內使用的基於物理的渲染大部分也都是擬合的。為什麼頭髮布料不適用PBR那套模型公式呢?因為原理就不一樣。想了解原理的話只有去看各大論文了,在RTR3里有對這些公式模型的詳細描述。

【貼圖】

第一:BaseColor

既然是基於物理的渲染,貼圖自然也要基於物理。BaseColor一般儲存為sRGB,線性空間中的顏色值。線性空間和gama空間的關係必須要搞清楚。一般顏色的計算這些都是線性空間下的。在製作PBR材質的時候,Basecolor的亮度很有講究。非金屬的基本上應該服從正太分布,然後金屬集中在240左右附近。

可以把PS的圖像模式改成LAB模式,然後窗口打開直方圖來檢測BaseColor的製作是否合法。

BaseColor一般應該是一致的,平台的,沒有過亮或過暗的,BaseColor應該只包含純顏色信息不應該有光影信息。顏色代表了非金屬材料的反射率,除了遮擋外,應該沒有光照信息,黑色值不應該低於30 sRGB或50sRGB(如果材質顏色低於的話,你以為你是黑洞啊),亮度值不應高於240 sRGB

第二:Normal

法線貼圖烘焙的時候主要是注意坐標空間,左右手坐標系。杜絕手動PS這些操作。除非你有特異功能可以人眼光線追蹤。

第三:Metalic和Rouphness

金屬度和光滑度這一點上需要特別注意,因為PBR模型其實是擬合的(也可以說是帶有一定trick的)。所以其實並無法表現所有零到一各個數值的完美效果,我們只能取其中一小段來使用會比較完美。這個取值範圍會根據不同的PBR模型不同的環境而變化。具體值需要自己取實驗。

第四:貼圖使用

在貼圖的製作過程中,可能我們並不會刻意地去關心什麼貼圖應該繪製什麼東西。可能這個問題會有點奇怪,但是仔細想想,美術在貼圖製作過程中一般都是怎麼好看怎麼來,也不會刻意去關心到底貼圖裡面應該畫什麼。舉個例子,布料的紋路到底應該怎麼表現呢?畫在Diffuse上?那那種有高光的布條怎麼辦?美術可能會說,這個好辦,在光滑度或者金屬度上也畫上去啊!但是問題就來了,貼圖就那麼幾張。假設貼圖上能保存的我們肉眼能看到的紋理信息的總量是10單位,那麼我們想儘可能多地表達我們的信息,那麼就會涉及到儲存空間不夠用的問題。所以合理地分配什麼信息儲存在什麼貼圖上,可以有效地使我們貼圖的利用率更高。比如水漬使用光滑度去表現就可以了,沒必要使用Diffuse或者別的。這樣還能避免過噪和貼圖壓縮帶來的信息損失。

【模型】

在遊戲開發過程中其實會常常遇見一個問題,模型到底應該如何拆分?怎麼建模怎麼布線這些我就不多說了,這些都是角色師應該知道的。我們站在材質的角度上想這個問題。一個材質至少是一次DrawCall,如果角色材質過多,會導致DrawCall過多,當然DrawCall的多少和遊戲運行效率不是必然關係。那麼我們應該如何拆分模型呢?

可以確定的是,在其他外在因素一定的情況下,如果遊戲瓶頸在Drawcall上的話,材質數量越少越好。當材質計算很複雜的情況下,可以把模型拆開使用兩個材質,可能效率反而還有所提升。單單就從效果上說的話,如果引擎架構是像Unreal那種分材質模型或者光照模型的話,那麼模型拆分就是根據光照模型的數量種類來拆,如果是像unity那種不分這些概念的話,那麼就可以按照複雜度等因素來拆,其實這個還是一個比較靈活多變的概念,這裡只是一個聲明性的論述,希望引起大家的關注罷了。

【動畫和物理模擬】

有些人可能會疑問了,這不是材質么,跟動畫和物理模擬有關係么。其實是有一定關係的,我們需要知道一些相關的東西。比如我們製作布料材質,我們需要去設定布料模擬狀態下布料的運動狀態的物理硬度這些。布料的表現,布料的物理模擬至少佔了一半的比重。比如我們要做草的材質,這時候是需要考慮草的擺動因素的,如果草的擺動通過操控頂點著色器來實現的話。

至此我們大概描述了一下材質的一些東西。後面我們就會開始實際動手製作研究材質了。還有很多細節我們沒有討論到或者上面有很多東西還很粗略,後面我們慢慢來細化。

推薦閱讀:

TAG:shader | 虛幻4遊戲引擎 | 虛幻引擎 |