2
0

UI Particle MultiplyDouble.shader 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. Shader "UI Extensions/Particles/Multiply (Double)" {
  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 DstColor SrcColor
  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. #pragma multi_compile_fog
  35. #include "UnityCG.cginc"
  36. #include "UnityUI.cginc"
  37. #pragma multi_compile __ UNITY_UI_ALPHACLIP
  38. sampler2D _MainTex;
  39. fixed4 _TintColor;
  40. struct appdata_t {
  41. float4 vertex : POSITION;
  42. fixed4 color : COLOR;
  43. float2 texcoord : TEXCOORD0;
  44. };
  45. struct v2f {
  46. float4 vertex : SV_POSITION;
  47. fixed4 color : COLOR;
  48. float2 texcoord : TEXCOORD0;
  49. UNITY_FOG_COORDS(1)
  50. #ifdef SOFTPARTICLES_ON
  51. float4 projPos : TEXCOORD2;
  52. #endif
  53. };
  54. float4 _MainTex_ST;
  55. v2f vert (appdata_t IN)
  56. {
  57. v2f v;
  58. v.vertex = UnityObjectToClipPos(IN.vertex);
  59. #ifdef SOFTPARTICLES_ON
  60. v.projPos = ComputeScreenPos (v.vertex);
  61. COMPUTE_EYEDEPTH(v.projPos.z);
  62. #endif
  63. v.color = IN.color;
  64. v.texcoord = TRANSFORM_TEX(IN.texcoord,_MainTex);
  65. UNITY_TRANSFER_FOG(v,v.vertex);
  66. return v;
  67. }
  68. sampler2D_float _CameraDepthTexture;
  69. float _InvFade;
  70. fixed4 frag (v2f i) : SV_Target
  71. {
  72. #ifdef SOFTPARTICLES_ON
  73. float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)));
  74. float partZ = i.projPos.z;
  75. float fade = saturate (_InvFade * (sceneZ-partZ));
  76. i.color.a *= fade;
  77. #endif
  78. fixed4 col;
  79. fixed4 tex = tex2D(_MainTex, i.texcoord);
  80. col.rgb = tex.rgb * i.color.rgb * 2;
  81. col.a = i.color.a * tex.a;
  82. col = lerp(fixed4(0.5f,0.5f,0.5f,0.5f), col, col.a);
  83. UNITY_APPLY_FOG_COLOR(i.fogCoord, col, fixed4(0.5,0.5,0.5,0.5)); // fog towards gray due to our blend mode
  84. return col;
  85. }
  86. ENDCG
  87. }
  88. }
  89. }
  90. }