123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #pragma kernel CSMain
- #include "../Includes/NoiseInclude.cginc"
- RWTexture2D<float4> Result;
- float _CoverageLayer1;
- float _CoverageLayer2;
- float _CloudsTypeLayer1;
- float _CloudsTypeLayer2;
- int _TilingLayer1;
- int _TilingLayer2;
- float _WorleyFreqLayer1;
- float _WorleyFreqLayer2;
- float _DilateCoverageLayer1;
- float _DilateCoverageLayer2;
- float _DilateTypeLayer1;
- float _DilateTypeLayer2;
- float _CloudsTypeModifierLayer1;
- float _CloudsTypeModifierLayer2;
- float4 _LocationOffset;
- float3 _WindDirection;
- float _WindSpeed;
-
- float3 IDToUv(uint3 id) {
- return saturate(float3((id.x + 0.5f) / 512, (id.y + 0.5f) / 512, (id.z) / 1));
- }
- [numthreads(16,16,1)]
- void CSMain (uint3 id : SV_DispatchThreadID)
- {
- float3 uv = IDToUv(id);
- float2 windOffsetLayer1 = _WindDirection.xy * 10 * _WindSpeed;
- float2 fillerUV = uv.xy + windOffsetLayer1 + _LocationOffset.xy;
- float covFiller = worleyFbm2DFiller(fillerUV * 2, 2) * 1.2;
- ///////Layer 1
- float2 offset_pos_Layer1_1 = windOffsetLayer1 + float2(0.1,0.5) + _LocationOffset.xy;
- float2 offset_pos_Layer1_2 = windOffsetLayer1 + float2(0.4,-0.5) + _LocationOffset.xy;
- float2 offset_pos_Layer1_3 = windOffsetLayer1 + float2(-0.2,0.9) + _LocationOffset.xy;
- float2 sampling_pos_Layer1_1 = float2(uv.xy + offset_pos_Layer1_1) * _TilingLayer1;
- float2 sampling_pos_Layer1_2 = float2(uv.xy + offset_pos_Layer1_2) * _TilingLayer1;
- float2 sampling_pos_Layer1_3 = float2(uv.xy + offset_pos_Layer1_3) * _TilingLayer1;
- //Perlin Noises
- float perlin_Layer1_1 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_1.xy,float2(_TilingLayer1, _TilingLayer1)));
- float perlin_Layer1_2 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_2.xy,float2(_TilingLayer1, _TilingLayer1)));
- float perlin_Layer1_3 = saturate(CalculatePerlinTileing(sampling_pos_Layer1_3.xy,float2(_TilingLayer1, _TilingLayer1)));
- float perlin_Layer1_Combined = saturate(perlin_Layer1_1 + (perlin_Layer1_2 - perlin_Layer1_3));
- //Worley Noise
- float worleyLayer1 = worley2(windOffsetLayer1 + _LocationOffset.xy + uv.xy * _WorleyFreqLayer1, 1);
- float dilateCoverageLayer1 = dilate_perlin_worley(perlin_Layer1_Combined,worleyLayer1,_DilateCoverageLayer1);
- //Coverage Layer
- float coverageLayer1 = saturate(dilateCoverageLayer1 + (covFiller * _CoverageLayer1));
- //float coverageLayer1 = saturate(dilateCoverageLayer1 + (_CoverageLayer1 * dilateCoverageLayer1));
-
- float dilateTypeLayer1 = dilate_perlin_worley(perlin_Layer1_Combined,worleyLayer1,_DilateTypeLayer1);
- float typeLayer1 = saturate(dilateTypeLayer1 * _CloudsTypeModifierLayer1);
- ///Layer 1 End
- ///////Layer 2
- float2 offset_pos_Layer2_1 = float2(0.78,-0.5) + _LocationOffset.zw;
- float2 offset_pos_Layer2_2 = float2(0.2,0.9) + _LocationOffset.zw;
- float2 offset_pos_Layer2_3 = float2(-0.5,0.14) + _LocationOffset.zw;
- float2 sampling_pos_Layer2_1 = float2(uv.xy + offset_pos_Layer2_1) * _TilingLayer2;
- float2 sampling_pos_Layer2_2 = float2(uv.xy + offset_pos_Layer2_2) * _TilingLayer2;
- float2 sampling_pos_Layer2_3 = float2(uv.xy + offset_pos_Layer2_3) * _TilingLayer2;
- //Perlin Noises
- float perlin_Layer2_1 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_1.xy,float2(_TilingLayer2, _TilingLayer2)));
- float perlin_Layer2_2 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_2.xy,float2(_TilingLayer2, _TilingLayer2)));
- float perlin_Layer2_3 = saturate(CalculatePerlinTileing(sampling_pos_Layer2_3.xy,float2(_TilingLayer2, _TilingLayer2)));
- float perlin_Layer2_Combined = saturate(perlin_Layer2_1 + (perlin_Layer2_2 - perlin_Layer2_3));
- //Worley Noise
- float worleyLayer2 = worley2(uv.xy + windOffsetLayer1 + _LocationOffset.zw * _WorleyFreqLayer2, 1);
- float dilateCoverageLayer2 = dilate_perlin_worley(perlin_Layer2_Combined,worleyLayer2,_DilateCoverageLayer2);
- //Coverage Layer
- //float covFiller = worleyFbm2DFiller(uv.xy * 4, 4) * 1.2;
- float coverageLayer2 = saturate(dilateCoverageLayer2 + (covFiller * _CoverageLayer2));
- //float coverageLayer1 = saturate(dilateCoverageLayer1 + (_CoverageLayer1 * dilateCoverageLayer1));
-
- float dilateTypeLayer2 = dilate_perlin_worley(perlin_Layer2_Combined,worleyLayer2,_DilateTypeLayer2);
- float typeLayer2 = saturate(dilateTypeLayer2 * _CloudsTypeModifierLayer2);
- ///Layer 2 End
- Result[id.xy] = float4(coverageLayer1,typeLayer1,coverageLayer2,typeLayer2);
- }
|