From e467c85adc7748091790b66fe5e7dbaeca4416a1 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Sat, 26 Sep 2026 19:13:08 +0300 Subject: [PATCH] add 'enable-fog' setting --- res/shaders/lib/fog.glsl | 4 ++++ src/graphics/render/WorldRenderer.cpp | 3 +++ src/io/settings_io.cpp | 1 + src/settings.hpp | 2 ++ 4 files changed, 10 insertions(+) diff --git a/res/shaders/lib/fog.glsl b/res/shaders/lib/fog.glsl index 597380bb6..9d20317f7 100644 --- a/res/shaders/lib/fog.glsl +++ b/res/shaders/lib/fog.glsl @@ -8,12 +8,16 @@ uniform float u_weatherFogDencity; uniform float u_weatherFogCurve; float calc_fog(float depth, float fogFactor, float fogCurve) { +#ifdef ENABLE_FOG return min( 1.0, max(pow(depth * u_fogFactor * fogFactor, u_fogCurve * fogCurve), min(pow(depth * u_weatherFogDencity, u_weatherFogCurve), u_weatherFogOpacity)) ); +#else + return 0.0; +#endif } float calc_fog(float depth) { diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index f3b793c0a..27dd4dcdd 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -135,6 +135,7 @@ WorldRenderer::WorldRenderer( debugLines = std::make_unique(level); cloudsRenderer = std::make_unique(); + keepAlive(observe_setting(settings.graphics.enableFog, dirtySettings)); keepAlive(observe_setting(settings.graphics.advancedRender, dirtySettings)); keepAlive(observe_setting(settings.graphics.shadowsQuality, dirtySettings)); keepAlive(observe_setting(settings.graphics.ssao, dirtySettings)); @@ -156,10 +157,12 @@ void WorldRenderer::refreshSettings() { gbufferPipeline = graphics.advancedRender.get(); int shadowsQuality = graphics.shadowsQuality.get() * gbufferPipeline; + bool enableFog = graphics.enableFog.get(); shadowMapping->setQuality(shadowsQuality); std::vector defines; if (shadowsQuality != 0) defines.emplace_back("ENABLE_SHADOWS"); + if (enableFog) defines.emplace_back("ENABLE_FOG"); if (graphics.ssao.get()) defines.emplace_back("ENABLE_SSAO"); if (gbufferPipeline) defines.emplace_back("ADVANCED_RENDER"); diff --git a/src/io/settings_io.cpp b/src/io/settings_io.cpp index 8e8b0a2dc..e72cb009d 100644 --- a/src/io/settings_io.cpp +++ b/src/io/settings_io.cpp @@ -69,6 +69,7 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) { builder.add("padding", &settings.chunks.padding); builder.addSection("graphics"); + builder.add("enable-fog", &settings.graphics.enableFog); builder.add("fog-curve", &settings.graphics.fogCurve); builder.add("backlight", &settings.graphics.backlight); builder.add("dense-render", &settings.graphics.denseRender); diff --git a/src/settings.hpp b/src/settings.hpp index bc83ba345..320d0fc8d 100644 --- a/src/settings.hpp +++ b/src/settings.hpp @@ -63,6 +63,8 @@ struct CameraSettings { }; struct GraphicsSettings { + /// @brief Enable fog + FlagSetting enableFog {true}; /// @brief Fog opacity is calculated as `pow(depth*k, fogCurve)` where k depends on chunksLoadDistance. /// 1.0 is linear, 2.0 is quadratic NumberSetting fogCurve {1.0f, 1.0f, 6.0f};