Fix "fixed" fog drawing in front of volumetric fog with a sky background

This closes #42820.

Co-authored-by: Clay John <claynjohn@gmail.com>
This commit is contained in:
Hugo Locurcio 2020-10-15 21:59:08 +02:00
parent 4dce52e4cb
commit 4357506e64
No known key found for this signature in database
GPG key ID: 39E8F8BE30B0A49C
2 changed files with 15 additions and 12 deletions

View file

@ -2726,14 +2726,15 @@ FRAGMENT_SHADER_CODE
specular_buffer = vec4(specular_light, metallic);
#endif
if (scene_data.volumetric_fog_enabled) {
vec4 fog = volumetric_fog_process(screen_uv, -vertex.z);
// Draw "fixed" fog before volumetric fog to ensure volumetric fog can appear in front of the sky.
if (scene_data.fog_enabled) {
vec4 fog = fog_process(vertex);
diffuse_buffer.rgb = mix(diffuse_buffer.rgb, fog.rgb, fog.a);
specular_buffer.rgb = mix(specular_buffer.rgb, vec3(0.0), fog.a);
}
if (scene_data.fog_enabled) {
vec4 fog = fog_process(vertex);
if (scene_data.volumetric_fog_enabled) {
vec4 fog = volumetric_fog_process(screen_uv, -vertex.z);
diffuse_buffer.rgb = mix(diffuse_buffer.rgb, fog.rgb, fog.a);
specular_buffer.rgb = mix(specular_buffer.rgb, vec3(0.0), fog.a);
}
@ -2747,13 +2748,14 @@ FRAGMENT_SHADER_CODE
//frag_color = vec4(1.0);
#endif //USE_NO_SHADING
if (scene_data.volumetric_fog_enabled) {
vec4 fog = volumetric_fog_process(screen_uv, -vertex.z);
// Draw "fixed" fog before volumetric fog to ensure volumetric fog can appear in front of the sky.
if (scene_data.fog_enabled) {
vec4 fog = fog_process(vertex);
frag_color.rgb = mix(frag_color.rgb, fog.rgb, fog.a);
}
if (scene_data.fog_enabled) {
vec4 fog = fog_process(vertex);
if (scene_data.volumetric_fog_enabled) {
vec4 fog = volumetric_fog_process(screen_uv, -vertex.z);
frag_color.rgb = mix(frag_color.rgb, fog.rgb, fog.a);
}

View file

@ -223,13 +223,14 @@ FRAGMENT_SHADER_CODE
#if !defined(DISABLE_FOG) && !defined(USE_CUBEMAP_PASS)
if (scene_data.volumetric_fog_enabled) {
vec4 fog = volumetric_fog_process(uv);
// Draw "fixed" fog before volumetric fog to ensure volumetric fog can appear in front of the sky.
if (scene_data.fog_enabled) {
vec4 fog = fog_process(cube_normal);
frag_color.rgb = mix(frag_color.rgb, fog.rgb, fog.a);
}
if (scene_data.fog_enabled) {
vec4 fog = fog_process(cube_normal);
if (scene_data.volumetric_fog_enabled) {
vec4 fog = volumetric_fog_process(uv);
frag_color.rgb = mix(frag_color.rgb, fog.rgb, fog.a);
}