aboutsummaryrefslogtreecommitdiff
path: root/src/client/game.cpp
diff options
context:
space:
mode:
authorx2048 <codeforsmile@gmail.com>2022-11-02 09:09:48 +0100
committerGitHub <noreply@github.com>2022-11-02 09:09:48 +0100
commit9b24041394ecf8210514845372d965f8d65302c9 (patch)
treebdd8f6beea3ae775e3d2dbafa452257bd8f01ff9 /src/client/game.cpp
parentfb3085a2c593e0671e3322fe0e7d0914a052acef (diff)
downloadminetest-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.cpp16
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);
}
}