Add shaders
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
Shader "Enviro/Standard/WeatherMap" {
|
||||
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 "/Core/EnviroNoiseCore.cginc"
|
||||
#pragma target 3.0
|
||||
#pragma exclude_renderers gles
|
||||
|
||||
|
||||
#define CLASSICPERLIN
|
||||
|
||||
sampler2D _MainTex;
|
||||
|
||||
struct VertexInput {
|
||||
half4 vertex : POSITION;
|
||||
float2 uv : TEXCOORD0;
|
||||
};
|
||||
|
||||
struct VertexOutput {
|
||||
float4 position : SV_POSITION;
|
||||
float2 uv : TEXCOORD0;
|
||||
};
|
||||
|
||||
VertexOutput vert (VertexInput v) {
|
||||
VertexOutput o;
|
||||
o.position = UnityObjectToClipPos(v.vertex);
|
||||
o.uv = v.uv;
|
||||
return o;
|
||||
}
|
||||
|
||||
float4x4 world_view_proj;
|
||||
|
||||
float _Coverage;
|
||||
float _CloudsType;
|
||||
float _CoverageType;
|
||||
int _Tiling;
|
||||
float2 _WindDir;
|
||||
float2 _Location;
|
||||
float _AnimSpeedScale;
|
||||
float4 _LightingVariance;
|
||||
|
||||
float set_range(float value, float low, float high) {
|
||||
return saturate((value - low)/(high - low));
|
||||
}
|
||||
|
||||
float remap(float value, float original_min, float original_max, float new_min, float new_max)
|
||||
{
|
||||
return new_min + saturate(((value - original_min) / (original_max - original_min)) * (new_max - new_min));
|
||||
}
|
||||
|
||||
float dilate_perlin_worley(float p, float w, float x) {
|
||||
float curve = 0.75;
|
||||
if (x < 0.5) {
|
||||
x = x / 0.5;
|
||||
float n = p + w * x;
|
||||
return n * lerp(1, 0.5, pow(x, curve));
|
||||
}
|
||||
else {
|
||||
x = (x - 0.5) / 0.5;
|
||||
float n = w + p * (1.0 - x);
|
||||
return n * lerp(0.5, 1.0, pow(x, 1.0 / curve));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
float4 frag(VertexInput input) : SV_Target
|
||||
{
|
||||
float2 xy_offset = _WindDir * 10 * _AnimSpeedScale;
|
||||
float2 xy_offset1 = xy_offset;
|
||||
float2 xy_offset2 = xy_offset + float2(50,100);
|
||||
float2 xy_offset3 = xy_offset + float2(100, 50);
|
||||
float2 xy_offset4 = xy_offset + float2(100, 500);
|
||||
|
||||
float2 sampling_pos0 = float2(input.uv + xy_offset1 + _Location) * _Tiling;
|
||||
float2 sampling_pos01 = float2(input.uv + xy_offset4 + _Location) * _Tiling;
|
||||
float2 sampling_pos02 = float2(input.uv + xy_offset2 + _Location) * 2 * _Tiling;
|
||||
float2 sampling_pos03 = float2(input.uv + xy_offset3 + _Location) * _LightingVariance.y * _Tiling;
|
||||
|
||||
float perlinT1 = saturate(CalculatePerlinTileing5(sampling_pos0.xy,float2(_Tiling, _Tiling)));
|
||||
float perlinT2 = saturate(CalculatePerlinTileing5(sampling_pos01.xy, float2(_Tiling, _Tiling)));
|
||||
float perlinT3 = saturate(CalculatePerlinTileing5(sampling_pos02.xy, float2(_Tiling, _Tiling)));
|
||||
|
||||
float perlinT = perlinT1 + saturate(perlinT2 - perlinT1);
|
||||
float worleyT = CalculateWorley3oct(sampling_pos0.xy, 1.5, 2, 2.5);
|
||||
|
||||
//float worley2 = saturate( pow( CalculateWorley1(sampling_pos0.xy, 5),0.5));
|
||||
|
||||
float perlin_worleyCov = dilate_perlin_worley(perlinT3, worleyT, 0.6);
|
||||
|
||||
float perlin_worley = dilate_perlin_worley(perlinT, perlin_worleyCov, _CoverageType);
|
||||
|
||||
float worleyFull = saturate((CalculateWorley1(sampling_pos01.xy, 4) - perlin_worley));
|
||||
|
||||
//float perlin_worleyFull = dilate_perlin_worley(perlinT3, worleyFull, 0.75);
|
||||
float coverage = perlin_worley + (_Coverage * worleyFull);
|
||||
//float coverage = perlin_worley * worley2 + (_Coverage * worleyFull);
|
||||
|
||||
if (_Coverage < 0)
|
||||
coverage += _Coverage;
|
||||
|
||||
float type = (coverage + (_Coverage - perlin_worley) * (1-_CloudsType)) * _CloudsType;
|
||||
/////
|
||||
|
||||
//Clouds Lighting Variance
|
||||
float perlinT4 = saturate(CalculatePerlinTileing5(sampling_pos03.xy, float2(_Tiling, _Tiling)));
|
||||
|
||||
perlinT4 = clamp(perlinT4, _LightingVariance.x, 1);
|
||||
|
||||
return float4(coverage, perlinT4, type, 0);
|
||||
}
|
||||
|
||||
ENDCG
|
||||
}
|
||||
}
|
||||
FallBack "Diffuse"
|
||||
}
|
||||
Reference in New Issue
Block a user