UI Particle Premultiply Blend.shader 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. Shader "UI Extensions/Particles/Alpha Blended Premultiply" {
  2. Properties {
  3. _MainTex ("Particle Texture", 2D) = "white" {}
  4. _InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
  5. _StencilComp ("Stencil Comparison", Float) = 8
  6. _Stencil ("Stencil ID", Float) = 0
  7. _StencilOp ("Stencil Operation", Float) = 0
  8. _StencilWriteMask ("Stencil Write Mask", Float) = 255
  9. _StencilReadMask ("Stencil Read Mask", Float) = 255
  10. _ColorMask ("Color Mask", Float) = 15
  11. [Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
  12. }
  13. Category {
  14. Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" "CanUseSpriteAtlas"="True" }
  15. Blend One OneMinusSrcAlpha
  16. ColorMask RGB
  17. Cull Off Lighting Off ZWrite Off
  18. ZTest [unity_GUIZTestMode]
  19. SubShader {
  20. Stencil
  21. {
  22. Ref [_Stencil]
  23. Comp [_StencilComp]
  24. Pass [_StencilOp]
  25. ReadMask [_StencilReadMask]
  26. WriteMask [_StencilWriteMask]
  27. }
  28. Pass {
  29. CGPROGRAM
  30. #pragma vertex vert
  31. #pragma fragment frag
  32. #pragma target 2.0
  33. #pragma multi_compile_particles
  34. #include "UnityCG.cginc"
  35. #include "UnityUI.cginc"
  36. #pragma multi_compile __ UNITY_UI_ALPHACLIP
  37. sampler2D _MainTex;
  38. fixed4 _TintColor;
  39. struct appdata_t {
  40. float4 vertex : POSITION;
  41. fixed4 color : COLOR;
  42. float2 texcoord : TEXCOORD0;
  43. };
  44. struct v2f {
  45. float4 vertex : SV_POSITION;
  46. fixed4 color : COLOR;
  47. float2 texcoord : TEXCOORD0;
  48. #ifdef SOFTPARTICLES_ON
  49. float4 projPos : TEXCOORD1;
  50. #endif
  51. };
  52. float4 _MainTex_ST;
  53. v2f vert (appdata_t IN)
  54. {
  55. v2f v;
  56. v.vertex = UnityObjectToClipPos(IN.vertex);
  57. #ifdef SOFTPARTICLES_ON
  58. v.projPos = ComputeScreenPos (v.vertex);
  59. COMPUTE_EYEDEPTH(v.projPos.z);
  60. #endif
  61. v.color = IN.color;
  62. v.texcoord = TRANSFORM_TEX(IN.texcoord,_MainTex);
  63. return v;
  64. }
  65. sampler2D_float _CameraDepthTexture;
  66. float _InvFade;
  67. fixed4 frag (v2f IN) : SV_Target
  68. {
  69. #ifdef SOFTPARTICLES_ON
  70. float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(IN.projPos)));
  71. float partZ = IN.projPos.z;
  72. float fade = saturate (_InvFade * (sceneZ-partZ));
  73. IN.color.a *= fade;
  74. #endif
  75. return IN.color * tex2D(_MainTex, IN.texcoord) * IN.color.a;
  76. }
  77. ENDCG
  78. }
  79. }
  80. }
  81. }