123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- Shader "Enviro3/Standard/WeatherTexture"
- {
- Properties
- {
- _Coverage ("Coverage", Range(0,1)) = 0.5
- _Tiling ("Tiling", Range(1,100)) = 10
- }
- SubShader
- {
- Tags { "RenderType"="Opaque" }
- LOD 200
- Pass {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #include "UnityCG.cginc"
- #include "../Includes/NoiseInclude.cginc"
- #pragma target 3.0
- #pragma exclude_renderers gles
- #pragma multi_compile_local __ ENVIRO_DUAL_LAYER
- sampler2D _MainTex;
- struct VertexInput
- {
- half4 vertex : POSITION;
- float2 uv : TEXCOORD0;
- };
- struct VertexOutput
- {
- float4 position : SV_POSITION;
- float2 uv : TEXCOORD0;
- };
-
- VertexOutput vert (appdata_img v)
- {
- VertexOutput o;
- o.position = UnityObjectToClipPos(v.vertex);
- o.uv = v.texcoord;
- return o;
- }
-
- float4x4 world_view_proj;
-
- float _CoverageLayer1;
- float _CoverageLayer2;
- float _CloudsTypeLayer1;
- float _CloudsTypeLayer2;
- float _WorleyFreq1Layer1;
- float _WorleyFreq1Layer2;
- float _WorleyFreq2Layer1;
- float _WorleyFreq2Layer2;
- float _DilateCoverageLayer1;
- float _DilateCoverageLayer2;
- float _DilateTypeLayer1;
- float _DilateTypeLayer2;
- float _CloudsTypeModifierLayer1;
- float _CloudsTypeModifierLayer2;
- float4 _LocationOffset;
- float3 _WindDirection;
- float _WindSpeed;
-
- float4 frag(VertexInput input) : SV_Target
- {
- float2 uv = input.uv;
- float2 windOffsetLayer1 = _WindDirection.xy;
- //float2 windOffsetLayer1 = 0.0f;
- 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)));
-
- //Worley Noise
- float worley1Layer1 = worley2(windOffsetLayer1 + _LocationOffset.xy + uv.xy * _WorleyFreq1Layer1, 1);
- float worley2Layer1 = worley2(windOffsetLayer1 + _LocationOffset.xy + uv.xy * _WorleyFreq2Layer1, 1);
- //float perlin_Layer1_Combined = saturate(perlin_Layer1_1 + (perlin_Layer1_2 - perlin_Layer1_3) + worleyLayer1);
- float dilateCoverageLayer1 = dilate_perlin_worley(worley1Layer1,worley2Layer1,_DilateCoverageLayer1);
- //Coverage Layer
- float coverageLayer1 = saturate(dilateCoverageLayer1 + (covFiller * _CoverageLayer1));
-
- float dilateTypeLayer1 = dilate_perlin_worley(worley1Layer1,worley2Layer1,_DilateTypeLayer1);
- float typeLayer1 = saturate(dilateTypeLayer1 * _CloudsTypeModifierLayer1);
- ///Layer 1 End
- #ifdef ENVIRO_DUAL_LAYER
- ///////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)));
-
- //Worley Noise
- float worley1Layer2 = worley2(windOffsetLayer1 + _LocationOffset.zw + uv.xy * _WorleyFreq1Layer2, 1);
- float worley2Layer2 = worley2(windOffsetLayer1 + _LocationOffset.zw + uv.xy * _WorleyFreq2Layer2, 1);
- //float perlin_Layer2_Combined = saturate(perlin_Layer2_1 + (perlin_Layer2_2 - perlin_Layer2_3) + worleyLayer2);
- float dilateCoverageLayer2 = dilate_perlin_worley(worley1Layer2,worley2Layer2,_DilateCoverageLayer2);
-
- //Coverage Layer
- //float covFiller = worleyFbm2DFiller(uv.xy * 4, 4) * 1.2;
- float coverageLayer2 = saturate(dilateCoverageLayer2 + (covFiller * _CoverageLayer2));
-
- float dilateTypeLayer2 = dilate_perlin_worley(worley1Layer2,worley2Layer2,_DilateTypeLayer2);
- float typeLayer2 = saturate(dilateTypeLayer2 * _CloudsTypeModifierLayer2);
- ///Layer 2 End
- return float4(coverageLayer1,typeLayer1,coverageLayer2,typeLayer2);
- #else
- return float4(coverageLayer1,typeLayer1,0.0f,0.0f);
- #endif
- }
- ENDCG
- }
- }
- FallBack "Diffuse"
- }
|