CRLuo_RGBAMask3.shader 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. Shader "CRLuo/RGBAMask3"
  2. {
  3. Properties
  4. {
  5. //_MainTex ("黑色默认纹理", 2D) = "white" {}
  6. _RTex ("红色通道图像", 2D) = "white" {}
  7. _GTex ("绿色通道图像", 2D) = "white" {}
  8. _BTex ("蓝色通道图像", 2D) = "white" {}
  9. //_ATex ("透明通道图像", 2D) = "white" {}
  10. _MaskTex ("RGBA遮罩图像", 2D) = "white" {}
  11. }
  12. SubShader
  13. {
  14. Tags { "RenderType"="Opaque" }
  15. LOD 100
  16. Pass
  17. {
  18. CGPROGRAM
  19. #pragma vertex vert
  20. #pragma fragment frag
  21. // make fog work
  22. #pragma multi_compile_fog
  23. #pragma multi_compile LIGHTMAP_ON LIGHTMAP_OFF
  24. #include "UnityCG.cginc"
  25. struct appdata
  26. {
  27. float4 vertex : POSITION;
  28. float2 Muv : TEXCOORD0;
  29. #if LIGHTMAP_ON
  30. float3 uv1 : TEXCOORD1;
  31. #endif
  32. };
  33. struct v2f
  34. {
  35. float2 Muv : TEXCOORD0;
  36. #if LIGHTMAP_ON
  37. //lightmap
  38. float2 uv0 : TEXCOORD1;
  39. #endif
  40. UNITY_FOG_COORDS(2)
  41. float4 vertex : SV_POSITION;
  42. };
  43. //sampler2D _MainTex;
  44. //float4 _MainTex_ST;
  45. sampler2D _RTex;
  46. float4 _RTex_ST;
  47. sampler2D _GTex;
  48. float4 _GTex_ST;
  49. sampler2D _BTex;
  50. float4 _BTex_ST;
  51. //sampler2D _ATex;
  52. //float4 _ATex_ST;
  53. sampler2D _MaskTex;
  54. float4 _MaskTex_ST;
  55. v2f vert (appdata v)
  56. {
  57. v2f o;
  58. UNITY_SETUP_INSTANCE_ID(v);
  59. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
  60. o.vertex = UnityObjectToClipPos(v.vertex);
  61. o.Muv = TRANSFORM_TEX(v.Muv, _MaskTex);
  62. UNITY_TRANSFER_FOG(o,o.vertex);
  63. #if LIGHTMAP_ON
  64. o.uv0 = v.uv1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
  65. #endif
  66. return o;
  67. }
  68. fixed4 frag (v2f i) : SV_Target
  69. {
  70. //float2 MainUV = float2(i.Muv.x * _MainTex_ST.x,i.Muv.y * _MainTex_ST.y);
  71. float2 RUV = float2(i.Muv.x * _RTex_ST.x,i.Muv.y * _RTex_ST.y);
  72. fixed4 col = tex2D(_RTex, RUV);
  73. //col = col lerp(tex2D(_MainTex, MainUV),tex2D(_RTex, RUV),tex2D(_MaskTex, i.Muv).r);
  74. float2 GUV = float2(i.Muv.x * _GTex_ST.x,i.Muv.y * _GTex_ST.y);
  75. col = lerp(col,tex2D(_GTex, GUV),tex2D(_MaskTex, i.Muv).g);
  76. float2 BUV = float2(i.Muv.x * _BTex_ST.x,i.Muv.y * _BTex_ST.y);
  77. col = lerp(col,tex2D(_BTex, BUV),tex2D(_MaskTex, i.Muv).b);
  78. //float2 AUV = float2(i.Muv.x * _ATex_ST.x,i.Muv.y * _ATex_ST.y);
  79. //col = lerp(col,tex2D(_ATex, AUV),tex2D(_MaskTex, i.Muv).a);
  80. #if LIGHTMAP_ON
  81. fixed4 coll;
  82. // Fetch lightmap
  83. half4 bakedColorTex = UNITY_SAMPLE_TEX2D(unity_Lightmap, i.uv0.xy);
  84. coll.rgb = DecodeLightmap(bakedColorTex);
  85. col.rgb = col.rgb * coll.rgb;
  86. #endif
  87. // apply fog
  88. UNITY_APPLY_FOG(i.fogCoord, col);
  89. return col;
  90. }
  91. ENDCG
  92. }
  93. }
  94. }