Skip to content

Commit 70d3727

Browse files
committed
Merge pull request #60178 from Calinou/directional-shadow-normal-bias-split
Use lower shadow normal bias for distant directional shadow splits
2 parents 6940320 + dfc05ca commit 70d3727

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

servers/rendering/renderer_rd/storage_rd/light_storage.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -714,7 +714,9 @@ void LightStorage::update_light_buffers(RenderDataRD *p_render_data, const Paged
714714
light_data.shadow_split_offsets[j] = split;
715715
float bias_scale = light_instance->shadow_transform[j].bias_scale * light_data.soft_shadow_scale;
716716
light_data.shadow_bias[j] = light->param[RS::LIGHT_PARAM_SHADOW_BIAS] / 100.0 * bias_scale;
717-
light_data.shadow_normal_bias[j] = light->param[RS::LIGHT_PARAM_SHADOW_NORMAL_BIAS] * light_instance->shadow_transform[j].shadow_texel_size;
717+
// Use lower shadow normal bias for distant splits, relative to the share taken by the split.
718+
// This helps reduce peter-panning at a distance.
719+
light_data.shadow_normal_bias[j] = light->param[RS::LIGHT_PARAM_SHADOW_NORMAL_BIAS] * light_instance->shadow_transform[j].shadow_texel_size * light_data.shadow_split_offsets[0] / split;
718720
light_data.shadow_transmittance_bias[j] = light->param[RS::LIGHT_PARAM_TRANSMITTANCE_BIAS] / 100.0 * bias_scale;
719721
light_data.shadow_z_range[j] = light_instance->shadow_transform[j].farplane;
720722
light_data.shadow_range_begin[j] = light_instance->shadow_transform[j].range_begin;

0 commit comments

Comments
 (0)