FogOfWarBlur.shader 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. Shader "Hidden/VolumetricFog2/FoWBlur" {
  2. Properties {
  3. _MainTex ("", 2D) = "white" {}
  4. _Color ("", Color) = (1,1,1,1)
  5. }
  6. SubShader {
  7. CGINCLUDE
  8. #include "UnityCG.cginc"
  9. struct appdata {
  10. float4 vertex : POSITION;
  11. float2 texcoord : TEXCOORD0;
  12. };
  13. struct v2fCross {
  14. float4 pos : SV_POSITION;
  15. float2 uv: TEXCOORD0;
  16. float2 uv1: TEXCOORD1;
  17. float2 uv2: TEXCOORD2;
  18. float2 uv3: TEXCOORD3;
  19. float2 uv4: TEXCOORD4;
  20. };
  21. sampler _MainTex;
  22. float4 _MainTex_ST;
  23. float4 _MainTex_TexelSize;
  24. v2fCross vertBlurH(appdata v) {
  25. v2fCross o;
  26. o.pos = UnityObjectToClipPos(v.vertex);
  27. o.uv = v.texcoord;
  28. float2 inc = float2(_MainTex_TexelSize.x * 1.3846153846, 0);
  29. o.uv1 = UnityStereoScreenSpaceUVAdjust(v.texcoord - inc, _MainTex_ST);
  30. o.uv2 = UnityStereoScreenSpaceUVAdjust(v.texcoord + inc, _MainTex_ST);
  31. float2 inc2 = float2(_MainTex_TexelSize.x * 3.2307692308, 0);
  32. o.uv3 = UnityStereoScreenSpaceUVAdjust(v.texcoord - inc2, _MainTex_ST);
  33. o.uv4 = UnityStereoScreenSpaceUVAdjust(v.texcoord + inc2, _MainTex_ST);
  34. return o;
  35. }
  36. v2fCross vertBlurV(appdata v) {
  37. v2fCross o;
  38. o.pos = UnityObjectToClipPos(v.vertex);
  39. o.uv = v.texcoord;
  40. float2 inc = float2(0, _MainTex_TexelSize.y * 1.3846153846);
  41. o.uv1 = UnityStereoScreenSpaceUVAdjust(v.texcoord - inc, _MainTex_ST);
  42. o.uv2 = UnityStereoScreenSpaceUVAdjust(v.texcoord + inc, _MainTex_ST);
  43. float2 inc2 = float2(0, _MainTex_TexelSize.y * 3.2307692308);
  44. o.uv3 = UnityStereoScreenSpaceUVAdjust(v.texcoord - inc2, _MainTex_ST);
  45. o.uv4 = UnityStereoScreenSpaceUVAdjust(v.texcoord + inc2, _MainTex_ST);
  46. return o;
  47. }
  48. #define PIX(uv) tex2D(_MainTex,uv)
  49. float4 fragBlur (v2fCross i): SV_Target {
  50. float4 pixel = PIX(i.uv) * 0.2270270270 + (PIX(i.uv1) + PIX(i.uv2)) * 0.3162162162 + (PIX(i.uv3) + PIX(i.uv4)) * 0.0702702703;
  51. return pixel;
  52. }
  53. ENDCG
  54. Pass { // Blur horizontally
  55. ZTest Always Cull Off ZWrite Off
  56. Fog { Mode Off }
  57. CGPROGRAM
  58. #pragma vertex vertBlurH
  59. #pragma fragment fragBlur
  60. #pragma fragmentoption ARB_precision_hint_fastest
  61. #pragma target 3.0
  62. ENDCG
  63. }
  64. Pass { // Blur vertically
  65. ZTest Always Cull Off ZWrite Off
  66. Fog { Mode Off }
  67. CGPROGRAM
  68. #pragma vertex vertBlurV
  69. #pragma fragment fragBlur
  70. #pragma fragmentoption ARB_precision_hint_fastest
  71. #pragma target 3.0
  72. ENDCG
  73. }
  74. }
  75. Fallback Off
  76. }