Page MenuHome

Mirror Modifier not Updating Correctly in Viewport
Closed, ResolvedPublic

Description

System Information
Windows 10 Education - Version 1803 - OS Build: 17134.112
Graphics Card: EVGA GTX 1080 Gaming ACX 3.0

Blender Version
Broken: 2.79 (sub 3) hash: b5b5260, type: Release, branch: blender2.8

Short description of error
When using the mirror modifier, having an empty object as the mirror modifier target while the empty is parented to the object with the modifier, incorrect mirroring occurs randomly when the object is moved.

Exact steps for others to reproduce the error
Create a cube with radius 1.
Create a cylinder with radius 1 and depth 2 at the coordinates (0,0,2).
Create plain axes at coordinates (0,0,3).
Parent both cylinder and empty to cube.
Create mirror modifier with object target as the plain axes on both cube and cylinder. (This allows better gauging of misplacement)
Press G and wildly shake cube mostly along the z-axis.
While shaking randomly press left click to place cube.
Notice that sometimes the separation of the mirrored cube changes in the viewport, but is corrected when either

  1. The mirror modifier on the cube is hid and unhid.
  2. The following sequence is followed: Create an object -> Move newly created object and confirm location -> Press CTRL+Z to undo.
  3. When rendering with Cycles.

I have attached a .blend file with the above set-up and a video illustrating the phenomenon.

Event Timeline

not an issue if you use the new dependency graph
(run blender from the commandline with the --enable-new-depsgraph option)

If you use the old dependency graph, it would warn you already:

Dependency cycle detected:
  Empty depends on Cube through Parent.
  Cube depends on Empty through Mirror Modifier.

If you use the new dependency graph (and have a look at --debug-depsgraph), it looks like it can handle it properly:

deg_evaluate_on_refresh: layers:1, graph->layers:1
BKE_object_eval_local_transform on OBCube (0x7fc391bf0408)
BKE_object_eval_done on OBCube (0x7fc391bf0408)
BKE_object_eval_local_transform on OBEmpty (0x7fc391bac008)
BKE_object_eval_local_transform on OBCylinder (0x7fc391bf0a08)
BKE_object_eval_parent on OBEmpty (0x7fc391bac008)
BKE_object_eval_parent on OBCylinder (0x7fc391bf0a08)
BKE_object_eval_done on OBEmpty (0x7fc391bac008)
BKE_object_eval_uber_data on OBCube (0x7fc391bf0408)
recalcdata Cube
BKE_object_eval_done on OBCylinder (0x7fc391bf0a08)
BKE_object_eval_uber_data on OBCylinder (0x7fc391bf0a08)
recalcdata Cylinder
Depsgraph updated in 0.000483 seconds.

I assume this report could be closed (as the new dependency graph is more or less the new standard), but leaving decission up to @Sergey Sharybin (sergey) ...

Philipp Oeser (lichtwerk) lowered the priority of this task from 90 to Normal.Jun 18 2018, 1:25 PM

Putting this on normal (so it doesnt appear untriaged...) because there is an issue [but only with old dependency graph...]

Sergey Sharybin (sergey) changed the task status from Unknown Status to Resolved.Oct 29 2018, 2:37 PM

The new dependency graph can indeed handle this case is since it's default and the only one in upcoming 2.8 release considering this issue solved.

Thanks for the report! :)