語法如下:
ColorMask RGB | A | 0 | 其他R,G,B,A的組合
ColorMask R,意思是輸出顏色中只有R通道會被寫入
ColorMask 0,意思是不會輸出任何顏色
默認值為RGBA,即四個通道都寫入
測試:
1.ColorMask R
1 Shader "Custom/ColorMask" 2 { 3 Properties 4 { 5 } 6 SubShader 7 { 8 Tags { "RenderType"="Opaque" } 9 10 Pass 11 { 12 ColorMask R 13 14 CGPROGRAM 15 #pragma vertex vert 16 #pragma fragment frag 17 18 #include "UnityCG.cginc" 19 20 struct appdata 21 { 22 float4 vertex : POSITION; 23 }; 24 25 struct v2f 26 { 27 float4 vertex : SV_POSITION; 28 }; 29 30 v2f vert (appdata v) 31 { 32 v2f o; 33 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex); 34 return o; 35 } 36 37 fixed4 frag (v2f i) : SV_Target 38 { 39 return fixed4(1, 1, 1, 1); 40 } 41 ENDCG 42 } 43 } 44 }
效果如下,可以看出輸出顏色並不是紅色。因此推出,“只有R通道會被寫入”並不是說寫入的顏色就是(R,0,0),那么G,B這兩個通道的值是怎么取的呢?經試驗取的是攝像機的Background值。
2.ColorMask 0
如下兩圖,第一個是ColorMask RBGA,第二個是ColorMask 0。ColorMask 0雖然不寫入顏色,但是默認是開啟深度寫入的,因此重疊部分的像素還是會被舍棄掉的