diff options
4 files changed, 14 insertions, 2 deletions
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c index dd67a4d72cb..b14ffa9d0b0 100644 --- a/source/blender/blenloader/intern/versioning_280.c +++ b/source/blender/blenloader/intern/versioning_280.c @@ -4461,5 +4461,14 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain) } } } + + /* EEVEE: Cascade shadow bias fix */ + LISTBASE_FOREACH (Light *, light, &bmain->lights) { + if (light->type == LA_SUN) { + /* Should be 0.0004 but for practical reason we make it bigger. + * Correct factor is scene dependent. */ + light->bias *= 0.002f; + } + } } } diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h index 8ba68589cbd..e39cb430fe5 100644 --- a/source/blender/draw/engines/eevee/eevee_private.h +++ b/source/blender/draw/engines/eevee/eevee_private.h @@ -398,6 +398,7 @@ typedef struct EEVEE_ShadowCascadeRender { float projmat[MAX_CASCADE_NUM][4][4]; float viewmat[4][4], viewinv[4][4]; float radius[MAX_CASCADE_NUM]; + float original_bias; float cascade_max_dist; float cascade_exponent; float cascade_fade; diff --git a/source/blender/draw/engines/eevee/eevee_shadows_cascade.c b/source/blender/draw/engines/eevee/eevee_shadows_cascade.c index b2dc8103df2..32045e12a1c 100644 --- a/source/blender/draw/engines/eevee/eevee_shadows_cascade.c +++ b/source/blender/draw/engines/eevee/eevee_shadows_cascade.c @@ -40,7 +40,6 @@ void EEVEE_shadows_cascade_add(EEVEE_LightsInfo *linfo, EEVEE_Light *evli, Objec EEVEE_ShadowCascade *csm_data = linfo->shadow_cascade_data + linfo->cascade_len; EEVEE_ShadowCascadeRender *csm_render = linfo->shadow_cascade_render + linfo->cascade_len; - sh_data->bias = max_ff(la->bias * 0.00002f, 0.0f); eevee_contact_shadow_setup(la, sh_data); linfo->shadow_cascade_light_indices[linfo->cascade_len] = linfo->num_light; @@ -51,6 +50,7 @@ void EEVEE_shadows_cascade_add(EEVEE_LightsInfo *linfo, EEVEE_Light *evli, Objec csm_render->cascade_count = la->cascade_count; csm_render->cascade_exponent = la->cascade_exponent; csm_render->cascade_max_dist = la->cascade_max_dist; + csm_render->original_bias = max_ff(la->bias, 0.0f); linfo->num_cascade_layer += la->cascade_count; } @@ -380,6 +380,8 @@ static void eevee_shadow_cascade_setup(EEVEE_LightsInfo *linfo, #endif } + /* Bias is in clipspace, divide by range. */ + shdw_data->bias = csm_render->original_bias * 0.05f / fabsf(sh_far - sh_near); shdw_data->near = sh_near; shdw_data->far = sh_far; } diff --git a/source/blender/makesrna/intern/rna_light.c b/source/blender/makesrna/intern/rna_light.c index ecee413a8e0..988504db2f9 100644 --- a/source/blender/makesrna/intern/rna_light.c +++ b/source/blender/makesrna/intern/rna_light.c @@ -294,7 +294,7 @@ static void rna_def_light_shadow(StructRNA *srna, bool sun) prop = RNA_def_property(srna, "shadow_buffer_bias", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "bias"); - RNA_def_property_range(prop, 0.001f, 9999.0f); + RNA_def_property_range(prop, 0.0f, FLT_MAX); RNA_def_property_ui_range(prop, 0.001f, 5.0f, 1.0, 3); RNA_def_property_ui_text(prop, "Shadow Buffer Bias", "Bias for reducing self shadowing"); RNA_def_property_update(prop, 0, "rna_Light_update"); |