Modifiers: fix bunch of missing 'self transform' deg relations.
When a modifier depends on some other object's position, then it also depends in its own position, this has to be also told to depsgraph. Fixes several modifiers where moving target would update the modifier, while moving modified object itself would not.
This commit is contained in:
parent
0ebb632f69
commit
9d4129eee6
Notes:
blender-bot
2023-02-14 00:44:02 +01:00
Referenced by commit a1747b058d
, Fix T71259: Array Modifier Performance is slow
|
@ -107,6 +107,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
if (amd->offset_ob != NULL) {
|
||||
DEG_add_object_relation(ctx->node, amd->offset_ob, DEG_OB_COMP_TRANSFORM, "Array Modifier Offset");
|
||||
}
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Array Modifier");
|
||||
}
|
||||
|
||||
BLI_INLINE float sum_v3(const float v[3])
|
||||
|
|
|
@ -132,6 +132,11 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
CustomDataMask mask = BKE_object_data_transfer_dttypes_to_cdmask(dtmd->data_types);
|
||||
|
||||
DEG_add_object_relation_with_customdata(ctx->node, dtmd->ob_source, DEG_OB_COMP_GEOMETRY, mask, "DataTransfer Modifier");
|
||||
|
||||
if (dtmd->flags & MOD_DATATRANSFER_OBSRC_TRANSFORM) {
|
||||
DEG_add_object_relation(ctx->node, dtmd->ob_source, DEG_OB_COMP_TRANSFORM, "DataTransfer Modifier");
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "DataTransfer Modifier");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -148,6 +148,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
{
|
||||
DisplaceModifierData *dmd = (DisplaceModifierData *)md;
|
||||
if (dmd->map_object != NULL && dmd->texmapping == MOD_DISP_MAP_OBJECT) {
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Displace Modifier");
|
||||
DEG_add_object_relation(ctx->node, dmd->map_object, DEG_OB_COMP_TRANSFORM, "Displace Modifier");
|
||||
}
|
||||
if (dmd->texmapping == MOD_DISP_MAP_GLOBAL ||
|
||||
|
|
|
@ -81,6 +81,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
/* TODO(sergey): Is it a proper relation here? */
|
||||
DEG_add_object_relation(ctx->node, mmd->ob_arm, DEG_OB_COMP_TRANSFORM, "Mask Modifier");
|
||||
arm->flag |= ARM_HAS_VIZ_DEPS;
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Mask Modifier");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -536,6 +536,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
NormalEditModifierData *enmd = (NormalEditModifierData *) md;
|
||||
if (enmd->target) {
|
||||
DEG_add_object_relation(ctx->node, enmd->target, DEG_OB_COMP_TRANSFORM, "NormalEdit Modifier");
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "NormalEdit Modifier");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1116,6 +1116,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
ScrewModifierData *ltmd = (ScrewModifierData *)md;
|
||||
if (ltmd->ob_axis != NULL) {
|
||||
DEG_add_object_relation(ctx->node, ltmd->ob_axis, DEG_OB_COMP_TRANSFORM, "Screw Modifier");
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Screw Modifier");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -376,6 +376,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
SimpleDeformModifierData *smd = (SimpleDeformModifierData *)md;
|
||||
if (smd->origin != NULL) {
|
||||
DEG_add_object_relation(ctx->node, smd->origin, DEG_OB_COMP_TRANSFORM, "SimpleDeform Modifier");
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "SimpleDeform Modifier");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -104,12 +104,16 @@ static void foreachIDLink(
|
|||
static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
|
||||
{
|
||||
UVProjectModifierData *umd = (UVProjectModifierData *)md;
|
||||
int i;
|
||||
for (i = 0; i < umd->num_projectors; ++i) {
|
||||
bool do_add_own_transform = false;
|
||||
for (int i = 0; i < umd->num_projectors; ++i) {
|
||||
if (umd->projectors[i] != NULL) {
|
||||
DEG_add_object_relation(ctx->node, umd->projectors[i], DEG_OB_COMP_TRANSFORM, "UV Project Modifier");
|
||||
do_add_own_transform = true;
|
||||
}
|
||||
}
|
||||
if (do_add_own_transform) {
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "UV Project Modifier");
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct Projector {
|
||||
|
|
|
@ -244,6 +244,8 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
|
||||
uv_warp_deps_object_bone_new(ctx->node, umd->object_src, umd->bone_src);
|
||||
uv_warp_deps_object_bone_new(ctx->node, umd->object_dst, umd->bone_dst);
|
||||
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "UVWarp Modifier");
|
||||
}
|
||||
|
||||
ModifierTypeInfo modifierType_UVWarp = {
|
||||
|
|
|
@ -143,6 +143,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
{
|
||||
WarpModifierData *wmd = (WarpModifierData *) md;
|
||||
if (wmd->object_from != NULL && wmd->object_to != NULL) {
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Warplace Modifier");
|
||||
DEG_add_object_relation(ctx->node, wmd->object_from, DEG_OB_COMP_TRANSFORM, "Warp Modifier from");
|
||||
DEG_add_object_relation(ctx->node, wmd->object_to, DEG_OB_COMP_TRANSFORM, "Warp Modifier to");
|
||||
}
|
||||
|
|
|
@ -123,6 +123,9 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
if (wmd->map_object != NULL) {
|
||||
DEG_add_object_relation(ctx->node, wmd->map_object, DEG_OB_COMP_TRANSFORM, "Wave Modifier");
|
||||
}
|
||||
if (wmd->objectcenter != NULL || wmd->map_object != NULL) {
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Wave Modifier");
|
||||
}
|
||||
}
|
||||
|
||||
static CustomDataMask requiredDataMask(Object *UNUSED(ob), ModifierData *md)
|
||||
|
|
|
@ -142,8 +142,9 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
WeightVGEditModifierData *wmd = (WeightVGEditModifierData *)md;
|
||||
if (wmd->mask_tex_map_obj != NULL && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) {
|
||||
DEG_add_object_relation(ctx->node, wmd->mask_tex_map_obj, DEG_OB_COMP_TRANSFORM, "WeightVGEdit Modifier");
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "WeightVGEdit Modifier");
|
||||
}
|
||||
if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL) {
|
||||
else if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL) {
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "WeightVGEdit Modifier");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -178,8 +178,10 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
if (wmd->mask_tex_map_obj != NULL && wmd->mask_tex_mapping == MOD_DISP_MAP_OBJECT) {
|
||||
DEG_add_object_relation(ctx->node, wmd->mask_tex_map_obj, DEG_OB_COMP_TRANSFORM, "WeightVGMix Modifier");
|
||||
DEG_add_object_relation(ctx->node, wmd->mask_tex_map_obj, DEG_OB_COMP_GEOMETRY, "WeightVGMix Modifier");
|
||||
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "WeightVGMix Modifier");
|
||||
}
|
||||
if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL) {
|
||||
else if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL) {
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "WeightVGMix Modifier");
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_GEOMETRY, "WeightVGMix Modifier");
|
||||
}
|
||||
|
|
|
@ -352,10 +352,8 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
|
|||
DEG_add_object_relation(ctx->node, wmd->mask_tex_map_obj, DEG_OB_COMP_TRANSFORM, "WeightVGProximity Modifier");
|
||||
DEG_add_object_relation(ctx->node, wmd->mask_tex_map_obj, DEG_OB_COMP_GEOMETRY, "WeightVGProximity Modifier");
|
||||
}
|
||||
if (wmd->mask_tex_mapping == MOD_DISP_MAP_GLOBAL) {
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "WeightVGProximity Modifier");
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_GEOMETRY, "WeightVGProximity Modifier");
|
||||
}
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "WeightVGProximity Modifier");
|
||||
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_GEOMETRY, "WeightVGProximity Modifier");
|
||||
}
|
||||
|
||||
static bool isDisabled(const struct Scene *UNUSED(scene), ModifierData *md, bool UNUSED(useRenderParams))
|
||||
|
|
Loading…
Reference in New Issue