Eevee: Shadows: Only tag as shadow caster if a shadow is cast.
This leads to great improvement if the scene have moving objects without shadows (shadows disabled in the material panel).
This commit is contained in:
@@ -140,9 +140,9 @@ static void eevee_cache_populate(void *vedata, Object *ob)
|
||||
}
|
||||
|
||||
if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT)) {
|
||||
EEVEE_materials_cache_populate(vedata, sldata, ob);
|
||||
bool cast_shadow;
|
||||
|
||||
const bool cast_shadow = true;
|
||||
EEVEE_materials_cache_populate(vedata, sldata, ob, &cast_shadow);
|
||||
|
||||
if (cast_shadow) {
|
||||
EEVEE_lights_cache_shcaster_object_add(sldata, ob);
|
||||
|
||||
@@ -1289,7 +1289,7 @@ static void material_transparent(
|
||||
}
|
||||
}
|
||||
|
||||
void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob)
|
||||
void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob, bool *cast_shadow)
|
||||
{
|
||||
EEVEE_PassList *psl = vedata->psl;
|
||||
EEVEE_StorageList *stl = vedata->stl;
|
||||
@@ -1418,14 +1418,17 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sld
|
||||
switch (ma->blend_shadow) {
|
||||
case MA_BS_SOLID:
|
||||
EEVEE_lights_cache_shcaster_add(sldata, stl, mat_geom[i], ob);
|
||||
*cast_shadow = true;
|
||||
break;
|
||||
case MA_BS_CLIP:
|
||||
gpumat = EEVEE_material_mesh_depth_get(scene, ma, false, true);
|
||||
EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, &ma->alpha_threshold);
|
||||
*cast_shadow = true;
|
||||
break;
|
||||
case MA_BS_HASHED:
|
||||
gpumat = EEVEE_material_mesh_depth_get(scene, ma, true, true);
|
||||
EEVEE_lights_cache_shcaster_material_add(sldata, psl, gpumat, mat_geom[i], ob, NULL);
|
||||
*cast_shadow = true;
|
||||
break;
|
||||
case MA_BS_NONE:
|
||||
default:
|
||||
@@ -1434,6 +1437,7 @@ void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sld
|
||||
}
|
||||
else {
|
||||
EEVEE_lights_cache_shcaster_add(sldata, stl, mat_geom[i], ob);
|
||||
*cast_shadow = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -804,7 +804,7 @@ EEVEE_LampEngineData *EEVEE_lamp_data_ensure(Object *ob);
|
||||
struct GPUTexture *EEVEE_materials_get_util_tex(void); /* XXX */
|
||||
void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, EEVEE_FramebufferList *fbl);
|
||||
void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
|
||||
void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob);
|
||||
void EEVEE_materials_cache_populate(EEVEE_Data *vedata, EEVEE_ViewLayerData *sldata, Object *ob, bool *cast_shadow);
|
||||
void EEVEE_materials_cache_finish(EEVEE_Data *vedata);
|
||||
struct GPUMaterial *EEVEE_material_world_lightprobe_get(struct Scene *scene, struct World *wo);
|
||||
struct GPUMaterial *EEVEE_material_world_background_get(struct Scene *scene, struct World *wo);
|
||||
|
||||
@@ -149,9 +149,9 @@ void EEVEE_render_cache(
|
||||
}
|
||||
|
||||
if (ELEM(ob->type, OB_MESH, OB_CURVE, OB_SURF, OB_FONT)) {
|
||||
EEVEE_materials_cache_populate(vedata, sldata, ob);
|
||||
bool cast_shadow;
|
||||
|
||||
const bool cast_shadow = true;
|
||||
EEVEE_materials_cache_populate(vedata, sldata, ob, &cast_shadow);
|
||||
|
||||
if (cast_shadow) {
|
||||
EEVEE_lights_cache_shcaster_object_add(sldata, ob);
|
||||
|
||||
Reference in New Issue
Block a user