EnviroWeatherMap.shader 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. Shader "Enviro3/Standard/WeatherTexture"
  2. {
  3. Properties
  4. {
  5. _Coverage ("Coverage", Range(0,1)) = 0.5
  6. _Tiling ("Tiling", Range(1,100)) = 10
  7. }
  8. SubShader
  9. {
  10. Tags { "RenderType"="Opaque" }
  11. LOD 200
  12. Pass {
  13. CGPROGRAM
  14. #pragma vertex vert
  15. #pragma fragment frag
  16. #include "UnityCG.cginc"
  17. #include "../Includes/NoiseInclude.cginc"
  18. #pragma target 3.0
  19. #pragma exclude_renderers gles
  20. #pragma multi_compile_local __ ENVIRO_DUAL_LAYER
  21. sampler2D _MainTex;
  22. struct VertexInput
  23. {
  24. half4 vertex : POSITION;
  25. float2 uv : TEXCOORD0;
  26. };
  27. struct VertexOutput
  28. {
  29. float4 position : SV_POSITION;
  30. float2 uv : TEXCOORD0;
  31. };
  32. VertexOutput vert (appdata_img v)
  33. {
  34. VertexOutput o;
  35. o.position = UnityObjectToClipPos(v.vertex);
  36. o.uv = v.texcoord;
  37. return o;
  38. }
  39. float4x4 world_view_proj;
  40. float _CoverageLayer1;
  41. float _CoverageLayer2;
  42. float _CloudsTypeLayer1;
  43. float _CloudsTypeLayer2;
  44. float _WorleyFreq1Layer1;
  45. float _WorleyFreq1Layer2;
  46. float _WorleyFreq2Layer1;
  47. float _WorleyFreq2Layer2;
  48. float _DilateCoverageLayer1;
  49. float _DilateCoverageLayer2;
  50. float _DilateTypeLayer1;
  51. float _DilateTypeLayer2;
  52. float _CloudsTypeModifierLayer1;
  53. float _CloudsTypeModifierLayer2;
  54. float4 _LocationOffset;
  55. float3 _WindDirection;
  56. float _WindSpeed;
  57. float4 frag(VertexInput input) : SV_Target
  58. {
  59. float2 uv = input.uv;
  60. float2 windOffsetLayer1 = _WindDirection.xy;
  61. //float2 windOffsetLayer1 = 0.0f;
  62. float2 fillerUV = uv.xy + windOffsetLayer1 + _LocationOffset.xy;
  63. float covFiller = worleyFbm2DFiller(fillerUV * 2, 2) * 1.2;
  64. ///////Layer 1
  65. //float2 offset_pos_Layer1_1 = windOffsetLayer1 + float2(0.1,0.5) + _LocationOffset.xy;
  66. //float2 offset_pos_Layer1_2 = windOffsetLayer1 + float2(0.4,-0.5) + _LocationOffset.xy;
  67. //float2 offset_pos_Layer1_3 = windOffsetLayer1 + float2(-0.2,0.9) + _LocationOffset.xy;
  68. //float2 sampling_pos_Layer1_1 = float2(uv.xy + offset_pos_Layer1_1) * _TilingLayer1;
  69. //float2 sampling_pos_Layer1_2 = float2(uv.xy + offset_pos_Layer1_2) * _TilingLayer1;
  70. //float2 sampling_pos_Layer1_3 = float2(uv.xy + offset_pos_Layer1_3) * _TilingLayer1;
  71. //Perlin Noises
  72. //float perlin_Layer1_1 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_1.xy,float2(_TilingLayer1, _TilingLayer1)));
  73. //float perlin_Layer1_2 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_2.xy,float2(_TilingLayer1, _TilingLayer1)));
  74. //float perlin_Layer1_3 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_3.xy,float2(_TilingLayer1, _TilingLayer1)));
  75. //Worley Noise
  76. float worley1Layer1 = worley2(windOffsetLayer1 + _LocationOffset.xy + uv.xy * _WorleyFreq1Layer1, 1);
  77. float worley2Layer1 = worley2(windOffsetLayer1 + _LocationOffset.xy + uv.xy * _WorleyFreq2Layer1, 1);
  78. //float perlin_Layer1_Combined = saturate(perlin_Layer1_1 + (perlin_Layer1_2 - perlin_Layer1_3) + worleyLayer1);
  79. float dilateCoverageLayer1 = dilate_perlin_worley(worley1Layer1,worley2Layer1,_DilateCoverageLayer1);
  80. //Coverage Layer
  81. float coverageLayer1 = saturate(dilateCoverageLayer1 + (covFiller * _CoverageLayer1));
  82. float dilateTypeLayer1 = dilate_perlin_worley(worley1Layer1,worley2Layer1,_DilateTypeLayer1);
  83. float typeLayer1 = saturate(dilateTypeLayer1 * _CloudsTypeModifierLayer1);
  84. ///Layer 1 End
  85. #ifdef ENVIRO_DUAL_LAYER
  86. ///////Layer 2
  87. //float2 offset_pos_Layer2_1 = float2(0.78,-0.5) + _LocationOffset.zw;
  88. //float2 offset_pos_Layer2_2 = float2(0.2,0.9) + _LocationOffset.zw;
  89. //float2 offset_pos_Layer2_3 = float2(-0.5,0.14) + _LocationOffset.zw;
  90. //float2 sampling_pos_Layer2_1 = float2(uv.xy + offset_pos_Layer2_1) * _TilingLayer2;
  91. //float2 sampling_pos_Layer2_2 = float2(uv.xy + offset_pos_Layer2_2) * _TilingLayer2;
  92. //float2 sampling_pos_Layer2_3 = float2(uv.xy + offset_pos_Layer2_3) * _TilingLayer2;
  93. //Perlin Noises
  94. //float perlin_Layer2_1 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_1.xy,float2(_TilingLayer2, _TilingLayer2)));
  95. //float perlin_Layer2_2 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_2.xy,float2(_TilingLayer2, _TilingLayer2)));
  96. //float perlin_Layer2_3 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_3.xy,float2(_TilingLayer2, _TilingLayer2)));
  97. //Worley Noise
  98. float worley1Layer2 = worley2(windOffsetLayer1 + _LocationOffset.zw + uv.xy * _WorleyFreq1Layer2, 1);
  99. float worley2Layer2 = worley2(windOffsetLayer1 + _LocationOffset.zw + uv.xy * _WorleyFreq2Layer2, 1);
  100. //float perlin_Layer2_Combined = saturate(perlin_Layer2_1 + (perlin_Layer2_2 - perlin_Layer2_3) + worleyLayer2);
  101. float dilateCoverageLayer2 = dilate_perlin_worley(worley1Layer2,worley2Layer2,_DilateCoverageLayer2);
  102. //Coverage Layer
  103. //float covFiller = worleyFbm2DFiller(uv.xy * 4, 4) * 1.2;
  104. float coverageLayer2 = saturate(dilateCoverageLayer2 + (covFiller * _CoverageLayer2));
  105. float dilateTypeLayer2 = dilate_perlin_worley(worley1Layer2,worley2Layer2,_DilateTypeLayer2);
  106. float typeLayer2 = saturate(dilateTypeLayer2 * _CloudsTypeModifierLayer2);
  107. ///Layer 2 End
  108. return float4(coverageLayer1,typeLayer1,coverageLayer2,typeLayer2);
  109. #else
  110. return float4(coverageLayer1,typeLayer1,0.0f,0.0f);
  111. #endif
  112. }
  113. ENDCG
  114. }
  115. }
  116. FallBack "Diffuse"
  117. }