EnviroWeatherMapCS.compute 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #pragma kernel CSMain
  2. #include "../Includes/NoiseInclude.cginc"
  3. RWTexture2D<float4> Result;
  4. float _CoverageLayer1;
  5. float _CoverageLayer2;
  6. float _CloudsTypeLayer1;
  7. float _CloudsTypeLayer2;
  8. int _TilingLayer1;
  9. int _TilingLayer2;
  10. float _WorleyFreqLayer1;
  11. float _WorleyFreqLayer2;
  12. float _DilateCoverageLayer1;
  13. float _DilateCoverageLayer2;
  14. float _DilateTypeLayer1;
  15. float _DilateTypeLayer2;
  16. float _CloudsTypeModifierLayer1;
  17. float _CloudsTypeModifierLayer2;
  18. float4 _LocationOffset;
  19. float3 _WindDirection;
  20. float _WindSpeed;
  21. float3 IDToUv(uint3 id) {
  22. return saturate(float3((id.x + 0.5f) / 512, (id.y + 0.5f) / 512, (id.z) / 1));
  23. }
  24. [numthreads(16,16,1)]
  25. void CSMain (uint3 id : SV_DispatchThreadID)
  26. {
  27. float3 uv = IDToUv(id);
  28. float2 windOffsetLayer1 = _WindDirection.xy * 10 * _WindSpeed;
  29. float2 fillerUV = uv.xy + windOffsetLayer1 + _LocationOffset.xy;
  30. float covFiller = worleyFbm2DFiller(fillerUV * 2, 2) * 1.2;
  31. ///////Layer 1
  32. float2 offset_pos_Layer1_1 = windOffsetLayer1 + float2(0.1,0.5) + _LocationOffset.xy;
  33. float2 offset_pos_Layer1_2 = windOffsetLayer1 + float2(0.4,-0.5) + _LocationOffset.xy;
  34. float2 offset_pos_Layer1_3 = windOffsetLayer1 + float2(-0.2,0.9) + _LocationOffset.xy;
  35. float2 sampling_pos_Layer1_1 = float2(uv.xy + offset_pos_Layer1_1) * _TilingLayer1;
  36. float2 sampling_pos_Layer1_2 = float2(uv.xy + offset_pos_Layer1_2) * _TilingLayer1;
  37. float2 sampling_pos_Layer1_3 = float2(uv.xy + offset_pos_Layer1_3) * _TilingLayer1;
  38. //Perlin Noises
  39. float perlin_Layer1_1 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_1.xy,float2(_TilingLayer1, _TilingLayer1)));
  40. float perlin_Layer1_2 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_2.xy,float2(_TilingLayer1, _TilingLayer1)));
  41. float perlin_Layer1_3 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_3.xy,float2(_TilingLayer1, _TilingLayer1)));
  42. float perlin_Layer1_Combined = saturate(perlin_Layer1_1 + (perlin_Layer1_2 - perlin_Layer1_3));
  43. //Worley Noise
  44. float worleyLayer1 = worley2(windOffsetLayer1 + _LocationOffset.xy + uv.xy * _WorleyFreqLayer1, 1);
  45. float dilateCoverageLayer1 = dilate_perlin_worley(perlin_Layer1_Combined,worleyLayer1,_DilateCoverageLayer1);
  46. //Coverage Layer
  47. float coverageLayer1 = saturate(dilateCoverageLayer1 + (covFiller * _CoverageLayer1));
  48. //float coverageLayer1 = saturate(dilateCoverageLayer1 + (_CoverageLayer1 * dilateCoverageLayer1));
  49. float dilateTypeLayer1 = dilate_perlin_worley(perlin_Layer1_Combined,worleyLayer1,_DilateTypeLayer1);
  50. float typeLayer1 = saturate(dilateTypeLayer1 * _CloudsTypeModifierLayer1);
  51. ///Layer 1 End
  52. ///////Layer 2
  53. float2 offset_pos_Layer2_1 = float2(0.78,-0.5) + _LocationOffset.zw;
  54. float2 offset_pos_Layer2_2 = float2(0.2,0.9) + _LocationOffset.zw;
  55. float2 offset_pos_Layer2_3 = float2(-0.5,0.14) + _LocationOffset.zw;
  56. float2 sampling_pos_Layer2_1 = float2(uv.xy + offset_pos_Layer2_1) * _TilingLayer2;
  57. float2 sampling_pos_Layer2_2 = float2(uv.xy + offset_pos_Layer2_2) * _TilingLayer2;
  58. float2 sampling_pos_Layer2_3 = float2(uv.xy + offset_pos_Layer2_3) * _TilingLayer2;
  59. //Perlin Noises
  60. float perlin_Layer2_1 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_1.xy,float2(_TilingLayer2, _TilingLayer2)));
  61. float perlin_Layer2_2 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_2.xy,float2(_TilingLayer2, _TilingLayer2)));
  62. float perlin_Layer2_3 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_3.xy,float2(_TilingLayer2, _TilingLayer2)));
  63. float perlin_Layer2_Combined = saturate(perlin_Layer2_1 + (perlin_Layer2_2 - perlin_Layer2_3));
  64. //Worley Noise
  65. float worleyLayer2 = worley2(uv.xy + windOffsetLayer1 + _LocationOffset.zw * _WorleyFreqLayer2, 1);
  66. float dilateCoverageLayer2 = dilate_perlin_worley(perlin_Layer2_Combined,worleyLayer2,_DilateCoverageLayer2);
  67. //Coverage Layer
  68. //float covFiller = worleyFbm2DFiller(uv.xy * 4, 4) * 1.2;
  69. float coverageLayer2 = saturate(dilateCoverageLayer2 + (covFiller * _CoverageLayer2));
  70. //float coverageLayer1 = saturate(dilateCoverageLayer1 + (_CoverageLayer1 * dilateCoverageLayer1));
  71. float dilateTypeLayer2 = dilate_perlin_worley(perlin_Layer2_Combined,worleyLayer2,_DilateTypeLayer2);
  72. float typeLayer2 = saturate(dilateTypeLayer2 * _CloudsTypeModifierLayer2);
  73. ///Layer 2 End
  74. Result[id.xy] = float4(coverageLayer1,typeLayer1,coverageLayer2,typeLayer2);
  75. }