RainBackground.shader 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // Sky Studio
  2. //
  3. // Author: jason@funly.io
  4. // Description: Shows rainfall textures on the weather encsolure.
  5. Shader "Funly/Sky Studio/Weather/Rain Background"
  6. {
  7. Properties
  8. {
  9. // Near rain texture.
  10. _NearTex ("Near Rain Texture", 2D) = "black" {}
  11. _NearRainSpeed ("Near Rain Speed", Range(0, 3)) = .5
  12. _NearDensity ("Near Rain Density", Range(0, 1)) = .7
  13. // Far rain texture.
  14. _FarTex ("Far Rain Texture", 2D) = "black" {}
  15. _FarRainSpeed("Far Rain Speed", Range(0, 3)) = .75
  16. _FarDensity("Far Rain Density", Range(0, 1)) = .5
  17. _TintColor("Tint Color", Color) = (1, 1, 1, 1)
  18. _Turbulence("Turbulence", Range(0, 1)) = 0
  19. _TurbulenceSpeed("Turbulence Speed", Range(0, 5)) = .5
  20. }
  21. SubShader
  22. {
  23. Tags { "RenderType" = "Transparent" "Queue" = "Transparent+10" }
  24. LOD 100
  25. Blend OneMinusDstColor One
  26. Cull Back
  27. ZWrite Off
  28. Pass
  29. {
  30. CGPROGRAM
  31. #pragma target 2.0
  32. #pragma vertex vert
  33. #pragma fragment frag
  34. #include "UnityCG.cginc"
  35. struct appdata
  36. {
  37. float4 vertex : POSITION;
  38. float2 uv : TEXCOORD0;
  39. fixed4 color : COLOR;
  40. };
  41. struct v2f
  42. {
  43. float4 vertex : SV_POSITION;
  44. float2 nearUV : TEXCOORD0;
  45. float2 farUV : TEXCOORD1;
  46. float strength : COLOR;
  47. };
  48. sampler2D _NearTex;
  49. float4 _NearTex_ST;
  50. float _NearRainSpeed;
  51. float _NearDensity;
  52. sampler2D _FarTex;
  53. float4 _FarTex_ST;
  54. float _FarRainSpeed;
  55. float _FarDensity;
  56. float4 _TintColor;
  57. float _Turbulence;
  58. float _TurbulenceSpeed;
  59. v2f vert (appdata v)
  60. {
  61. v2f o;
  62. o.strength = v.color.r;
  63. o.vertex = UnityObjectToClipPos(v.vertex);
  64. float2 scaledNearUV = TRANSFORM_TEX(v.uv, _NearTex);
  65. o.nearUV = float2(scaledNearUV.x, scaledNearUV.y + (_Time.y * _NearRainSpeed));
  66. o.nearUV.x += .2 + (sin((_Time.y) * _TurbulenceSpeed) * _Turbulence);
  67. float2 scaledFarUV = TRANSFORM_TEX(v.uv, _FarTex);
  68. o.farUV = float2(scaledFarUV.x, scaledFarUV.y + (_Time.y * _FarRainSpeed));
  69. return o;
  70. }
  71. fixed4 frag (v2f i) : SV_Target
  72. {
  73. fixed4 nearColor = tex2D(_NearTex, i.nearUV) * _NearDensity;
  74. fixed4 farColor = tex2D(_FarTex, i.farUV) * _FarDensity;
  75. return saturate(nearColor + farColor) * i.strength * _TintColor;
  76. }
  77. ENDCG
  78. }
  79. }
  80. }