Shader "CRLuo/RGBAMask3" { Properties { //_MainTex ("黑色默认纹理", 2D) = "white" {} _RTex ("红色通道图像", 2D) = "white" {} _GTex ("绿色通道图像", 2D) = "white" {} _BTex ("蓝色通道图像", 2D) = "white" {} //_ATex ("透明通道图像", 2D) = "white" {} _MaskTex ("RGBA遮罩图像", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog #pragma multi_compile LIGHTMAP_ON LIGHTMAP_OFF #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float2 Muv : TEXCOORD0; #if LIGHTMAP_ON float3 uv1 : TEXCOORD1; #endif }; struct v2f { float2 Muv : TEXCOORD0; #if LIGHTMAP_ON //lightmap float2 uv0 : TEXCOORD1; #endif UNITY_FOG_COORDS(2) float4 vertex : SV_POSITION; }; //sampler2D _MainTex; //float4 _MainTex_ST; sampler2D _RTex; float4 _RTex_ST; sampler2D _GTex; float4 _GTex_ST; sampler2D _BTex; float4 _BTex_ST; //sampler2D _ATex; //float4 _ATex_ST; sampler2D _MaskTex; float4 _MaskTex_ST; v2f vert (appdata v) { v2f o; UNITY_SETUP_INSTANCE_ID(v); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); o.vertex = UnityObjectToClipPos(v.vertex); o.Muv = TRANSFORM_TEX(v.Muv, _MaskTex); UNITY_TRANSFER_FOG(o,o.vertex); #if LIGHTMAP_ON o.uv0 = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw; #endif return o; } fixed4 frag (v2f i) : SV_Target { //float2 MainUV = float2(i.Muv.x * _MainTex_ST.x,i.Muv.y * _MainTex_ST.y); float2 RUV = float2(i.Muv.x * _RTex_ST.x,i.Muv.y * _RTex_ST.y); fixed4 col = tex2D(_RTex, RUV); //col = col lerp(tex2D(_MainTex, MainUV),tex2D(_RTex, RUV),tex2D(_MaskTex, i.Muv).r); float2 GUV = float2(i.Muv.x * _GTex_ST.x,i.Muv.y * _GTex_ST.y); col = lerp(col,tex2D(_GTex, GUV),tex2D(_MaskTex, i.Muv).g); float2 BUV = float2(i.Muv.x * _BTex_ST.x,i.Muv.y * _BTex_ST.y); col = lerp(col,tex2D(_BTex, BUV),tex2D(_MaskTex, i.Muv).b); //float2 AUV = float2(i.Muv.x * _ATex_ST.x,i.Muv.y * _ATex_ST.y); //col = lerp(col,tex2D(_ATex, AUV),tex2D(_MaskTex, i.Muv).a); #if LIGHTMAP_ON fixed4 coll; // Fetch lightmap half4 bakedColorTex = UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uv0.xy); coll.rgb = DecodeLightmap(bakedColorTex); col.rgb = col.rgb * coll.rgb; #endif // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } } }