HighlightingBlur.shader 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. Shader "Hidden/Highlighted/Blur"
  2. {
  3. Properties
  4. {
  5. [HideInInspector] _MainTex ("", 2D) = "" {}
  6. [HideInInspector] _HighlightingIntensity ("", Range (0.25,0.5)) = 0.3
  7. }
  8. SubShader
  9. {
  10. Pass
  11. {
  12. ZTest Always
  13. Cull Off
  14. ZWrite Off
  15. Lighting Off
  16. Fog { Mode Off }
  17. CGPROGRAM
  18. #pragma vertex vert
  19. #pragma fragment frag
  20. #pragma fragmentoption ARB_precision_hint_fastest
  21. #pragma target 2.0
  22. #pragma multi_compile DIAGONAL_DIRECTIONS STRAIGHT_DIRECTIONS ALL_DIRECTIONS
  23. #include "UnityCG.cginc"
  24. uniform sampler2D _MainTex;
  25. uniform float4 _MainTex_ST;
  26. uniform float4 _MainTex_TexelSize;
  27. uniform float _HighlightingBlurOffset;
  28. uniform half _HighlightingIntensity;
  29. struct vs_input
  30. {
  31. float4 vertex : POSITION;
  32. float2 texcoord : TEXCOORD0;
  33. };
  34. struct ps_input
  35. {
  36. float4 pos : SV_POSITION;
  37. #if defined(ALL_DIRECTIONS)
  38. float4 uv0 : TEXCOORD0;
  39. float4 uv1 : TEXCOORD1;
  40. float4 uv2 : TEXCOORD2;
  41. float4 uv3 : TEXCOORD3;
  42. #else
  43. float4 uv0 : TEXCOORD0;
  44. float4 uv1 : TEXCOORD1;
  45. #endif
  46. };
  47. ps_input vert(vs_input v)
  48. {
  49. ps_input o;
  50. o.pos = UnityObjectToClipPos(v.vertex);
  51. float2 uv = UnityStereoScreenSpaceUVAdjust(v.texcoord, _MainTex_ST);
  52. float2 offs = _HighlightingBlurOffset * _MainTex_TexelSize.xy;
  53. #if defined(ALL_DIRECTIONS)
  54. // Diagonal
  55. o.uv0.x = uv.x - offs.x;
  56. o.uv0.y = uv.y - offs.y;
  57. o.uv0.z = uv.x + offs.x;
  58. o.uv0.w = uv.y - offs.y;
  59. o.uv1.x = uv.x + offs.x;
  60. o.uv1.y = uv.y + offs.y;
  61. o.uv1.z = uv.x - offs.x;
  62. o.uv1.w = uv.y + offs.y;
  63. // Straight
  64. o.uv2.x = uv.x - offs.x;
  65. o.uv2.y = uv.y;
  66. o.uv2.z = uv.x + offs.x;
  67. o.uv2.w = uv.y;
  68. o.uv3.x = uv.x;
  69. o.uv3.y = uv.y - offs.y;
  70. o.uv3.z = uv.x;
  71. o.uv3.w = uv.y + offs.y;
  72. #elif defined(STRAIGHT_DIRECTIONS)
  73. // Straight
  74. o.uv0.x = uv.x - offs.x;
  75. o.uv0.y = uv.y;
  76. o.uv0.z = uv.x + offs.x;
  77. o.uv0.w = uv.y;
  78. o.uv1.x = uv.x;
  79. o.uv1.y = uv.y - offs.y;
  80. o.uv1.z = uv.x;
  81. o.uv1.w = uv.y + offs.y;
  82. #else
  83. // Diagonal
  84. o.uv0.x = uv.x - offs.x;
  85. o.uv0.y = uv.y - offs.y;
  86. o.uv0.z = uv.x + offs.x;
  87. o.uv0.w = uv.y - offs.y;
  88. o.uv1.x = uv.x + offs.x;
  89. o.uv1.y = uv.y + offs.y;
  90. o.uv1.z = uv.x - offs.x;
  91. o.uv1.w = uv.y + offs.y;
  92. #endif
  93. return o;
  94. }
  95. half4 frag(ps_input i) : SV_Target
  96. {
  97. half4 color1 = tex2D(_MainTex, i.uv0.xy);
  98. fixed4 color2;
  99. // For straight or diagonal directions
  100. color2 = tex2D(_MainTex, i.uv0.zw);
  101. color1.rgb = max(color1.rgb, color2.rgb);
  102. color1.a += color2.a;
  103. color2 = tex2D(_MainTex, i.uv1.xy);
  104. color1.rgb = max(color1.rgb, color2.rgb);
  105. color1.a += color2.a;
  106. color2 = tex2D(_MainTex, i.uv1.zw);
  107. color1.rgb = max(color1.rgb, color2.rgb);
  108. color1.a += color2.a;
  109. // For all directions
  110. #if defined(ALL_DIRECTIONS)
  111. color2 = tex2D(_MainTex, i.uv2.xy);
  112. color1.rgb = max(color1.rgb, color2.rgb);
  113. color1.a += color2.a;
  114. color2 = tex2D(_MainTex, i.uv2.zw);
  115. color1.rgb = max(color1.rgb, color2.rgb);
  116. color1.a += color2.a;
  117. color2 = tex2D(_MainTex, i.uv3.xy);
  118. color1.rgb = max(color1.rgb, color2.rgb);
  119. color1.a += color2.a;
  120. color2 = tex2D(_MainTex, i.uv3.zw);
  121. color1.rgb = max(color1.rgb, color2.rgb);
  122. color1.a += color2.a;
  123. #endif
  124. color1.a *= _HighlightingIntensity;
  125. return color1;
  126. }
  127. ENDCG
  128. }
  129. }
  130. Fallback off
  131. }