diff options
Diffstat (limited to 'servers/rendering/renderer_rd')
4 files changed, 22 insertions, 0 deletions
diff --git a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp index 12f8f6a366..509072bbec 100644 --- a/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp +++ b/servers/rendering/renderer_rd/forward_clustered/scene_shader_forward_clustered.cpp @@ -707,6 +707,7 @@ void SceneShaderForwardClustered::init(const String p_defines) { actions.render_mode_defines["shadow_to_opacity"] = "#define USE_SHADOW_TO_OPACITY\n"; actions.render_mode_defines["unshaded"] = "#define MODE_UNSHADED\n"; actions.render_mode_defines["debug_shadow_splits"] = "#define DEBUG_DRAW_PSSM_SPLITS\n"; + actions.render_mode_defines["fog_disabled"] = "#define FOG_DISABLED\n"; actions.base_texture_binding_index = 1; actions.texture_layout_set = RenderForwardClustered::MATERIAL_UNIFORM_SET; diff --git a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp index 32d2289f75..ffbe7f7e59 100644 --- a/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp +++ b/servers/rendering/renderer_rd/forward_mobile/scene_shader_forward_mobile.cpp @@ -610,6 +610,7 @@ void SceneShaderForwardMobile::init(const String p_defines) { actions.render_mode_defines["shadow_to_opacity"] = "#define USE_SHADOW_TO_OPACITY\n"; actions.render_mode_defines["unshaded"] = "#define MODE_UNSHADED\n"; actions.render_mode_defines["debug_shadow_splits"] = "#define DEBUG_DRAW_PSSM_SPLITS\n"; + actions.render_mode_defines["fog_disabled"] = "#define FOG_DISABLED\n"; actions.base_texture_binding_index = 1; actions.texture_layout_set = RenderForwardMobile::MATERIAL_UNIFORM_SET; diff --git a/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl b/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl index 8f3c704afe..cfba408fe1 100644 --- a/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl +++ b/servers/rendering/renderer_rd/shaders/forward_clustered/scene_forward_clustered.glsl @@ -802,7 +802,9 @@ void fragment_shader(in SceneData scene_data) { float clearcoat_roughness = 0.0; float anisotropy = 0.0; vec2 anisotropy_flow = vec2(1.0, 0.0); +#ifndef FOG_DISABLED vec4 fog = vec4(0.0); +#endif // !FOG_DISABLED #if defined(CUSTOM_RADIANCE_USED) vec4 custom_radiance = vec4(0.0); #endif @@ -962,6 +964,7 @@ void fragment_shader(in SceneData scene_data) { /////////////////////// FOG ////////////////////// #ifndef MODE_RENDER_DEPTH +#ifndef FOG_DISABLED #ifndef CUSTOM_FOG_USED // fog must be processed as early as possible and then packed. // to maximize VGPR usage @@ -997,6 +1000,7 @@ void fragment_shader(in SceneData scene_data) { uint fog_rg = packHalf2x16(fog.rg); uint fog_ba = packHalf2x16(fog.ba); +#endif //!FOG_DISABLED #endif //!MODE_RENDER_DEPTH /////////////////////// DECALS //////////////////////////////// @@ -2250,8 +2254,10 @@ void fragment_shader(in SceneData scene_data) { diffuse_light *= 1.0 - metallic; ambient_light *= 1.0 - metallic; +#ifndef FOG_DISABLED //restore fog fog = vec4(unpackHalf2x16(fog_rg), unpackHalf2x16(fog_ba)); +#endif //!FOG_DISABLED #ifdef MODE_SEPARATE_SPECULAR @@ -2268,8 +2274,10 @@ void fragment_shader(in SceneData scene_data) { specular_buffer = vec4(specular_light, metallic); #endif +#ifndef FOG_DISABLED diffuse_buffer.rgb = mix(diffuse_buffer.rgb, fog.rgb, fog.a); specular_buffer.rgb = mix(specular_buffer.rgb, vec3(0.0), fog.a); +#endif //!FOG_DISABLED #else //MODE_SEPARATE_SPECULAR @@ -2280,8 +2288,10 @@ void fragment_shader(in SceneData scene_data) { //frag_color = vec4(1.0); #endif //USE_NO_SHADING +#ifndef FOG_DISABLED // Draw "fixed" fog before volumetric fog to ensure volumetric fog can appear in front of the sky. frag_color.rgb = mix(frag_color.rgb, fog.rgb, fog.a); +#endif //!FOG_DISABLED #endif //MODE_SEPARATE_SPECULAR diff --git a/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl b/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl index 0283482d76..cdf81bb6ec 100644 --- a/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl +++ b/servers/rendering/renderer_rd/shaders/forward_mobile/scene_forward_mobile.glsl @@ -694,7 +694,9 @@ void main() { float clearcoat_roughness = 0.0; float anisotropy = 0.0; vec2 anisotropy_flow = vec2(1.0, 0.0); +#ifndef FOG_DISABLED vec4 fog = vec4(0.0); +#endif // !FOG_DISABLED #if defined(CUSTOM_RADIANCE_USED) vec4 custom_radiance = vec4(0.0); #endif @@ -860,6 +862,7 @@ void main() { /////////////////////// FOG ////////////////////// #ifndef MODE_RENDER_DEPTH +#ifndef FOG_DISABLED #ifndef CUSTOM_FOG_USED // fog must be processed as early as possible and then packed. // to maximize VGPR usage @@ -874,6 +877,7 @@ void main() { uint fog_rg = packHalf2x16(fog.rg); uint fog_ba = packHalf2x16(fog.ba); +#endif //!FOG_DISABLED #endif //!MODE_RENDER_DEPTH /////////////////////// DECALS //////////////////////////////// @@ -1744,8 +1748,10 @@ void main() { diffuse_light *= 1.0 - metallic; ambient_light *= 1.0 - metallic; +#ifndef FOG_DISABLED //restore fog fog = vec4(unpackHalf2x16(fog_rg), unpackHalf2x16(fog_ba)); +#endif // !FOG_DISABLED #ifdef MODE_MULTIPLE_RENDER_TARGETS @@ -1762,8 +1768,10 @@ void main() { specular_buffer = vec4(specular_light, metallic); #endif // MODE_UNSHADED +#ifndef FOG_DISABLED diffuse_buffer.rgb = mix(diffuse_buffer.rgb, fog.rgb, fog.a); specular_buffer.rgb = mix(specular_buffer.rgb, vec3(0.0), fog.a); +#endif // !FOG_DISABLED #else //MODE_MULTIPLE_RENDER_TARGETS @@ -1773,8 +1781,10 @@ void main() { frag_color = vec4(emission + ambient_light + diffuse_light + specular_light, alpha); #endif // MODE_UNSHADED +#ifndef FOG_DISABLED // Draw "fixed" fog before volumetric fog to ensure volumetric fog can appear in front of the sky. frag_color.rgb = mix(frag_color.rgb, fog.rgb, fog.a); +#endif // !FOG_DISABLED // On mobile we use a UNORM buffer with 10bpp which results in a range from 0.0 - 1.0 resulting in HDR breaking // We divide by sc_luminance_multiplier to support a range from 0.0 - 2.0 both increasing precision on bright and darker images |
