Commit: 1cbfe0463879fb3dde7e10f151b5ef24008bd211 Author: Philipp Oeser Date: Tue Sep 20 12:11:56 2022 +0200 Branches: master https://developer.blender.org/rB1cbfe0463879fb3dde7e10f151b5ef24008bd211
Fix: GPencil animated layer transforms evaluate wrong when identity Due to (optimization) checks in in `BKE_gpencil_prepare_eval_data` & `BKE_gpencil_update_layer_transforms`, updates were skipped if animation reached exact identity transforms. Now check if the matrix has changed additionally to gain proper updates. Unsure if this is the cheapest way to check for the animated state of layer transforms tbh, but I see similar checks elsewhere. Fixes T101164. Maniphest Tasks: T101164 Differential Revision: https://developer.blender.org/D16018 =================================================================== M source/blender/blenkernel/intern/gpencil.c M source/blender/blenkernel/intern/gpencil_modifier.c =================================================================== diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 8d6f8a06e8c..bfffd44e73d 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -2785,11 +2785,14 @@ void BKE_gpencil_update_layer_transforms(const Depsgraph *depsgraph, Object *ob) changed = !equals_m4m4(gpl->inverse, cur_mat); } - /* Calc local layer transform. */ + /* Calc local layer transform. Early out if we have non-animated zero transforms. */ bool transformed = ((!is_zero_v3(gpl->location)) || (!is_zero_v3(gpl->rotation)) || (!is_one_v3(gpl->scale))); + float tmp_mat[4][4]; + loc_eul_size_to_mat4(tmp_mat, gpl->location, gpl->rotation, gpl->scale); + transformed |= !equals_m4m4(gpl->layer_mat, tmp_mat); if (transformed) { - loc_eul_size_to_mat4(gpl->layer_mat, gpl->location, gpl->rotation, gpl->scale); + copy_m4_m4(gpl->layer_mat, tmp_mat); } /* Continue if no transformations are applied to this layer. */ diff --git a/source/blender/blenkernel/intern/gpencil_modifier.c b/source/blender/blenkernel/intern/gpencil_modifier.c index 8361d8e1849..70b8717abbe 100644 --- a/source/blender/blenkernel/intern/gpencil_modifier.c +++ b/source/blender/blenkernel/intern/gpencil_modifier.c @@ -720,7 +720,14 @@ void BKE_gpencil_prepare_eval_data(Depsgraph *depsgraph, Scene *scene, Object *o do_parent = true; break; } - if ((!is_zero_v3(gpl->location)) || (!is_zero_v3(gpl->rotation)) || (!is_one_v3(gpl->scale))) { + + /* Only do layer transformations for non-zero or animated transforms. */ + bool transformed = ((!is_zero_v3(gpl->location)) || (!is_zero_v3(gpl->rotation)) || + (!is_one_v3(gpl->scale))); + float tmp_mat[4][4]; + loc_eul_size_to_mat4(tmp_mat, gpl->location, gpl->rotation, gpl->scale); + transformed |= !equals_m4m4(gpl->layer_mat, tmp_mat); + if (transformed) { do_transform = true; break; } _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
