aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorx2048 <codeforsmile@gmail.com>2022-05-21 16:49:30 +0200
committerGitHub <noreply@github.com>2022-05-21 16:49:30 +0200
commitdc45b85a543b4c8ad72f69a554ecfe7f0a60c533 (patch)
tree348a20f17c19d8e886ca669e339a7f4875aa7778 /src
parenta4ef62f5b215fe0f23e3e50672f1538854db4ed9 (diff)
downloadminetest-dc45b85a543b4c8ad72f69a554ecfe7f0a60c533.tar.gz
minetest-dc45b85a543b4c8ad72f69a554ecfe7f0a60c533.tar.bz2
minetest-dc45b85a543b4c8ad72f69a554ecfe7f0a60c533.zip
Improve shadow filters (#12195)
* Rewrite shadow filtering for the new distortion * Calculate penumbra radius using a single sample * Avoid peter-panning effect due to filtering of short shadows * Add adaptive filter quality for soft shadows * Avoid sharp shadows on surfaces without normals (e.g. plants) * Increase default and maximum soft shadow radius * Make line numbers in shader errors match the code
Diffstat (limited to 'src')
-rw-r--r--src/client/clientmap.cpp2
-rw-r--r--src/client/shader.cpp2
-rw-r--r--src/client/shadows/dynamicshadowsrender.cpp1
-rw-r--r--src/defaultsettings.cpp2
4 files changed, 6 insertions, 1 deletions
diff --git a/src/client/clientmap.cpp b/src/client/clientmap.cpp
index 10967c0cb..46cb115aa 100644
--- a/src/client/clientmap.cpp
+++ b/src/client/clientmap.cpp
@@ -489,6 +489,8 @@ void ClientMap::renderMap(video::IVideoDriver* driver, s32 pass)
// Do not enable filter on shadow texture to avoid visual artifacts
// with colored shadows.
// Filtering is done in shader code anyway
+ layer.BilinearFilter = false;
+ layer.AnisotropicFilter = false;
layer.TrilinearFilter = false;
}
driver->setMaterial(material);
diff --git a/src/client/shader.cpp b/src/client/shader.cpp
index bbb872761..009a4b3d7 100644
--- a/src/client/shader.cpp
+++ b/src/client/shader.cpp
@@ -771,6 +771,8 @@ ShaderInfo ShaderSource::generateShader(const std::string &name,
shaders_header << "#define SOFTSHADOWRADIUS " << shadow_soft_radius << "\n";
}
+ shaders_header << "#line 0\n"; // reset the line counter for meaningful diagnostics
+
std::string common_header = shaders_header.str();
std::string vertex_shader = m_sourcecache.getOrLoad(name, "opengl_vertex.glsl");
diff --git a/src/client/shadows/dynamicshadowsrender.cpp b/src/client/shadows/dynamicshadowsrender.cpp
index 07dc6daf2..c13cfe252 100644
--- a/src/client/shadows/dynamicshadowsrender.cpp
+++ b/src/client/shadows/dynamicshadowsrender.cpp
@@ -670,6 +670,7 @@ std::string ShadowRenderer::readShaderFile(const std::string &path)
std::string prefix;
if (m_shadow_map_colored)
prefix.append("#define COLORED_SHADOWS 1\n");
+ prefix.append("#line 0\n");
std::string content;
fs::ReadFile(path, content);
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 11d52efd3..0087f8d48 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -274,7 +274,7 @@ void set_default_settings()
settings->setDefault("shadow_filters", "1");
settings->setDefault("shadow_poisson_filter", "true");
settings->setDefault("shadow_update_frames", "8");
- settings->setDefault("shadow_soft_radius", "1.0");
+ settings->setDefault("shadow_soft_radius", "5.0");
settings->setDefault("shadow_sky_body_orbit_tilt", "0.0");
// Input