diff --git a/res/layouts/pages/settings.xml b/res/layouts/pages/settings.xml index 68a71aa04..cff91d395 100644 --- a/res/layouts/pages/settings.xml +++ b/res/layouts/pages/settings.xml @@ -1,4 +1,4 @@ - + diff --git a/res/layouts/pages/settings_graphics.xml.lua b/res/layouts/pages/settings_graphics.xml.lua index 3b7f7b13a..806f48d0c 100644 --- a/res/layouts/pages/settings_graphics.xml.lua +++ b/res/layouts/pages/settings_graphics.xml.lua @@ -39,11 +39,12 @@ function on_open() create_setting("chunks.load-distance", "Load Distance", 1) create_setting("chunks.load-speed", "Load Speed", 1) create_setting("graphics.fog-curve", "Fog Curve", 0.1) - + 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") create_checkbox("graphics.advanced-render", "Advanced render", "graphics.advanced-render.tooltip") create_setting("graphics.ssao", "SSAO", 1, "", "graphics.ssao.tooltip") create_setting("graphics.shadows-quality", "Shadows quality", 1) + create_setting("graphics.clouds-quality", "Clouds quality", 1) end diff --git a/src/graphics/render/CloudsRenderer.cpp b/src/graphics/render/CloudsRenderer.cpp index 71fc4496f..eea8240be 100755 --- a/src/graphics/render/CloudsRenderer.cpp +++ b/src/graphics/render/CloudsRenderer.cpp @@ -229,7 +229,8 @@ void CloudsRenderer::draw( const Weather& weather, float timer, float fogFactor, - const Camera& camera + const Camera& camera, + int quality ) { float clouds = weather.clouds(); shader.uniform4f( @@ -247,7 +248,7 @@ void CloudsRenderer::draw( int cellZ = glm::floor(camera.position.z / totalDepth + 0.5f); float speed = 4.0f; - for (int i = 0; i < 2; i++) { + for (int i = 0; i < std::min(quality, testMeshes.size()); i++) { float speedX = glm::sin(i * 0.3f + 0.4f) * speed / (i + 1); float speedZ = -glm::cos(i * 0.3f + 0.4f) * speed / (i + 1); for (int x = -2; x <= 2; x++) { diff --git a/src/graphics/render/CloudsRenderer.hpp b/src/graphics/render/CloudsRenderer.hpp index 84c8e1c2b..d5f379749 100755 --- a/src/graphics/render/CloudsRenderer.hpp +++ b/src/graphics/render/CloudsRenderer.hpp @@ -18,7 +18,8 @@ public: const Weather& weather, float timer, float fogFactor, - const Camera& camera + const Camera& camera, + int quality ); private: std::array>, 2> testMeshes; diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 1a7e8f055..aef2b8674 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -215,8 +215,13 @@ void WorldRenderer::renderOpaque( chunksRenderer->drawChunks(camera, shader); blockWraps->draw(ctx, player); - setupWorldShader(cloudsShader, camera, settings, fogFactor); - cloudsRenderer->draw(cloudsShader, weather, timer, fogFactor, camera); + int cloudsQuality = settings.graphics.cloudsQuality.get(); + if (cloudsQuality > 0) { + setupWorldShader(cloudsShader, camera, settings, fogFactor); + cloudsRenderer->draw( + cloudsShader, weather, timer, fogFactor, camera, cloudsQuality + ); + } if (hudVisible) { renderLines(camera, linesShader, ctx); diff --git a/src/io/settings_io.cpp b/src/io/settings_io.cpp index 76285d733..27e08c93f 100644 --- a/src/io/settings_io.cpp +++ b/src/io/settings_io.cpp @@ -82,6 +82,7 @@ SettingsHandler::SettingsHandler(EngineSettings& settings) { builder.add("shadows-quality", &settings.graphics.shadowsQuality); builder.add("dense-render-distance", &settings.graphics.denseRenderDistance); builder.add("soft-lighting", &settings.graphics.softLighting); + builder.add("clouds-quality", &settings.graphics.cloudsQuality); builder.addSection("ui"); builder.add("language", &settings.ui.language); diff --git a/src/settings.hpp b/src/settings.hpp index c98690023..171db217e 100644 --- a/src/settings.hpp +++ b/src/settings.hpp @@ -91,6 +91,8 @@ struct GraphicsSettings { IntegerSetting denseRenderDistance {56, 0, 10'000}; /// @brief Soft lighting for blocks FlagSetting softLighting {true}; + /// @brief Clouds quality level + IntegerSetting cloudsQuality {2, 0, 2}; }; struct PathfindingSettings {