语法如下:
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虽然不写入颜色,但是默认是开启深度写入的,因此重叠部分的像素还是会被舍弃掉的