前言
在3D面數有限之下要做出立體的窗框以及多面的玻璃材質,使用傳統的建模方式製作3D物件在進入painter裡面上材質,是一個相當費神又浪費面數的做法,更會使得模擬場景在運行的時候花了大量的運算空間,這時候利用Designer強大的材質製作軟體,便可以使用一個材質球就解決了重複窗框的問題,這一篇就利用一些小技巧串起Designer的Node同時擁有在一個3D面數就可以呈現重複窗框以及髒汙玻璃的材質效果。
此篇會跟著大家從一開始的窗框串到玻璃的髒污、破損、歲月痕跡以及到玻璃的透明度調整,因為Designer的Node需要大量的blend以及相關的node串接,在練習之前大家可以先以目前進度的Designer檔案開啟觀看練習會比較好上手。
下載連結:https://drive.google.com/file/d/1zeYSyFWbU0JLkazDt–vQOcNxqDD2Q9P/view?usp=sharing
- 首先打開SubstanceDesigner的介面,我們一開始製作一些基本的窗框,先建立一個Tile generator並找到 Instance Parpameters 設定X、Y Amount 為5 (這邊可以設定為Parameters以供變成材質球後做調整,但為了目前預覽方便我們先用手key)。接著我們串一個Invert Gray Scale將灰階反轉,反轉後串一個Curve,並找到Addressing調整曲線讓curve後的黑白灰看起來較為有層次,這部分也會影像到後面的normal以及Hieght立體效果。最後串到Blend node並將輸出串給AO、Height、Normal即可看到窗框開始成形。
Node 資訊
接著我們先來做一下基礎的窗戶髒汙(目前的3D預覽因為Node還沒串好所以都看不到效果不用擔心),首先我們將上一步的Curve拿來當作 HBAO的輸入並串到Blend的Back ground HBAO的Instance Parameter 調整Height Depth : 0.1 Radius:1。然後我們將剛剛新建的Invert GrayScale接收Invert Gray資訊,串到新建的Invert GrayScale及新建的Blend,並在Levels Node找到Levels Histogram並調高白色的質量,接著將新建的Blend接收Levels 資訊到Foreground 接收HABOy 資訊到Background 輸出給slope_blur_grayscale Blend Mode : Subract
新建一個Slope blur grayscale Node,接收Blend資訊,串到Gray Scale 接收Cloud2資訊,串到Slope 找到Instance Parameter調整
Samples :29
Intensity :2.03
然後我們將Invert Gray Scale Node串到一個新建的Flood Fill Node當作遮罩用的Node,接著新建一個Flod fill to grayscale 轉為灰階, 最後串給Levels 調整黑白強度,這邊盡量將黑白的質量調到如下圖所示看不到灰色即可。
Node 資訊
2. 接著我們來處理窗框基本的木紋紋理,這些source可以依照自己的喜好或是需求更換,這次的練習先以木頭紋路為對象。
首先我們新建一個directional_noise_2 Node並設定Scale :1 Disorder:0 ,然後建立一個Blend 1 Node 設定Blend Mode : Subract ForeGround 接收Directional_noise_2資訊 BackGround接收 Curve資訊 輸出給Edge_detect以及Blend3。
再來新建一個Grandient Map Node,這個Node主要是控制漸層顏色,我們將漸層的顏色調整為類似木頭的漸層,接著在新建一個Edge Detect 設定Edge Width : 1.76 Edge Roundness : 0.41 Invert False Tolerance : 1
新建一個 Blend 2 Node 設定Blend Mode : Subract ,ForeGround 接收Directional_noise_2資訊 BackGround接收 Curve資訊 輸出給Edge_detect以及Blend3
接著新建一個Blend 3 Node 設定Blend Mode : Max (Light) ForeGround 接收Blend1資訊 輸出給Normal以及Height。
然後新增一個Uniform Color 並設定顏色為土黃色。
最後我們建立一個 Blend 4 Node 設定 Blend Mode : Max (Light) ForeGround 接收Unifrom Color 資訊 BackGround接收 Grandient Map 資訊 Opacity 接收Blend2資訊 輸出給Base Color
這時候可以清楚的看到窗框開始像木紋紋理的樣子了,而且木紋也成呈現了有歲月痕跡的樣貌。
Node 資訊
目前的木紋效果有點粗糙,我們來試著調整看看,首先將原本串好的normal資訊給新建的Curvature Sobel Node,這個node可以將Normal資訊轉為灰階,並將Intensity 設定為0.5,接著新建一個Leve1 並找到Levels Histogram 調整黑灰白的色,讓整體對比更加強烈。新建一個Sharpen Node主要是在銳化整個map的圖像,就像在PS裡面讓圖更清楚更突出的一個Node,這邊設定Intensity : 1。
最後我們做一個Blend 5 來混合一下接收新建的資訊,Blend Mode : Max (Light) ForeGround 接收Blend2 資訊 BackGround接收Sharpen 資訊 輸出給Level 2
Node 資訊
串接好可以發現我們目前做的木紋越來越真實了
接著我們新增一個HSL Node在輸入Base Color之前調整一下整體的HSL,
Hue : 0.33
Saturation : 0.22
Lightness : 0.4
調整完以後可以看到木頭紋路的效果已經變得相當舊化,斑駁的感覺讓歲月痕跡表露無遺。
3. 接著我們就可以開始處理窗戶玻璃的部分了,首先我們先找到之前做的玻璃部分,新增一個Grandient Map並調整漸層色像大樓玻璃的反射漸層顏色。
然後我們就可以開始把前面所做的木框顏色以及玻璃顏色混合在一起了,新建一個Blend Node 設定Blend Mode : Add sub ForeGround 接收玻璃部分的 Grandient Map 資訊 BackGround接收窗框部分的 HSL資訊 輸出給Base Color
因為目前的玻璃看起來有漸層有點時代痕跡感覺但是顏色太乾淨,我們先來調整一下玻璃材質讓他更有老味,首先我們做一些玻璃破裂的效果。
接下來我們先簡單的準備一下玻璃破裂的紋路串接作業,首先我們新建一個Slope Blur GrayScale,Grayscale的串接點接收Cell 3的資訊,Slope的串接點則接收PerlinNoise的資訊,這時候已經看得到原本Cell 3的龜裂紋路出現了一些較大的破洞,接著在新建另外一個 Slope Blur GrayScale , Grayscale的串接點接收 剛剛串好的 Slope Blur GrayScale 資訊, Slope的串接點則接收另外新建的Cloud2資訊讓整個龜裂的圖案更加不規則且豐富。
玻璃龜裂的素材我們準備好了就可以開始串接Normal,首先先新建一個Blend Node 設定Blend Mode : Add sub ForeGround 接收玻璃破裂部分的 Slope Blur GrayScale 資訊 Opacity 接收玻璃部分的 Levels資訊 輸出給Normal,我們這邊新建的Normal設定Intensity為1 ,接著新建一個Normal Combine node串接Normal 1 以及 Normal 2的資訊。
Node 資訊
串接好以後不管在3D或是2D預覽都可以看得效果已經出來了
目前起來來龜裂的部分已經有凹凸的感,但是真實世界的玻璃龜裂後不會跟原本的玻璃顏色一樣,所以我們來處理這邊的顏色問題。
首先建立一個Grandinet map Node 接收玻璃龜裂的部分 Slope Blur Gray Scale Node的輸出資訊,並調整 Grandinet map 的顏色讓破裂的地方帶點白色,接著新增一個Blend Node設定Blend Mode : Add (Linear Dodge) ForeGround 接窗框部分的 Levels 輸出 資訊 BackGround接收的龜裂玻璃上色的 Grandinet map 資訊 輸出給Base Color
Node 資訊
這時候我們可以看到龜裂的地方已經帶有顏色了
再來我們來串接玻璃髒汙的Hieght以及Meatllic的部分,首先我們先建立一個Levels Node,Levels Node接收Slope Blur GrayScale的資訊並調整黑灰白的部分集中,然後新建一個Blend1 設定Blend Mode : Subract ForeGround 接收 Levels 輸出 資訊 BackGround接收一開始製作格子的 Levels 資訊( 參考下圖) 輸出給Blend2。
為了讓玻璃上的效果更豐富我們這邊新增一個Cloud2 node,設定NodeScale : 1 Disorder : 0,然後新建一個HistogramScan設定Position : 0.12 Contrast:0.66。接著串連到Blend2並設定Blend Mode : Subract ForeGround 接收histogram_scan輸出 資訊 BackGround接收Blend1 資訊 輸出給invert_grayscale及non_uniform_blur_grayscale。
接著我們新建一個Invert grays cale Node,接收Blend 2 輸出資訊 輸出給non_uniform_blur_grayscale。
然後建立一個Blend 3 設定Blend Mode : Subract ForeGround 接收一開始的窗框Levels輸出資訊(如下圖) BackGround接收non_uniform_blur_grayscale資訊 輸出給Blend4。
新建一個Blend 4 設定Blend Mode : Overlay ForeGround Blend3輸出資訊 BackGround接收有cloud資訊的Blend 輸出給Invert Grayscale。
接著新建一個Histogram scan 1設定Position : 0.53 Contrast: 0 輸出給Metallic
最後我們 新建一個Histogram scan 2設定 Position : 0.28 Contrast: 0.21 最後輸出給Height
這時候我們的玻璃已經呈現出了明顯的玻璃龜裂以及時間痕跡的感覺
4. 最後我們開始來調整Opacity的node串接,首先我們先建立一個tile_sampler Node,這邊要設定比較多部分,這個node主要是要呈現玻璃上的不規則刮痕效果
找到 Instace Parameters 設定 X Amount : 43 Y Amount : 6
接著設定 Size X : 0.13 Y:0.94 Scale : 0.95 Scale Random : 0.3
Rotation Random 設定為 0.03
如果照著這個數據設定的話可以看到2D預覽會如下圖,當然大家也可以依照喜好自己調整看看
接著新建一個Perlin_noise node 並設定Scale : 20 ,串接到一個新建的Slope blur grayscale1,這邊設定Slope blur grayscale1 Gray Scale 接收 Tile Sampler 資訊 Slope 接收perlin_noise資訊 設定 Samples :28
然後新建一個Cloud 2 調整Scale : 1 ,另外新建一個 Slope blur grayscale2 這邊設定Gray Scale 接收 Slope blur grayscale1 資訊 Slope 接收Cloud2資訊 設定 Samples : 24 Intensity : 0.81
之後建立一個Blend Node 設定Blend Mode : Subract ForeGround 接收Slope blur grayscale 2輸出 資訊 BackGround接收Levels 資訊(參考下圖) 輸出給新建的Levels, 新建的Levels Node將黑白輝的色階做調整讓色階較明顯,接著做一個Invertgrayscale反轉剛剛我們所串聯好的所有資訊。
最後新增一個Output Node 當作我們最後的輸出,這邊的Output Node當作我們這顆材質球的Opacity ,所以我們在output node裡面找到 Usage 並把channel選擇Opacity
設定好以後我們用Iray預覽3D看看, 我們可以看到玻璃以及窗框的部分細節變得相當的多。
把Render方式改成openGL看一下效果,雖然沒有Iray這麼透明,但是到時候進到Unity還是一樣是透明的。
小結:
Substance Designer的串node會使用大量的Blend以及不同的 Slope 或是 grandient來做些許的調整以及混合,因為在painter裡面是比較直覺的圖層概念,在Designer裡面串Node的時候所有的數據以及mode方式都會影響最後的結果,但是好處就是一顆材質就能做很精細的複合式材質,可以大量降低效能的運算,算是一個相當值得投資的學習項目。
參考資料:https://youtu.be/DFJEgD_XBgc