diff --git a/drivers/gles3/shaders/canvas.glsl b/drivers/gles3/shaders/canvas.glsl index 5e7fb3b33898..687a1c137c73 100644 --- a/drivers/gles3/shaders/canvas.glsl +++ b/drivers/gles3/shaders/canvas.glsl @@ -452,7 +452,7 @@ vec3 light_normal_compute(vec3 light_vec, vec3 normal, vec3 base_color, vec3 lig vec4 light_shadow_compute(uint light_base, vec4 light_color, vec4 shadow_uv #ifdef LIGHT_CODE_USED , - vec3 shadow_modulate + vec4 shadow_modulate #endif ) { float shadow = 0.0; @@ -488,11 +488,12 @@ vec4 light_shadow_compute(uint light_base, vec4 light_color, vec4 shadow_uv vec4 shadow_color = godot_unpackUnorm4x8(light_array[light_base].shadow_color); #ifdef LIGHT_CODE_USED - shadow_color.rgb *= shadow_modulate; + shadow_color.rgb *= shadow_modulate.rgb; + shadow *= shadow_modulate.a; #endif shadow_color.a *= light_color.a; //respect light alpha - + return mix(light_color, shadow_color, shadow); } @@ -736,7 +737,7 @@ void main() { light_color = light_shadow_compute(light_base, light_color, shadow_uv #ifdef LIGHT_CODE_USED , - shadow_modulate.rgb + shadow_modulate #endif ); } @@ -838,7 +839,7 @@ void main() { light_color = light_shadow_compute(light_base, light_color, shadow_uv #ifdef LIGHT_CODE_USED , - shadow_modulate.rgb + shadow_modulate #endif ); } diff --git a/servers/rendering/renderer_rd/shaders/canvas.glsl b/servers/rendering/renderer_rd/shaders/canvas.glsl index dafcce37adf5..b358c89fed41 100644 --- a/servers/rendering/renderer_rd/shaders/canvas.glsl +++ b/servers/rendering/renderer_rd/shaders/canvas.glsl @@ -393,7 +393,7 @@ vec3 light_normal_compute(vec3 light_vec, vec3 normal, vec3 base_color, vec3 lig vec4 light_shadow_compute(uint light_base, vec4 light_color, vec4 shadow_uv #ifdef LIGHT_CODE_USED , - vec3 shadow_modulate + vec4 shadow_modulate #endif ) { float shadow; @@ -431,11 +431,12 @@ vec4 light_shadow_compute(uint light_base, vec4 light_color, vec4 shadow_uv vec4 shadow_color = unpackUnorm4x8(light_array.data[light_base].shadow_color); #ifdef LIGHT_CODE_USED - shadow_color.rgb *= shadow_modulate; + shadow_color.rgb *= shadow_modulate.rgb; + shadow *= shadow_modulate.a; #endif shadow_color.a *= light_color.a; //respect light alpha - + return mix(light_color, shadow_color, shadow); } @@ -643,8 +644,8 @@ void main() { light_color = light_shadow_compute(light_base, light_color, shadow_uv #ifdef LIGHT_CODE_USED - , - shadow_modulate.rgb + , + shadow_modulate #endif ); } @@ -730,8 +731,8 @@ void main() { light_color = light_shadow_compute(light_base, light_color, shadow_uv #ifdef LIGHT_CODE_USED - , - shadow_modulate.rgb + , + shadow_modulate #endif ); }