UMP-TransparentCanvas.shader 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
  2. Shader "UMP/TransparentCanvas"
  3. {
  4. Properties
  5. {
  6. _MainTex("Video Texture", 2D) = "white" {}
  7. _Color("Tint", Color) = (1, 1, 1, 1)
  8. _TransparentColor("Transparent Color", Color) = (1, 1, 1, 1)
  9. _TransparentPower("Transparent Power", Float) = 1
  10. _BorderColor("Border Color", Color) = (0, 0, 0, 0)
  11. _AlphaPower("Alpha Power", Float) = 1
  12. }
  13. SubShader
  14. {
  15. Tags
  16. {
  17. "Queue"="Transparent"
  18. "RenderType"="Transparent"
  19. }
  20. Cull Off
  21. Lighting Off
  22. ZWrite Off
  23. Blend SrcAlpha OneMinusSrcAlpha
  24. Pass
  25. {
  26. CGPROGRAM
  27. #pragma vertex vert
  28. #pragma fragment frag
  29. #include "UnityCG.cginc"
  30. struct appdata_t
  31. {
  32. float4 vertex : POSITION;
  33. float2 texcoord : TEXCOORD0;
  34. };
  35. struct v2f
  36. {
  37. float4 vertex : SV_POSITION;
  38. half2 texcoord : TEXCOORD0;
  39. };
  40. sampler2D _MainTex;
  41. float4 _MainTex_ST;
  42. fixed4 _Color;
  43. fixed4 _TransparentColor;
  44. float _TransparentPower;
  45. fixed4 _BorderColor;
  46. float _AlphaPower;
  47. float _BorderUWidth;
  48. float _BorderVWidth;
  49. v2f vert(appdata_t v)
  50. {
  51. v2f o;
  52. o.vertex = UnityObjectToClipPos(v.vertex);
  53. o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
  54. return o;
  55. }
  56. fixed4 frag(v2f i) : SV_Target
  57. {
  58. fixed4 c = _BorderColor;
  59. if (abs(i.texcoord.x) > _BorderUWidth && abs(i.texcoord.x) < 1 - _BorderUWidth &&
  60. abs(i.texcoord.y) > _BorderVWidth && abs(i.texcoord.y) < 1 - _BorderVWidth)
  61. {
  62. float2 tex = float2((i.texcoord.x - _BorderUWidth * _MainTex_ST.x) * (1 / (1 - (_BorderUWidth * 2))), (i.texcoord.y - _BorderVWidth * _MainTex_ST.y) * (1 / (1 - (_BorderVWidth * 2))));
  63. c = tex2D(_MainTex, tex) * _Color;
  64. float delta = c.rgb - _TransparentColor.rgb;
  65. if (abs(delta) <= _TransparentPower)
  66. {
  67. c.a = 0;
  68. return c;
  69. }
  70. c.a = c.a * _AlphaPower;
  71. }
  72. return c;
  73. }
  74. ENDCG
  75. }
  76. }
  77. }