Unity ShaderLab 框架全解析2 ——SubShader、Fallback

Unity ShaderLab 框架全解析2

該系列主要是根據Unity官方文檔和個人蒐集的知識對Unity ShaderLab框架進行總結,比較基礎,用於提高知識學習、複習的效率。對於文中給到的文章鏈接的作者表示感謝

SubShader

ShaderLab是由一個或者多個SubShader組成的,當Unity渲染網格模型時,會在Shader文件即ShaderLab框架當中尋找能在當前顯卡上運行的最高級的效果最好的SubShader來使用,SubShader由一系列的Pass組成。Pass當中包含着真正的Shader的具體代碼。ShaderLab或者說Shader文件的框架大概如下:

Shader"Shader文件路徑名"{
	Properties{
		……	
	}
	SubShader{
		Pass{
			……
		}
		Pass{
			……
		}
		……
	}
	SubShader{
		Pass{
			……
		}
		Pass{
			……
		}
		……
	}
	……


}

SubShader Tag
加粗樣式SubShader使用Tag來控制自身何時怎樣被引擎使用來渲染。Tag使用的基本方法如下:

	SubShader{
		Tags { "TagName1" = "Value1" "TagName2" = "Value2" }
		Pass{
			……
		}
		Pass{
			……
		}
		……
	}

在大括號內可以指定任意數量的鍵值對,Unity有一些預設的鍵值對:

Rendering Order:

渲染順序鍵,分別對應着幾種預設的值,每個順序值在內部實現上都是整數
1.Background - 對象最先渲染,值爲1000
2.Geometry (default) - 是渲染順序的缺省值,渲染絕大多數不透明的網格,值爲2000
3.AlphaTest -經過alpha測試的geometry 使用此隊列。這是與“Geometry ”不同的隊列,因爲在繪製所有實體後,渲染經過Alpha測試的對 象更爲有效。值爲2450
4.Transparent - 在“Geometry ”和“AlphaTest ”之後渲染,當中的網格按照從後往前的順序渲染,所有使用alpha-blended 的(shader當中不進行深度寫入的)在這個渲染隊列當中(比如玻璃,粒子),值爲3000
5.Overlay - 最後渲染的對象,比如光暈,UI,值爲4000

因爲隊列值爲整數,所以可以自定義非預設的值,比如"Queue" = “Geometry+1”,表示在所有的Geometry對象之後渲染。

RenderType
用來給Shader進行分類,比如Unity內置的一些常用RenderType,如Opaque,Transparent,Background,Overlay,另外還可以自定義RenderType,可以用來進行材質替代渲染,具體實現參考之前一篇文章:Unity材質替代渲染相關:RenderWithShader & SetReplacementShader

ForceNoShadowCasting
如果對應值爲真,則使用該Subshader則不會進行陰影投射,不執行Shadow Pass

IgnoreProjector
如果對應值爲真,則忽略Projector的影響,Projector具體參照官方文檔:Projector,比較容易理解。
CanUseSpriteAtlas
如果值爲假,則shader使用sprite,那麼當sprite裝入圖集之後shader將不起作用。
PreviewType
控制材質球在預覽面板的顯示方式,默認展示球形,可以設置爲“Plane”、“Skybox”

Fallback

在所有的Subshader定義之後,可以定義Fallback,表示如果沒有Subshader可以運行在當前的硬件環境上,那麼就使用一個已定義的shader:

Fallback "name"

使用下面的語句表示即使所有的Subshader都不能運行,也不使用其他的shader並且不允許報錯。

Fallback Off
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章