天天看點

關于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