mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
More sunset variation for higher graphics modes
This commit is contained in:
parent
54eb2a3ff7
commit
5bdea9249c
@ -5,7 +5,7 @@ float falloff(float x) {
|
||||
return pow(max(x > 0.577 ? (0.3849 / x - 0.1) : (0.9 - x * x), 0.0), 4);
|
||||
}
|
||||
|
||||
float emission_strength = clamp((sin(time_of_day.x / (3600 * 24)) - 0.8) / 0.1, 0, 1);
|
||||
float emission_strength = clamp((magnetosphere - 0.8) / 0.1, 0, 1);
|
||||
|
||||
// Return the 'broad' density of the cloud at a position. This gets refined later with extra noise, but is important
|
||||
// for computing light access.
|
||||
@ -199,7 +199,6 @@ vec3 get_cloud_color(vec3 surf_color, vec3 dir, vec3 origin, const float time_of
|
||||
splay += (textureLod(sampler2D(t_noise, s_noise), vec2(atan2(dir.x, dir.y) * 2 / PI, dir.z) * 5.0 - time_of_day * 0.00005, 0).x - 0.5) * 0.025 / (1.0 + pow(dir.z, 2) * 10);
|
||||
#endif
|
||||
|
||||
/* const float RAYLEIGH = 0.25; */
|
||||
const vec3 RAYLEIGH = vec3(0.025, 0.1, 0.5);
|
||||
|
||||
// Proportion of sunlight that get scattered back into the camera by clouds
|
||||
@ -208,12 +207,15 @@ vec3 get_cloud_color(vec3 surf_color, vec3 dir, vec3 origin, const float time_of
|
||||
float net_light = get_sun_brightness() + get_moon_brightness();
|
||||
vec3 sky_color = RAYLEIGH * net_light;
|
||||
vec3 sky_light = get_sky_light(dir, time_of_day, false);
|
||||
vec3 sun_color = get_sun_color();
|
||||
vec3 moon_color = get_moon_color();
|
||||
|
||||
float cdist = max_dist;
|
||||
float ldist = cdist;
|
||||
// i is an emergency brake
|
||||
float min_dist = clamp(max_dist / 4, 0.25, 24);
|
||||
for (int i = 0; cdist > min_dist && i < 250; i ++) {
|
||||
int i;
|
||||
for (i = 0; cdist > min_dist && i < 250; i ++) {
|
||||
ldist = cdist;
|
||||
cdist = step_to_dist(trunc(dist_to_step(cdist - 0.25, quality)), quality);
|
||||
|
||||
@ -235,8 +237,8 @@ vec3 get_cloud_color(vec3 surf_color, vec3 dir, vec3 origin, const float time_of
|
||||
// Attenuate light passing through the clouds
|
||||
surf_color * cloud_darken * global_darken +
|
||||
// Add the directed light light scattered into the camera by the clouds and the atmosphere (global illumination)
|
||||
get_sun_color() * sun_scatter * get_sun_brightness() * (sun_access * (1.0 - cloud_darken) /*+ sky_color * global_scatter_factor*/) +
|
||||
get_moon_color() * moon_scatter * get_moon_brightness() * (moon_access * (1.0 - cloud_darken) /*+ sky_color * global_scatter_factor*/) +
|
||||
sun_color * sun_scatter * get_sun_brightness() * (sun_access * (1.0 - cloud_darken) /*+ sky_color * global_scatter_factor*/) +
|
||||
moon_color * moon_scatter * get_moon_brightness() * (moon_access * (1.0 - cloud_darken) /*+ sky_color * global_scatter_factor*/) +
|
||||
sky_light * (1.0 - global_darken) +
|
||||
emission * density_integrals.y;
|
||||
}
|
||||
|
@ -24,8 +24,8 @@ const vec3 SKY_DAY_BOT = vec3(0.1, 0.2, 0.3);
|
||||
const vec3 DAY_LIGHT = vec3(3.8, 3.0, 1.8);
|
||||
const vec3 SUN_HALO_DAY = vec3(0.25, 0.25, 0.001);
|
||||
|
||||
const vec3 SKY_DUSK_TOP = vec3(0.06, 0.1, 0.20);
|
||||
const vec3 SKY_DUSK_MID = vec3(0.75, 0.1, 0.15);
|
||||
const vec3 SKY_DUSK_TOP = vec3(1.06, 0.1, 0.20);
|
||||
const vec3 SKY_DUSK_MID = vec3(2.5, 0.3, 0.1);
|
||||
const vec3 SKY_DUSK_BOT = vec3(0.0, 0.1, 0.23);
|
||||
const vec3 DUSK_LIGHT = vec3(8.0, 1.5, 0.15);
|
||||
const vec3 SUN_HALO_DUSK = vec3(10.2, 3.0, 0.1);
|
||||
@ -111,6 +111,20 @@ float cloud_shadow(vec3 pos, vec3 light_dir) {
|
||||
#endif
|
||||
}
|
||||
|
||||
float magnetosphere = sin(time_of_day.x / (3600 * 24));
|
||||
#if (CLOUD_MODE <= CLOUD_MODE_LOW)
|
||||
const vec3 magnetosphere_tint = vec3(1);
|
||||
#else
|
||||
float _magnetosphere2 = pow(magnetosphere, 2) * 2 - 1;
|
||||
float _magnetosphere3 = pow(_magnetosphere2, 2) * 2 - 1;
|
||||
vec3 _magnetosphere_change = vec3(1.0) + vec3(
|
||||
(magnetosphere + 1.0) * 2.0,
|
||||
(-_magnetosphere2 + 1.0) * 2.0,
|
||||
(-_magnetosphere3 + 1.0) * 1.0
|
||||
) * 0.4;
|
||||
vec3 magnetosphere_tint = _magnetosphere_change / length(_magnetosphere_change);
|
||||
#endif
|
||||
|
||||
float get_sun_brightness(/*vec3 sun_dir*/) {
|
||||
return max(-sun_dir.z + 0.5, 0.0);
|
||||
}
|
||||
@ -122,7 +136,7 @@ float get_moon_brightness(/*vec3 moon_dir*/) {
|
||||
vec3 get_sun_color(/*vec3 sun_dir*/) {
|
||||
return mix(
|
||||
mix(
|
||||
DUSK_LIGHT,
|
||||
DUSK_LIGHT * magnetosphere_tint,
|
||||
NIGHT_LIGHT,
|
||||
max(sun_dir.z, 0)
|
||||
),
|
||||
@ -131,12 +145,11 @@ vec3 get_sun_color(/*vec3 sun_dir*/) {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// Average sky colour (i.e: perfectly scattered light from the sky)
|
||||
vec3 get_sky_color(/*vec3 sun_dir*/) {
|
||||
return mix(
|
||||
mix(
|
||||
(SKY_DUSK_TOP + SKY_DUSK_MID) / 2,
|
||||
(SKY_DUSK_TOP + SKY_DUSK_MID) / 2 * magnetosphere_tint,
|
||||
(SKY_NIGHT_TOP + SKY_NIGHT_MID) / 2,
|
||||
max(sun_dir.z, 0)
|
||||
),
|
||||
@ -430,7 +443,7 @@ vec3 get_sky_light(vec3 dir, float time_of_day, bool with_stars) {
|
||||
|
||||
vec3 sky_top = mix(
|
||||
mix(
|
||||
SKY_DUSK_TOP,
|
||||
SKY_DUSK_TOP * magnetosphere_tint,
|
||||
SKY_NIGHT_TOP,
|
||||
pow(max(sun_dir.z, 0.0), 0.2)
|
||||
) + star,
|
||||
@ -439,7 +452,8 @@ vec3 get_sky_light(vec3 dir, float time_of_day, bool with_stars) {
|
||||
);
|
||||
|
||||
vec3 sky_mid = mix(
|
||||
mix( SKY_DUSK_MID,
|
||||
mix(
|
||||
SKY_DUSK_MID * magnetosphere_tint,
|
||||
SKY_NIGHT_MID,
|
||||
pow(max(sun_dir.z, 0.0), 0.1)
|
||||
),
|
||||
@ -449,7 +463,7 @@ vec3 get_sky_light(vec3 dir, float time_of_day, bool with_stars) {
|
||||
|
||||
vec3 sky_bot = mix(
|
||||
mix(
|
||||
SKY_DUSK_BOT,
|
||||
SKY_DUSK_BOT * magnetosphere_tint,
|
||||
SKY_NIGHT_BOT,
|
||||
pow(max(sun_dir.z, 0.0), 0.2)
|
||||
),
|
||||
@ -467,7 +481,7 @@ vec3 get_sky_light(vec3 dir, float time_of_day, bool with_stars) {
|
||||
max(dir.z, 0)
|
||||
);
|
||||
|
||||
return sky_color;
|
||||
return sky_color * magnetosphere_tint;
|
||||
}
|
||||
|
||||
vec3 get_sky_color(vec3 dir, float time_of_day, vec3 origin, vec3 f_pos, float quality, bool with_features, float refractionIndex) {
|
||||
@ -484,7 +498,7 @@ vec3 get_sky_color(vec3 dir, float time_of_day, vec3 origin, vec3 f_pos, float q
|
||||
const vec3 SUN_SURF_COLOR = vec3(1.5, 0.9, 0.35) * 50.0;
|
||||
|
||||
vec3 sun_halo_color = mix(
|
||||
SUN_HALO_DUSK,
|
||||
SUN_HALO_DUSK * magnetosphere_tint,
|
||||
SUN_HALO_DAY,
|
||||
pow(max(-sun_dir.z, 0.0), 0.5)
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user