diff options
Diffstat (limited to 'intern/cycles/blender/blender_light.cpp')
-rw-r--r-- | intern/cycles/blender/blender_light.cpp | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/intern/cycles/blender/blender_light.cpp b/intern/cycles/blender/blender_light.cpp index ff4ecc5a3f9..ae353b32633 100644 --- a/intern/cycles/blender/blender_light.cpp +++ b/intern/cycles/blender/blender_light.cpp @@ -34,12 +34,17 @@ void BlenderSync::sync_light(BL::Object &b_parent, bool *use_portal) { /* test if we need to sync */ - Light *light; ObjectKey key(b_parent, persistent_id, b_ob_instance, false); BL::Light b_light(b_ob.data()); + Light *light = light_map.find(key); + + /* Check if the transform was modified, in case a linked collection is moved we do not get a + * specific depsgraph update (T88515). This also mimics the behavior for Objects. */ + const bool tfm_updated = (light && light->get_tfm() != tfm); + /* Update if either object or light data changed. */ - if (!light_map.add_or_update(&light, b_ob, b_parent, key)) { + if (!tfm_updated && !light_map.add_or_update(&light, b_ob, b_parent, key)) { Shader *shader; if (!shader_map.add_or_update(&shader, b_light)) { if (light->get_is_portal()) @@ -82,6 +87,7 @@ void BlenderSync::sync_light(BL::Object &b_parent, light->set_axisu(transform_get_column(&tfm, 0)); light->set_axisv(transform_get_column(&tfm, 1)); light->set_sizeu(b_area_light.size()); + light->set_spread(b_area_light.spread()); switch (b_area_light.shape()) { case BL::AreaLight::shape_SQUARE: light->set_sizev(light->get_sizeu()); |