From a5f76ec38d682108e8c655a25b32b88e19bd8783 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Fri, 8 Oct 2021 09:16:41 +0300 Subject: [PATCH] Add a shadowing term from the planet to atmospheric transmittance This makes the sky properly dark if the sun is below the horizon. --- builtin_data/_sky.glsl | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/builtin_data/_sky.glsl b/builtin_data/_sky.glsl index 3493b5a4..81f9d163 100644 --- a/builtin_data/_sky.glsl +++ b/builtin_data/_sky.glsl @@ -123,11 +123,15 @@ OpticalPathInfo raymarch_path(float start_height, vec3 look_dir) AtmosphericEvents ev = calculate_events(height); vec3 transmittance = exp(-path_extinction); - vec3 in_transmittance = texture(transmittance_lookup, vec2(sqrt(height/atmosphere_thickness), light_z)).rgb; - vec3 in_luminance = (ev.rayleigh_scatter*p_rayleigh+ev.mie_scatter*p_mie)*step_size; - if(i==n_steps && ground_t>0.0) - in_luminance += ground_albedo*light_z/PI; - path_luminance += transmittance*in_transmittance*in_luminance; + float in_ground_t = ray_sphere_intersect(pos+light_dir, light_dir, planet_center, planet_radius); + if(in_ground_t<0.0) + { + vec3 in_transmittance = texture(transmittance_lookup, vec2(sqrt(height/atmosphere_thickness), light_z)).rgb; + vec3 in_luminance = (ev.rayleigh_scatter*p_rayleigh+ev.mie_scatter*p_mie)*step_size; + if(i==n_steps && ground_t>0.0 && light_z>0.0) + in_luminance += ground_albedo*light_z/PI; + path_luminance += transmittance*in_transmittance*in_luminance; + } path_extinction += total_extinction(ev)*step_size; pos += look_dir*step_size; -- 2.43.0