Unity2018 Shader Graph 學習筆記(一) ShaderGraph簡介

Unity2018終於要在4月份和大家見面了,這次更新Unity為用戶提供了更加靈活的可編程渲染管線SRP以及可視化Shader工具——ShaderGraph。 這個專欄主要會講解Unity的官方的ShaderGraph示例以及我自己的一點兒使用UnityShader的經驗來完成的遊戲中可能用到的渲染效果。希望能給想要學習UnityShader或者已經有了一部分UnityShader使用經驗的同學一些啟發,也希望大家能和我一起交流學習,共同進步。

那麼首先先來簡單說明一下ShaderGraph和傳統的UnityShaderLab之前有什麼聯繫和區別吧。 在Unity2018之前,我們需要創建一個shader文件,在裡面寫很多的代碼來創建我們的shader。而現在,我們只需要用一個編輯器,通過可視化的方式,不用記住許多複雜的指令指示就可以完成我們的shader的編輯。一個最簡單的沒有光照的shadergraph編輯界面如下。

最簡單的shadergraph

在上面這個shadergraph中,有一個叫做BlackBoard的面板,這個面板基本相當於ShaderLab中的Properties塊。在這裡我們定義了一個最基本的_MainTex貼圖,並且將一張蒙娜麗莎的圖片作為默認值賦予這個貼圖屬性。

一張賦予了蒙娜麗莎貼圖作為默認值的貼圖屬性

在中間的區域,是我們shadergraph的主體區域,定義了我們如何算出最終的著色結果。這部分更像Unity為我們提供的表面著色器。在這個著色器中,我們將一些Unity指定的屬性輸入到面板之中,例如片段的顏色等。然後Unity會將正確的渲染結果顯示到屏幕上。目前Unity的shadergraph支持的LWRP管線提供了兩個輸出結果的控制器(在shadergraph中稱作Master),其中一個是不計算光照的shader,也就是我們上面繪製蒙娜麗莎所用到的shader,這個MasterNode的屬性如下圖所示

Unlit Master

首先是一個Vec3 Color,這個就是片段最基本的顏色屬性,然後是一個Alpha值,如果有需要Alpha測試,還提供了一個AlphaClipThreshold屬性進行Alpha測試。除此之外,節點上還有簡單的控制表面屬性(Opaque/Transparent)和混合模式以及是否剔除的控制選項。我們要做的就是通過屬性面板(BlackBoard中定義的內容例如貼圖)以及ShaderGraph中內建的一些節點(也可以自己定義節點)將正確的輸入傳入這個MasterNode中。一個最簡單的根據第一套uv採樣的shadergraph如下所示

我們將_MainTex貼圖通過SampleTexture2D這樣一個內置的節點和uv0作用進行採樣,將採樣後的顏色值vec4賦值給MasterNode中的Color節點。由於我們的圖是不包含透明通道的,因此我們不需要修改Alpha的值也不需要進行Alpha測試。

最後,ShaderGraph中提供了一個渲染結果的輸出預覽面板,在這個面板中,我們可以使用一些基本的元素例如Quad,Sphere或者工程中存在的Mesh進行渲染結果的預覽。

Quad

Custom Mesh

這樣,一個簡單的shadergraph就完成了。除了Unlit方式之外,ShaderGraph還提供了一種使用光照進行渲染的graph——PBRGraph。他和Unlit方式在編輯界面的唯一區別就是MasterNode的屬性。增加了許多和光照相關的屬性例如法線等。

PBR Master

可以看出來上面所定義的屬性和UnityStandardShader比較類似,都是使用了PBR渲染的光照計算。不過Unity的LWRP渲染管線中的PBR所使用的一些計算函數相對於UnityStandardShader計算量上面有所縮減,相對來說更加適合低性能的設備。

那麼ShaderGraph適用於什麼樣的場景呢?我的體驗是這樣的,ShaderGraph更適合於搭建應用於某個場景中元素的特殊效果,編輯起來方便快捷,不需要寫代碼,部分美術人員經過學習也有可能很好的進行編輯,降低美術和程序之間的溝通成本。例如需要在場景中增加一個帶uv動畫的Quad,美術人員可以通過shadergraph方便的實現,而不需要和程序進行溝通。

本篇文章對shaderlab進行了一些基礎的介紹和使用場景和方法的推薦。下一次更新將結合ShaderLab官方的一個老舊電視機條紋波動的效果和大家一起分析如何利用shadergraph實現這個效果。希望感興趣的同學多多關注。


推薦閱讀:

TAG:Unity遊戲引擎 | shader | 遊戲 |