Use lower shadow normal bias for distant directional shadow splits
This reduces the visual discrepancy between shadow splits when Normal Bias is greater than 0. Shadow acne at a distance may be slightly more present, but if the bias and normal bias values are tuned to avoid acne up close, acne will usually not be present in distant splits.
This commit is contained in:
parent
1b7b009674
commit
dfc05caf06
1 changed files with 3 additions and 1 deletions
|
|
@ -714,7 +714,9 @@ void LightStorage::update_light_buffers(RenderDataRD *p_render_data, const Paged
|
|||
light_data.shadow_split_offsets[j] = split;
|
||||
float bias_scale = light_instance->shadow_transform[j].bias_scale * light_data.soft_shadow_scale;
|
||||
light_data.shadow_bias[j] = light->param[RS::LIGHT_PARAM_SHADOW_BIAS] / 100.0 * bias_scale;
|
||||
light_data.shadow_normal_bias[j] = light->param[RS::LIGHT_PARAM_SHADOW_NORMAL_BIAS] * light_instance->shadow_transform[j].shadow_texel_size;
|
||||
// Use lower shadow normal bias for distant splits, relative to the share taken by the split.
|
||||
// This helps reduce peter-panning at a distance.
|
||||
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;
|
||||
light_data.shadow_transmittance_bias[j] = light->param[RS::LIGHT_PARAM_TRANSMITTANCE_BIAS] / 100.0 * bias_scale;
|
||||
light_data.shadow_z_range[j] = light_instance->shadow_transform[j].farplane;
|
||||
light_data.shadow_range_begin[j] = light_instance->shadow_transform[j].range_begin;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue