Dissolve.shader 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. Shader "YXJ/UI/Dissolve" {
  2. Properties {
  3. // _MainTex ("Texture", 2D) = "white" {}
  4. [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
  5. _Color ("Tint", Color) = (1,1,1,1)
  6. _MaskTex("Mask (A)", 2D) = "white" {}
  7. [NoScaleOffset] _EdgeTex("Edge (U,Ramp)", 2D) = "white" {}
  8. _Edge ("Edge", Range(0.01,1)) = 0.05
  9. [HideInInspector]_CutOff ("Alpha CutOff", Range(0.01,1.0)) = 0.5
  10. _Fade ("Fade", Range(0.01,0.99)) = 0.5
  11. _StencilComp ("Stencil Comparison", Float) = 8
  12. _Stencil ("Stencil ID", Float) = 0
  13. _StencilOp ("Stencil Operation", Float) = 0
  14. _StencilWriteMask ("Stencil Write Mask", Float) = 255
  15. _StencilReadMask ("Stencil Read Mask", Float) = 255
  16. _ColorMask ("Color Mask", Float) = 15
  17. }
  18. SubShader {
  19. Tags { "Queue" = "Geometry" "RenderType" = "TransparentCutout" }
  20. Stencil
  21. {
  22. Ref [_Stencil]
  23. Comp [_StencilComp]
  24. Pass [_StencilOp]
  25. ReadMask [_StencilReadMask]
  26. WriteMask [_StencilWriteMask]
  27. }
  28. Cull Back
  29. Lighting Off
  30. ZWrite Off
  31. ZTest [unity_GUIZTestMode]
  32. Blend SrcAlpha OneMinusSrcAlpha
  33. ColorMask [_ColorMask]
  34. LOD 100
  35. CGPROGRAM
  36. #pragma surface surf RimLight halfasview noforwardadd nolightmap alphatest:_CutOff
  37. #pragma target 3.0
  38. struct Input {
  39. float2 uv_MainTex;
  40. float2 uv_MaskTex;
  41. float3 viewDir;
  42. };
  43. struct SurfaceRimOutput
  44. {
  45. fixed3 Albedo;
  46. fixed3 Normal;
  47. fixed3 Emission;
  48. fixed Alpha;
  49. };
  50. sampler2D _MainTex;
  51. sampler2D _MaskTex;
  52. sampler2D _EdgeTex;
  53. half _Edge;
  54. half _Fade;
  55. half _LightAmount;
  56. fixed4 _WrapColor;
  57. fixed4 _RimColor;
  58. half _RimPower;
  59. fixed4 _Color;
  60. void surf (Input IN, inout SurfaceRimOutput o) {
  61. fixed4 diff = tex2D(_MainTex, IN.uv_MainTex).rgba;
  62. clip (diff.a - 0.001);
  63. fixed4 mask = tex2D(_MaskTex, IN.uv_MaskTex);
  64. half edgeWidth = max(0, mask.a - _Fade);
  65. edgeWidth /= (1 - _Fade) * (_Edge + _Fade);
  66. if (edgeWidth < 1 && _Fade > 0.01)
  67. diff.rgb += tex2D(_EdgeTex, float2(edgeWidth, 0)).rgb;
  68. fixed alpha = mask.a >= (_Fade + 0.01) ? 1 : 0;
  69. o.Albedo = diff.rgb;
  70. o.Emission = diff.rgb * _Color;
  71. o.Alpha = alpha;
  72. }
  73. inline half4 LightingRimLight(SurfaceRimOutput s, half3 lightDir, half3 halfDir, half atten) {
  74. half4 c;
  75. c.rgb = s.Albedo;
  76. c.a = s.Alpha;
  77. return c;
  78. }
  79. ENDCG
  80. }
  81. Fallback "Mobile/VertexLit"
  82. }