Page MenuHome

Dynamically bound mesh deform modifiers fail to update viewport on object transformation of deformer
Closed, ResolvedPublic

Description

System Information
Operating system: Windows-10-10.0.18362 64 Bits
Graphics card: GeForce GTX 1070/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 432.00

Blender Version
Broken: version: 2.81 (sub 16), branch: master, commit date: 2019-11-06 20:48, hash: rB85637311c28f
Also broken: Blender 2.80 release
Worked: Blender 2.79b release

When you transform an object, Blender fails to update objects that depend on that object for purposes of dynamically bound mesh deform modifiers. This affects only viewport display; render displays properly (probably updating everything prior to rendering anyways?)

This also appears to be true with non-dynamically bound mesh deforms, although it's unclear whether regular binds should depend on transformation space, or if the fact that they do is a (different) bug-- I just figure regular mesh deforms operating in different spaces than their targets is unsupported.

Exact steps for others to reproduce the error

See attached .blend, made in 2.80 release, which demonstrates the bug and the workaround:

Cube at origin is being mesh deformed by Icosphere in wire display over it. Move Icosphere in object mode. Cube fails to update. (Enter then exit edit mode on Icosphere to trigger Cube to update and see how your object level transformation affected the dynamic mesh deform.)

Cube.001 and Icosphere.001 demonstrate the workaround. By parenting Icosphere.001 to a bone that triggers update of Cube.001 via a meaningless armature modifier, you can manipulate Icosphere.001 through the bone for real-time updating of the effects of your transformation.

Related Objects

Event Timeline

Philipp Oeser (lichtwerk) lowered the priority of this task from Needs Triage by Developer to Waiting for Developer to Reproduce.Nov 7 2019, 8:26 PM

1
2
3diff --git a/source/blender/modifiers/intern/MOD_meshdeform.c b/source/blender/modifiers/intern/MOD_meshdeform.c
4index 408e38f43ab..21fdc010a1d 100644
5--- a/source/blender/modifiers/intern/MOD_meshdeform.c
6+++ b/source/blender/modifiers/intern/MOD_meshdeform.c
7@@ -158,7 +158,7 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
8 {
9 MeshDeformModifierData *mmd = (MeshDeformModifierData *)md;
10 if (mmd->object != NULL) {
11- /* TODO(sergey): Do we need transform component here? */
12+ DEG_add_object_relation(ctx->node, mmd->object, DEG_OB_COMP_TRANSFORM, "Mesh Deform Modifier");
13 DEG_add_object_relation(ctx->node, mmd->object, DEG_OB_COMP_GEOMETRY, "Mesh Deform Modifier");
14 }
15 }
would make it update [as 2.79 did]

Still not sure if this is desired behavior [will read up on Dynamic Binding for a bit...]

I wouldn't know why the current behaviour would be desired.

Philipp Oeser (lichtwerk) lowered the priority of this task from Waiting for Developer to Reproduce to Confirmed, Medium.

Lets confirm this then