1. 程式人生 > >關於shaderLab中 tags(標籤)

關於shaderLab中 tags(標籤)

SubShader內部可以有標籤(Tags)的定義。Tag指定了這個SubShader的渲染順序(時機),以及其他的一些設定。

1.”Queue”標籤。定義渲染順序。預製的值為
(1)”Background”。值為1000。比如用於天空盒。
(2)”Geometry”。值為2000。大部分物體在這個佇列。不透明的物體也在這裡。這個佇列內部的物體的渲染順序會有進一步的優化(應該是從近到遠,early-z test可以剔除不需經過FS處理的片元)。其他佇列的物體都是按空間位置的從遠到近進行渲染。
(3)”AlphaTest”。值為2450。已進行AlphaTest的物體在這個佇列。
(4)”Transparent”。值為3000。透明物體。
(5)”Overlay”。值為4000。比如鏡頭光暈。
(6)使用者可以定義任意值,比如”Queue”=”Geometry+10”
2. “RenderType”標籤。Unity可以執行時替換符合特定RenderType的所有Shader。Camera.RenderWithShader或者Camera.SetReplacementShader配合使用。Unity內建的RenderType包括:
(1)”Opaque”:絕大部分不透明的物體都使用這個;
(2)”Transparent”:絕大部分透明的物體、包括粒子特效都使用這個;
(3)”Background”:天空盒都使用這個;
(4)”Overlay”:GUI、鏡頭光暈都使用這個;
(5)還有其他可參考Rendering with Replaced Shaders;使用者也可以定義任意自己的RenderType字串。
3.”ForceNoShadowCasting”,值為”true”時,表示不接受陰影。
4.”IgnoreProjector”,值為”true”時,表示不接受Projector元件的投影。
Pass的Tag

最重要Tag是 “LightMode”,指定Pass和Unity的哪一種渲染路徑(“Rendering Path”)搭配使用。除最重要的ForwardBase、ForwardAdd外,這裡需額外提醒的Tag取值可包括:
1.Always,永遠都渲染,但不處理光照。
2.ShadowCaster,用於渲染產生陰影的物體。
3.ShadowCollector,用於收集物體陰影到螢幕座標Buff裡。
另外關於Shader中的資料型別 有三種資料型別 float、half、fixed。
這3種基本數值型別可以再組成vector和matrix,比如half3是由3個half組成、float4x4是由16個float組成。
(1) float:32位高精度浮點數。
(2)half:16位中精度浮點數。範圍是[-6萬, +6萬],能精確到十進位制的小數點後3.3位。
(3)fixed:11位低精度浮點數。範圍是[-2, 2],精度是1/256。
資料型別的精度夠用就好。例如,顏色和單位向量,使用fixed;其他情況,儘量使用half(即範圍在[-6萬, +6萬]內、精確到小數點後3.3位);否則才使用float。
(4)saturate 是指 飽和處理,大於1就變成1,小於0就變成0