Subshader {
[Tags]
[CommonState]
Passdef [Passdef ...]
}html
每一個SubShader都定義了一系列passes,並可對全部passes可選的設置任一狀態。另外,還能夠指定[Tags]。
當Unity選定了一個SubShader,它會對定義的每個pass都渲染一遍。有時在某些硬件某些複雜的渲染效果必須在多個pass中完成。函數
每一個pass均可以被定義成 regular Pass, Use Pass or Grab Pass.測試
一個pass塊引發一次物體的幾何學渲染。spa
Pass { [Name and Tags] [RenderSetup] }3d
UsePass命令可使用另外一個shader中的pass塊,從而減小重複勞動。htm
格式:對象
UsePass "Shader/Name"索引
若要UsePass能工做,所引用的pass塊必須定義了名字。隊列
GrabPass是一種特殊的pass類型,它能夠捕獲物體所在位置的屏幕內容並寫入到一個紋理中。從而用於後續通道完成高級圖像效果。ip
語法:
另外, GrabPass 能使用 Name 和 Tags 命令。
SubShader使用Tags告訴渲染引擎指望什麼時候和如何渲染對象。
語法
字符串的鍵值對:
Tags {
"TagName1" = "Value1"
"TagName2" = "Value2"
}
細節
在一個SubShader中標籤被用於決定渲染次序和其餘SubShader的參數。
注意接下來的標籤只能置於SubShader塊而不是Pass塊中。
除了可被Unity承認的內置標籤,你還可使用本身的標籤並經過Material.GetTag函數查詢。
Rendering Order - Queue tag
使用 Queue 標籤決定對象被渲染的次序。好比確保透明(Transparent)物體在不透明(opaque)物體以後繪製。
有四種預約義隊列,但能夠在其之間定義更多隊列:
- Background: 在全部隊列以前被渲染,被用於渲染天空盒之類。
- Geometry (default): 默認的,被用於大多數對象。不透明的幾何體使用這個隊列。
- AlphaTest: alpha測試,這是分離自Geometry的隊列,由於對於alpha-tested物體,在全部固體渲染後再渲染更有效率。
- Transparent: 透明,在Geometry隊列以後被渲染,採用由後到前的次序。
- Overlay: 覆蓋,用於實現疊加效果。任何須要最後渲染的對象應該放置在此處。(如鏡頭光暈)
每個隊列都表明一個整數索引值。Background-1000,Geometry-2000,AlphaTest-2450,Transparent-3000,Overlay-4000。能夠自定義一個隊列:
Tags { "Queue" = "Geometry+1" }
該隊列的索引值爲2001,這會使物體在全部不透明的對象以後但卻在全部透明物體前被渲染。
RenderType
將shader分類成預約義的組。
DisableBatching
一些shader在Draw Call Batching 模式下不能工做,這個指令來決定是否禁用它。
「True」:禁用。「False」:不由用(默認)。「LODFading」:當LOD Fading開啓時禁用,通常用於樹木。
ForceNoShadowCasting
「True」:不使用cast shadows。
IgnoreProjector
「True」:物體不會受 Projectors影響。
CanUseSpriteAtlas
「False」:若是這個shader是指sprites,將沒法打包成圖集。 (Sprite Packer)
PreviewType
指示material inspector預覽怎樣顯示材質。默認顯示是spheres,也可設置爲「Plane」(2D顯示),或者"Skybox"(天空球顯示)。
pass中也可使用Tags