diff --git a/res/layouts/pages/settings_graphics.xml b/res/layouts/pages/settings_graphics.xml index 2aa3aeca3..7567d5c8d 100644 --- a/res/layouts/pages/settings_graphics.xml +++ b/res/layouts/pages/settings_graphics.xml @@ -1,2 +1,2 @@ - + diff --git a/res/layouts/pages/settings_graphics.xml.lua b/res/layouts/pages/settings_graphics.xml.lua index 6a4596a04..ed249b0f3 100644 --- a/res/layouts/pages/settings_graphics.xml.lua +++ b/res/layouts/pages/settings_graphics.xml.lua @@ -40,6 +40,7 @@ function on_open() create_trackbar_setting("chunks.load-speed", "Load Speed", 1) create_trackbar_setting("graphics.fog-curve", "Fog Curve", 0.1) + create_checkbox("graphics.enable-fog", "Fog", "graphics.enable-fog.tooltip") create_checkbox("graphics.backlight", "Backlight", "graphics.backlight.tooltip") create_checkbox("graphics.soft-lighting", "Soft lighting", "graphics.soft-lighting.tooltip") create_checkbox("graphics.dense-render", "Dense blocks render", "graphics.dense-render.tooltip") 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/res/texts/en_US.txt b/res/texts/en_US.txt index ff44ec754..294758a7e 100644 --- a/res/texts/en_US.txt +++ b/res/texts/en_US.txt @@ -19,6 +19,7 @@ devtools.output=Output # Tooltips audio.acoustic-effects.tooltip=Acoustic effects may not be supported by your system audio.recording-enabled.tooltip=Enables audio recording features +graphics.enable-fog.tooltip=Enables fog graphics.gamma.tooltip=Lighting brightness curve graphics.backlight.tooltip=Backlight to prevent total darkness graphics.dense-render.tooltip=Enables transparency in blocks like leaves diff --git a/res/texts/ru_RU.txt b/res/texts/ru_RU.txt index ed3bb9686..295d467af 100644 --- a/res/texts/ru_RU.txt +++ b/res/texts/ru_RU.txt @@ -40,6 +40,7 @@ pack.remove-confirm=Удалить весь поставляемый паком/ # Подсказки audio.acoustic-effects.tooltip=Акустические эффекты могут не поддерживаться системой audio.recording-enabled.tooltip=Включает функции записи звука +graphics.enable-fog.tooltip=Отображать туман / дымку graphics.gamma.tooltip=Кривая яркости освещения graphics.backlight.tooltip=Подсветка, предотвращающая полную темноту graphics.dense-render.tooltip=Включает прозрачность блоков, таких как листья @@ -89,6 +90,7 @@ settings.Soft lighting=Мягкое освещение settings.Camera Shaking=Тряска Камеры settings.Camera Inertia=Инерция Камеры settings.Camera FOV Effects=Эффекты поля зрения +settings.Fog=Туман settings.Fog Curve=Кривая Тумана settings.FOV=Поле Зрения settings.Fullscreen=Полный экран 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};