Substance Matrerial(.sbsar文件)


1. 什么是Substance Matrerial
Substance是Allegorithmic公司技術制作的程序化貼圖材質。
Substance基本上是一組map,用所有編輯器中所產生的參數(Diffuse, Normal, Specular, Bump等)來定義整個材質的最終效果。

1.1 支持Substance材質的3d軟件
Substance Designer
Substance Player
Unity 3d (3.5 以上的版本)
Autodesk maya 2012 以上的版本 
Autodesk 3dsmax 2012 以上的版本
Autodesk Flame 2012 以上的版本


2. Substance 材質示例
這里,我們在unity3d中,將Substance 材質和普通材質做一個對比,幫助還沒有完全理解Substance的讀者直觀的理解Substance材質。

2.1  普通材質
以下是一個應用了一張Diffuse 貼圖的坦克模型。
<ignore_js_op>


<ignore_js_op>



2.2  Substance材質
我們用Substance材質替換隨模型導入的默認材質,看看有什么不同,從模型上看,似乎除了反射面略暗,顏色偏灰,沒有太多不同。
<ignore_js_op>



但是觀察一下Substance材質, 你會發現它和普通材質相比,多了一些參數:
<ignore_js_op>



修改Dirtness和Bumpness參數,讓我們看看Substance給我們帶來了什么。
Dirtness = 0.5, Bumpness = 0.5的效果:
<ignore_js_op>



Dirtness = 1, Bumpness = 0的效果:
<ignore_js_op>



也就是說,Substance通過可視化和可編程化的參數接口,允許用戶在運行時動態的生成不同的貼圖,是不是很酷?更重要的是,用戶只需要提供一張Diffuse貼圖,就可以得到法線,和高光貼圖, 圖片體積比普通的貼圖材質減少了3倍!

3. 創建Substance材質
Substance Designer是 Allegorithmic公司發布的制作Substance材質的設計工具, 目前最新的版本是3.7, 官方授權費是570美元/2台機器。 大家如果是商業應用,請購買正版授權。

Substance文件類型
在學習Substance Designer之前,先介紹一下Substance 文件。
和程序代碼一樣,Substance也有源文件和二進制發布文件。
源文件是以sbs后綴,內容為xml格式。 源文件可以在Substance designer 編輯並發布。
二進制發布文件是以 sbsar后綴,sbsar文件是不可編輯的。Unity, 3dsmax, Maya中能使用的都是sbsar文件。只有substance designer可以發布sbsar文件。

使用Substance designer制作坦克材質
關於Substance Designer的操作界面,快捷鍵,菜單欄等等基礎內容,筆者不打算在這里詳述,Substance Designer 界面非常簡潔,自帶有User Guide文檔。
<ignore_js_op>



3.1 創建Substance
菜單欄 File -> New Substance
在彈出窗口中把Graph Name設為TankSkin, 其它保持默認。點擊Ok。
<ignore_js_op>



3.2 添加Diffuse貼圖
將IS_4M.dds文件拖動到主面板。在接下來的彈出窗口按實際需要選擇Import Resource或者Link Resource。 一個是把圖像文件鏈接到sbs文件中(體積小),另一個是把圖像文件內容嵌入到sbs中(體積大)。

IS_4M.dds:
<ignore_js_op>



這時你的主操作面板應該是這樣的:
<ignore_js_op>



3.3 讓坦克變臟 - 添加Dirtness參數
制作一個充滿污點的貼圖是Substance最典型的應用之一,也非常容易實現。

3.3.1 添加Moisture Noise節點
首先在Substance Desgner的左下方,Library下面的文本輸入欄輸入Noise, 會出現幾排Substance預定義好的噪音生成器。
<ignore_js_op>


將Moisture Noise拖放到主操作面板中。

3.3.2 Add Node -> 添加Gradient Map節點
將Moisture Noise的輸出管線鏈接到Gradient Map的輸入管線。
這樣做的目的是將Moisture Noise 從一個灰階圖(Gray scale)轉換成一個色彩圖(Color Map)。為什么要這樣做,稍后就會解釋。
這時你的主面板應該是這樣:

 

<ignore_js_op>



3.3.3 添加Blend節點
Substance Designer 提供了許多預定義好的功能節點,Blend是其中比較常用的一個節點。它和3ds max材質中的Blend功能一樣,可以將兩張位圖以不同的模式合成在一起。

接下來要添加Blend節點並且輸出Diffuse貼圖了。
首先, 在主操作界面右鍵單擊-> Add Node -> Blend。這會在你的操作界面上添加一個Blend節點。
<ignore_js_op>



仔細觀察一下Blend節點, 它有三個輸入源:
最上面的是Foreground(前景圖), 它一半是灰色,一般是橙色,意思是它可以接受灰階或者色彩圖。
第二個是Background(背景圖), 它也可以接受灰階或者色彩圖。
第三個是Opacity (硬度圖), 它是可選的,如果你不分配Opacity圖, 它就是通過參數 – Opacity 控制。硬度圖必須是灰階圖。

需要注意的是,Blend節點要求Foreground和Background的灰階或色彩屬性保持一致。也就是說,Foreground和background必須同時為灰階或者色彩圖! 這就是為什么我們在3.3.2 要用一個Gradient Map 將灰階噪音圖轉換為色彩圖的原因。

將Moisture Noise鏈接到Foreground 接口, 將IS4.dds位圖鏈接到Background接口。 然后將Blend接口的輸入端鏈接到Diffuse節點的輸入端。

這時你的界面看起來是這樣的:
<ignore_js_op>



選擇Blend節點, 找到Blending Mode, 將Blending Mode 改成 Multiply
<ignore_js_op>



調節Opacity參數:
0 = Foreground像素最弱,也就是無污點。
1 = Foreground像素最強,也就是污點最強。 

Opacity = 0   
<ignore_js_op>

     

Opacity = 1
<ignore_js_op>



3.3.4 導出Blend/Opacity參數為可編程化參數
現在你已經可以通過Blend節點的Opacity參數調節位圖的污點程度。但是到目前為止,Opacity參數還只能在Substance Designer中可見, 離開了Substance Designer, 在Unity, Maya, 3dsmax 中是無法修改這個參數的,因為它還沒有全局化, 它還只是Blend節點的一個本地參數。

現在讓我們把這個參數導出成全局化的參數。

雙擊Blend節點
在Opacity右邊找到函數編輯按鈕,它的圖標是一個正弦曲線。
<ignore_js_op>



點擊Expose, 這會將Opacity參數暴露給外界,變成一個可視化的參數。
在彈出的Expose Parameter對話框,為Input Name制定一個名字 Dirtness:
<ignore_js_op>



<ignore_js_op>



 



一旦你將Opacity參數導出成全局變量 Dirtness, 它就不會再屬於Blend節點了,要修改這個變量,你必須點擊右上角的sbs項目才能在右邊的屬性窗口編輯這個全局變量。
<ignore_js_op>



這樣,你就完成了生成一個動態污點的Substance材質的全部工作。

3.3.5 編譯發布Substance – sbsar文件
Substance已經就緒了! 你可以編譯並發布它了。
在右上角右鍵單擊你的sbs項目,點擊Publish: 
<ignore_js_op>



把這個sbsar文件放到Unity中,去看看效果吧 !

3.4 生成法線凹凸貼圖
Substance制作法線凹凸貼圖也是非常強力的!而且不需要提供額外的貼圖文件,直接從Diffuse 貼圖生成。

這里要補充一下,Substance將Diffuse貼圖轉換成Normal貼圖的原理是將貼圖中的RGB標量值,通過公式計算轉換成代表法線的向量值。但是這並不能反映出你的模型真實的凹凸情況,也就是說通過 Diffuse貼圖生成的法線並不是真正基於模型本身的頂點信息生成的,而是通過Diffuse貼圖的RGB值生成的, 如果你需要的效果是能真正反映出模型本身的凹凸特性,你應該直接添加一個法線貼圖,而不是用Diffuse貼圖生成。

3.4.1 添加節點
首先請添加以下節點: Clouds_3(從Library中搜索), Levels(標准功能節點), Normal(標准功能節點),並鏈接到Normal Output.

如果你沒有找到Normal output.可以用這樣添加一個Normal Output: Add node -> output, 並將usage設為Normal(默認是diffuse).

這時你的主操作界面應該看起來是這樣的(之前的污點貼圖我就不截屏了):
<ignore_js_op>




這個圖的意思是: Clouds_3 = 原始輸入,用於產生高度圖。
Levels = 控制器,控制生成的平坦度。
Normal = 轉換器,將高度圖裝換成法線圖。
Ouptut Normal = 最終輸出法線貼圖。

3.4.2 關於Normal節點
Normal節點的功能是: 接受一個代表高度圖的灰階圖,並通過公式將這個高度圖轉換成法線貼圖。
灰階圖越白的像素,代表高度越高,越暗的像素代表高度越低。如果一個圖片區域內的黑白像素越不均勻,則代表這一區域內的法線越不規則。反之,如果一個區域內的黑白像素十分均勻,例如,全部是黑色,或者全部是白色,則這個區域的法線則全部指向同一個方向,也就是越規則。

3.4.3 關於Level節點
Level節點是Substance制作中最常用的標准功能節點之一。它的作用是在輸入和輸出端設置閥值,常用來調整圖形的密度,明暗度等屬性。
在這里,我們通過Levels來限制輸入像素的黑度,以達到調整法線的平坦度的目的。
雙擊Levels節點,在右邊的屬性欄窗口,找到Specific Parameters 卷邊欄,點擊Values按鈕:
<ignore_js_op>



點擊Values按鈕會從矩形圖界面切換到到參數化界面。
<ignore_js_op>



調節Level Out Hight參數,觀察Normal和Normal output節點, 你會發現隨着Level out high的數值變小,輸出法線貼圖變的平坦。這是因為,你修改了Level節點輸出的最大值。如果最大值為0,就是說所有輸出像素的最大值是0,這樣你的法線節點就是接受一個全黑的單色圖片。

小結:Level out high越小,高度圖的黑白像素越單調,輸出的Normal 貼圖也就越平滑。

3.4.4 導出Level/Level Output High參數
將Level Output High 參數導出為 smoothness 后,你就可以在Unity/3ds max/Maya中通過這個參數來調節Substance材質的光華程度了。

小結
以上只是介紹了 Substance 最典型的用途之一,並且介紹了Substance Designer設計Diffuse和Normal貼圖的一般過程。 事實上Substance還能支持眾多的輸出通道,如Specular 高光貼圖通道,Bump 凹凸貼圖通道, Reflection 反射貼圖等等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM