diff --git a/assets/voxygen/shaders/include/cloud/regular.glsl b/assets/voxygen/shaders/include/cloud/regular.glsl index 4669b9202e..285a5d3646 100644 --- a/assets/voxygen/shaders/include/cloud/regular.glsl +++ b/assets/voxygen/shaders/include/cloud/regular.glsl @@ -3,9 +3,9 @@ uniform sampler2D t_noise; const float CLOUD_AVG_HEIGHT = 1025.0; const float CLOUD_HEIGHT_MIN = CLOUD_AVG_HEIGHT - 50.0; const float CLOUD_HEIGHT_MAX = CLOUD_AVG_HEIGHT + 50.0; -const float CLOUD_THRESHOLD = 0.3; +const float CLOUD_THRESHOLD = 0.25; const float CLOUD_SCALE = 5.0; -const float CLOUD_DENSITY = 80.0; +const float CLOUD_DENSITY = 100.0; float vsum(vec3 v) { return v.x + v.y + v.z; @@ -21,22 +21,27 @@ vec2 cloud_at(vec3 pos) { float value = ( 0.0 + texture(t_noise, scaled_pos * 0.0003 + tick_offs).x - + texture(t_noise, scaled_pos * 0.0009 - tick_offs).x * 0.5 - + texture(t_noise, scaled_pos * 0.0025 - time_of_day.x * 0.0002).x * 0.25 - + texture(t_noise, scaled_pos * 0.008 + time_of_day.x * 0.0004).x * 0.15 - + texture(t_noise, scaled_pos * 0.02 + tick_offs + time_of_day.x * 0.0004).x * 0.1 + + texture(t_noise, scaled_pos * 0.0015 - tick_offs * 2.0).x * 0.5 + //+ texture(t_noise, scaled_pos * 0.0025 - time_of_day.x * 0.0002).x * 0.25 + //+ texture(t_noise, scaled_pos * 0.008 + time_of_day.x * 0.0004).x * 0.15 + //+ texture(t_noise, scaled_pos * 0.02 + tick_offs + time_of_day.x * 0.0004).x * 0.2 ) / 3.0; + value += (0.0 + + texture(t_noise, scaled_pos * 0.008 + time_of_day.x * 0.0004).x * 0.25 + + texture(t_noise, scaled_pos * 0.02 + tick_offs + time_of_day.x * 0.0004).x * 0.15 + ) * value; + float density = max((value - CLOUD_THRESHOLD) - abs(pos.z - CLOUD_AVG_HEIGHT) / 400.0, 0.0) * CLOUD_DENSITY; - const float SHADE_GRADIENT = 1.8 / (CLOUD_AVG_HEIGHT - CLOUD_HEIGHT_MIN); - float shade = ((pos.z - CLOUD_AVG_HEIGHT) * SHADE_GRADIENT + 0.5); + const float SHADE_GRADIENT = 1.5 / (CLOUD_AVG_HEIGHT - CLOUD_HEIGHT_MIN); + float shade = ((pos.z - CLOUD_AVG_HEIGHT) / (CLOUD_HEIGHT_MAX - CLOUD_HEIGHT_MIN)) * 2.5 + 0.7; return vec2(shade, density / (1.0 + vsum(abs(pos - cam_pos.xyz)) / 5000)); } vec4 get_cloud_color(vec3 dir, vec3 origin, float time_of_day, float max_dist, float quality) { - const int ITERS = 10; + const int ITERS = 12; const float INCR = 1.0 / ITERS; float mind = (CLOUD_HEIGHT_MIN - origin.z) / dir.z; @@ -61,6 +66,10 @@ vec4 get_cloud_color(vec3 dir, vec3 origin, float time_of_day, float max_dist, f passthrough *= 1.0 - integral; cloud_shade = mix(cloud_shade, sample.x, passthrough * integral); dist += INCR * delta; + + if (passthrough < 0.05 || (passthrough > 0.8 && dist > (maxd + mind) * 0.7)) { + break; + } } } diff --git a/assets/voxygen/shaders/include/sky.glsl b/assets/voxygen/shaders/include/sky.glsl index dcc1733bd0..5b3869c8ac 100644 --- a/assets/voxygen/shaders/include/sky.glsl +++ b/assets/voxygen/shaders/include/sky.glsl @@ -70,10 +70,7 @@ void get_sun_diffuse(vec3 norm, float time_of_day, out vec3 light, out vec3 diff float sun_light = get_sun_brightness(sun_dir); float moon_light = get_moon_brightness(moon_dir); - // clamp() changed to max() as sun_dir.z is produced from a cos() function and therefore never greater than 1 - vec3 sun_color = get_sun_color(sun_dir); - vec3 moon_color = get_moon_color(moon_dir); vec3 sun_chroma = sun_color * sun_light; @@ -139,7 +136,7 @@ vec3 get_sky_color(vec3 dir, float time_of_day, vec3 origin, vec3 f_pos, float q vec3 moon_halo = pow(max(dot(dir, -moon_dir) + 0.1, 0.0), 8.0) * MOON_HALO_COLOR; vec3 moon_surf = pow(max(dot(dir, -moon_dir) - 0.001, 0.0), 3000.0) * MOON_SURF_COLOR; - vec3 moon_light = clamp(moon_halo + moon_surf, vec3(0), vec3(clamp(dir.z * 3.0, 0, 1))); + vec3 moon_light = clamp(moon_halo + moon_surf, vec3(0), vec3(max(dir.z * 3.0, 0))); // Replaced all clamp(sun_dir, 0, 1) with max(sun_dir, 0) because sun_dir is calculated from sin and cos, which are never > 1 @@ -188,7 +185,7 @@ vec3 get_sky_color(vec3 dir, float time_of_day, vec3 origin, vec3 f_pos, float q // Clouds clouds = get_cloud_color(dir, origin, time_of_day, f_dist, quality); - clouds.rgb *= get_sun_brightness(sun_dir) * (sun_halo * 2.5 + get_sun_color(sun_dir)) + get_moon_brightness(moon_dir) * (moon_halo * 80.0 + get_moon_color(moon_dir)); + clouds.rgb *= get_sun_brightness(sun_dir) * (sun_halo * 1.5 + get_sun_color(sun_dir)) + get_moon_brightness(moon_dir) * (moon_halo * 80.0 + get_moon_color(moon_dir)); if (f_dist > 5000.0) { sky_color += sun_light + moon_light;