Skip to content

Commit

Permalink
Remove shadow direction quantization, increase shadow update frames i…
Browse files Browse the repository at this point in the history
…nstead (luanti-org#15665)

* This removes shadow direction quantization and defaults shadow_update_frames to 16 instead.
  • Loading branch information
lhofhansl authored Jan 12, 2025
1 parent d044c27 commit d15214a
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 15 deletions.
2 changes: 1 addition & 1 deletion builtin/settingtypes.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1899,7 +1899,7 @@ shadow_poisson_filter (Poisson filtering) bool true
# Minimum value: 1; maximum value: 16
#
# Requires: enable_dynamic_shadows, opengl
shadow_update_frames (Map shadows update frames) int 8 1 16
shadow_update_frames (Map shadows update frames) int 16 1 32

# Set to true to render debugging breakdown of the bloom effect.
# In debug mode, the screen is split into 4 quadrants:
Expand Down
14 changes: 1 addition & 13 deletions src/client/shadows/dynamicshadows.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,6 @@

using m4f = core::matrix4;

static v3f quantizeDirection(v3f direction, float step)
{

float yaw = std::atan2(direction.Z, direction.X);
float pitch = std::asin(direction.Y); // assume look is normalized

yaw = std::floor(yaw / step) * step;
pitch = std::floor(pitch / step) * step;

return v3f(std::cos(yaw)*std::cos(pitch), std::sin(pitch), std::sin(yaw)*std::cos(pitch));
}

void DirectionalLight::createSplitMatrices(const Camera *cam)
{
static const float COS_15_DEG = 0.965926f;
Expand Down Expand Up @@ -74,7 +62,7 @@ void DirectionalLight::createSplitMatrices(const Camera *cam)
v3f boundVec = (cam_pos_scene + farCorner * sfFar) - center_scene;
float radius = boundVec.getLength();
float length = radius * 3.0f;
v3f eye_displacement = quantizeDirection(direction, M_PI / 2880 /*15 seconds*/) * length;
v3f eye_displacement = direction * length;

// we must compute the viewmat with the position - the camera offset
// but the future_frustum position must be the actual world position
Expand Down
2 changes: 1 addition & 1 deletion src/defaultsettings.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -341,7 +341,7 @@ void set_default_settings()
settings->setDefault("shadow_map_color", "false");
settings->setDefault("shadow_filters", "1");
settings->setDefault("shadow_poisson_filter", "true");
settings->setDefault("shadow_update_frames", "8");
settings->setDefault("shadow_update_frames", "16");
settings->setDefault("shadow_soft_radius", "5.0");
settings->setDefault("shadow_sky_body_orbit_tilt", "0.0");

Expand Down

0 comments on commit d15214a

Please sign in to comment.