前言
在Unity2018.1之後新增了Shader Graph功能。(emmm,現在都2020了,只怪自己平時關注新知識太少了)Shader Graph可以在一個可視化的面板中完成shader功能的實現,一句代碼都不需要寫,大大降低了shader的開發難度。
官方文檔:https://docs.unity3d.com/Packages/[email protected]/manual/index.html
環境
Unity版本2018.1或者更新,同時需要在Package Manager中安裝好URP,HDRP或者LWRP。裝好URP或者其他會自動幫你安裝好Shader Graph Package。
本文用的是Unity2019.3,以及URP
創建第一個Shader Graph
Package都安裝好後,我們在Project中右鍵Create->Shader中就可以看見有幾個Graph選項。我們創建一個PBR Graph,就會生成一個.shadergraph的文件,簡單的命名爲PBRGraph,雙擊該文件就可以打開我們的編輯界面。
左邊的面板會顯示我們Shader的可配置參數,右邊的面板會顯示預覽效果,我們可以通過右上角的兩個按鈕來開關它們。
首先先簡單的介紹下下面幾種Graph:
PBR Graph:(physically based rendering)
用於製作基於物理的Shader,可以用於金屬或鏡面效果等。其輸入的值有如圖這些:
Vertex Position | 每個頂點在模型空間中座標 |
Vertex Normal | 頂點的法線 |
Vertex Tangent | 頂點的法線切線 |
Albedo | 定義Material的反射率 |
Normal | 定義Material的法線,法線最好在切線空間中 |
Emission | 定義Material的發散效果 |
Metallic | 定義Material的金屬效果 |
Smoothness | 定義Material的光滑程度 |
Occlusion | 定義Material的環境光遮擋值 |
Alpha | 定義Material的alpha值,被用於透明材質或者alpha裁剪 |
AlphaClipThreshold | alpha低於該值的片段會被丟棄 |
Unlit Graph:
用於製作無光照效果的Shader,參數相對比PBR的要來的少
Sub Graph:
子模塊,類似於我們代碼中的函數,會有一個Output(也就是return)來輸出值。我們可以通過設置自定義輸出的類型以及個數等。適用於一些模塊會被頻繁使用的時候,可以做成一個Sub Graph,然後在其他地方要使用的時候,添加Node並選擇它即可。
Material選項
在我們的Master Node上點擊小齒輪按鈕,會出現Material的相關配置選項,如下圖。例如,若我們要使Shader實現透明效果,需要在Surface選項中選擇Transparent
選項 | 可選值 | 作用 |
Precision | Inherit / Float / Half | 定義精度 |
Workflow | Speculat / Metallic | 設置Material的默認工作模式 |
Surface | Opaque / Transparent | 定義Material是否透明 |
Blend | Alpha / Premultiply / Additive / Multiply | 當Material設置爲透明,定義其混合模式 |
Fragment Normal Space | Tangent / Object / World | 定義默認的座標空間值 |
Two Sided | True / False | 設置爲true,則Mesh的兩面都會被渲染 |
言歸正傳,在打開我們創建的PBRGraph編輯界面後,我們可以右鍵來創建Node,這些Node同樣的可以看做是一個個函數,都擁有對應的輸出值,有些Node也會有對應的輸入值。這裏我們先創建一個Color的Node(可以利用搜索功能直接定位),然後將其輸出的值拖到Albedo上,此時預覽界面的效果也隨之變化,點擊左上角的Save Asset保存一下。
接着我們創建一個新的Material,在Shader中選擇我們的PBR Graph,然後替換物體原有的material,就可以看見效果了。
添加Property
此時我們無法通過修改Material的參數來修改顏色,解決方法就是利用我們的Properies。進入到我們的編輯界面,我們可以直接在Color節點上右鍵,選擇Convert To Property,這樣就可以將我們的color的值轉換爲一個可以修改的參數,顯示如圖:
當然,我們也可以在Properties面板中點擊加號,直接添加參數,然後拖到編輯面板中,進行關聯。保存一下後,就可以發現現在我們可以通過Material來自己調整需要的顏色了。
生成Shader文件
我們可以通過在Master面板上右鍵,選擇Copy Shader就可以得到對應的hlsl語法的Shader腳本了。
在下一篇我們會通過一個簡單的案例,來更加熟悉Shader Graph和Node