 	vec4 sf = StratusFactor * (1.0f - clamp(weather.b * 2.0f, 0.0f, 1.0f));
 	vec4 cf = CumulusFactor * (1.0f - abs(weather.b - 0.5f) * 2.0f);
 	vec4 cbf = CumulonumbisFactor * clamp(weather.b - 0.5f, 0.0f, 1.0f) * 2.0f;
-	float typeGrad = GetCloudTypeGradient(heightF, sf + cf + cbf);	
+	float typeGrad = GetCloudTypeGradient(heightF, sf + cf + cbf);
 	lfFbm *= typeGrad;
 
-	float coverage = weather.r * min((1.0f - heightF) + 0.2, 1.0f);
+	float coverage = weather.r * (1.0f - heightF);
 	lfFbm = Remap(lfFbm, coverage, 1.0f, 0.0f, 1.0f);
 	lfFbm *= coverage;
 
 	if (!useCheapWay)
 	{
 		//do curl
-		//vec4 curlNoise = texture2D(curlMap, uvw.xy);
-		//uvw.xy += curlNoise.xy * (1.0f - heightGrad) * 1.0f;
-
-		noise = textureLod(worleyMap, uvw * 0.1f, mipmap);
+		vec4 curlNoise = texture2D(curlMap, uvw.xz);
+		uvw.xz += curlNoise.xz * clamp(heightF * 2.0f, 0.0f, 1.0f) * 0.2f;
+
+		noise = textureLod(worleyMap, uvw * 0.15f, mipmap);
 		float hfFbm = noise.r * 0.625f + noise.g * 0.25f + noise.b * 0.125f;
-		hfFbm = mix(hfFbm, 1.0f - hfFbm, clamp(heightF * 10.0f, 0.0f, 1.0f));
-		lfFbm = Remap(lfFbm, hfFbm * 0.2f, 1.0f, 0.0f, 1.0f);
+		hfFbm = 1.0f - hfFbm;
+		lfFbm = Remap(lfFbm, hfFbm * 0.5f, 1.0f, 0.0f, 1.0f);
 	}
 
 	return clamp(lfFbm, 0.0f, 1.0f);

vec3 ConeTracingLight(vec3 pos, float density, float heightF, vec3 lightRay, vec3 viewRay, vec3 weatherData, float mipmapLev)
{
	vec3 lightSamplePos;
	float lightRayDensity = 0.0f;
			
	for (int j = 0; j < 4; j++)
	{
		vec3 bias = randomV[j];
		bias = normalize(bias);
		lightSamplePos = pos + lightRay * pow(2.0f, (j + 0)) + bias * (j+1) * 2.0f;
		float heightF = GetHeightGradient(lightSamplePos);

		lightRayDensity += SampleCloudDensity(lightSamplePos, weatherData, heightF, mipmapLev + 1.0f, false);//lightRayDensity >= 0.3f);

		if (lightRayDensity >= 1.0f) break;
	}

	float pb0 = PowderBeers(lightRayDensity + density, weatherData.g);
	float pb1 = PowderBeers(density, weatherData.g);
	float hg = HG(-viewRay, normalize(-wsSunPos));
	vec3 sampleColor = sunColor * pb0 * pb0 * hg * 3.0f;
	
	//ambient
	vec3 ambientColor = sunColor * heightF;
	ambientColor = ambientColor * pb1 * pb1;
	sampleColor += ambientColor * 2.0f;
	
	return sampleColor;
}


const vec4 StratusFactor = vec4(0.0f, 0.1f, 0.2f, 0.3f);
const vec4 CumulusFactor =vec4(0.05f, 0.25f, 0.45f, 0.65f);
const vec4 CumulonumbisFactor = vec4(0.0f, 0.05f, 0.95f, 1.0f);

float Remap(float value, float oldMin, float oldMax, float newMin, float newMax)
{
