12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- Shader "YXJ/UI/Dissolve" {
- Properties {
- // _MainTex ("Texture", 2D) = "white" {}
- [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
- _Color ("Tint", Color) = (1,1,1,1)
- _MaskTex("Mask (A)", 2D) = "white" {}
- [NoScaleOffset] _EdgeTex("Edge (U,Ramp)", 2D) = "white" {}
- _Edge ("Edge", Range(0.01,1)) = 0.05
- [HideInInspector]_CutOff ("Alpha CutOff", Range(0.01,1.0)) = 0.5
- _Fade ("Fade", Range(0.01,0.99)) = 0.5
- _StencilComp ("Stencil Comparison", Float) = 8
- _Stencil ("Stencil ID", Float) = 0
- _StencilOp ("Stencil Operation", Float) = 0
- _StencilWriteMask ("Stencil Write Mask", Float) = 255
- _StencilReadMask ("Stencil Read Mask", Float) = 255
- _ColorMask ("Color Mask", Float) = 15
- }
- SubShader {
- Tags { "Queue" = "Geometry" "RenderType" = "TransparentCutout" }
- Stencil
- {
- Ref [_Stencil]
- Comp [_StencilComp]
- Pass [_StencilOp]
- ReadMask [_StencilReadMask]
- WriteMask [_StencilWriteMask]
- }
- Cull Back
- Lighting Off
- ZWrite Off
- ZTest [unity_GUIZTestMode]
- Blend SrcAlpha OneMinusSrcAlpha
- ColorMask [_ColorMask]
- LOD 100
- CGPROGRAM
- #pragma surface surf RimLight halfasview noforwardadd nolightmap alphatest:_CutOff
- #pragma target 3.0
- struct Input {
- float2 uv_MainTex;
- float2 uv_MaskTex;
- float3 viewDir;
- };
- struct SurfaceRimOutput
- {
- fixed3 Albedo;
- fixed3 Normal;
- fixed3 Emission;
- fixed Alpha;
- };
- sampler2D _MainTex;
- sampler2D _MaskTex;
- sampler2D _EdgeTex;
- half _Edge;
- half _Fade;
- half _LightAmount;
- fixed4 _WrapColor;
- fixed4 _RimColor;
- half _RimPower;
- fixed4 _Color;
- void surf (Input IN, inout SurfaceRimOutput o) {
- fixed4 diff = tex2D(_MainTex, IN.uv_MainTex).rgba;
- clip (diff.a - 0.001);
- fixed4 mask = tex2D(_MaskTex, IN.uv_MaskTex);
- half edgeWidth = max(0, mask.a - _Fade);
- edgeWidth /= (1 - _Fade) * (_Edge + _Fade);
- if (edgeWidth < 1 && _Fade > 0.01)
- diff.rgb += tex2D(_EdgeTex, float2(edgeWidth, 0)).rgb;
- fixed alpha = mask.a >= (_Fade + 0.01) ? 1 : 0;
- o.Albedo = diff.rgb;
- o.Emission = diff.rgb * _Color;
- o.Alpha = alpha;
- }
- inline half4 LightingRimLight(SurfaceRimOutput s, half3 lightDir, half3 halfDir, half atten) {
- half4 c;
- c.rgb = s.Albedo;
- c.a = s.Alpha;
- return c;
- }
- ENDCG
- }
- Fallback "Mobile/VertexLit"
- }
|