diff options
author | x2048 <codeforsmile@gmail.com> | 2022-11-02 09:09:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-11-02 09:09:48 +0100 |
commit | 9b24041394ecf8210514845372d965f8d65302c9 (patch) | |
tree | bdd8f6beea3ae775e3d2dbafa452257bd8f01ff9 /src/client/game.cpp | |
parent | fb3085a2c593e0671e3322fe0e7d0914a052acef (diff) | |
download | minetest-9b24041394ecf8210514845372d965f8d65302c9.tar.xz |
Improve bloom effect (#12916)
* Remove the built-in exposure factor of 2.5
* Add physics-based bloom (https://learnopengl.com/Guest-Articles/2022/Phys.-Based-Bloom)
* Add luminance scaling for bloom layer to simulate HDR
* Add setting to control bloom strength
Diffstat (limited to 'src/client/game.cpp')
-rw-r--r-- | src/client/game.cpp | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/client/game.cpp b/src/client/game.cpp index 5eb185f86..2f97b9b0c 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -432,6 +432,8 @@ class GameGlobalShaderConstantSetter : public IShaderConstantSetter bool m_bloom_enabled; CachedPixelShaderSetting<float> m_bloom_intensity_pixel; float m_bloom_intensity; + CachedPixelShaderSetting<float> m_bloom_strength_pixel; + float m_bloom_strength; CachedPixelShaderSetting<float> m_bloom_radius_pixel; float m_bloom_radius; @@ -444,8 +446,10 @@ public: m_user_exposure_factor = g_settings->getFloat("exposure_factor", 0.1f, 10.0f); if (name == "bloom_intensity") m_bloom_intensity = g_settings->getFloat("bloom_intensity", 0.01f, 1.0f); + if (name == "bloom_strength_factor") + m_bloom_strength = RenderingEngine::BASE_BLOOM_STRENGTH * g_settings->getFloat("bloom_strength_factor", 0.1f, 10.0f); if (name == "bloom_radius") - m_bloom_radius = g_settings->getFloat("bloom_radius", 1.0f, 64.0f); + m_bloom_radius = g_settings->getFloat("bloom_radius", 0.1f, 8.0f); } static void settingsCallback(const std::string &name, void *userdata) @@ -479,17 +483,20 @@ public: m_texel_size0("texelSize0"), m_exposure_factor_pixel("exposureFactor"), m_bloom_intensity_pixel("bloomIntensity"), + m_bloom_strength_pixel("bloomStrength"), m_bloom_radius_pixel("bloomRadius") { g_settings->registerChangedCallback("enable_fog", settingsCallback, this); g_settings->registerChangedCallback("exposure_factor", settingsCallback, this); g_settings->registerChangedCallback("bloom_intensity", settingsCallback, this); + g_settings->registerChangedCallback("bloom_strength_factor", settingsCallback, this); g_settings->registerChangedCallback("bloom_radius", settingsCallback, this); m_fog_enabled = g_settings->getBool("enable_fog"); m_user_exposure_factor = g_settings->getFloat("exposure_factor", 0.1f, 10.0f); m_bloom_enabled = g_settings->getBool("enable_bloom"); m_bloom_intensity = g_settings->getFloat("bloom_intensity", 0.01f, 1.0f); - m_bloom_radius = g_settings->getFloat("bloom_radius", 1.0f, 64.0f); + m_bloom_strength = RenderingEngine::BASE_BLOOM_STRENGTH * g_settings->getFloat("bloom_strength_factor", 0.1f, 10.0f); + m_bloom_radius = g_settings->getFloat("bloom_radius", 0.1f, 8.0f); } ~GameGlobalShaderConstantSetter() @@ -567,14 +574,15 @@ public: m_texel_size0.set(m_texel_size0_values.data(), services); - float exposure_factor = RenderingEngine::DEFAULT_EXPOSURE_FACTOR * m_user_exposure_factor; + float exposure_factor = m_user_exposure_factor; if (std::isnan(exposure_factor)) - exposure_factor = RenderingEngine::DEFAULT_EXPOSURE_FACTOR; + exposure_factor = 1.0f; m_exposure_factor_pixel.set(&exposure_factor, services); if (m_bloom_enabled) { m_bloom_intensity_pixel.set(&m_bloom_intensity, services); m_bloom_radius_pixel.set(&m_bloom_radius, services); + m_bloom_strength_pixel.set(&m_bloom_strength, services); } } |