Page MenuHome

Armature X-Mirror inconsistencies
Open, Confirmed, MediumPublic

Description

I know it's supposed to be one problem per report, but I can't tell which of these things are the same bug and which aren't. It affects both Edit and Pose mode (although some of these properties only exist in Edit mode)

Blender Version
Broken: 2.80, 81b68f7279cd

The following properties don't seem to be considered by X-Mirror, at all. I split these into further two categories:

Properties that don't get mirrored at all, arguably not a bug, but I think it is:

(̶E̶d̶i̶t̶)̶B̶o̶n̶e̶.̶e̶n̶v̶e̶l̶o̶p̶e̶_̶d̶i̶s̶t̶a̶n̶c̶e
(Edit)Bone.envelope_weight
(Edit)Bone.use_envelope_multiply
(Edit)Bone.bbone_segments
(Edit)Bone.use_deform
EditBone.lock
EditBone.connected *
(Edit)Bone.use_local_location
(Edit)Bone.use_endroll_as_inroll
(Edit)Bone.use_inherit_scale
(Edit)Bone.use_inherit_rotation

*: Even if you argue that the Connected checkbox itself shouldn't be mirrored, the checkbox has the potential to change the bone's transforms, and these transform changes don't get mirrored until the bone is interacted, and the interaction is finished(not cancelled)

Properties that don't get mirrored at all, definitely a bug:

Edit/PoseBone.bbone_curveiny
Edit/PoseBone.bbone_curveouty
Edit/PoseBone.bbone_scaleinx
Edit/PoseBone.bbone_scaleiny
Edit/PoseBone.bbone_scaleoutx
Edit/PoseBone.bbone_scaleouty
Edit/PoseBone.bbone_easein
Edit/PoseBone.bbone_easeout

The following properties work, but only after interacting with the bones in the 3D viewport, even if the interaction is cancelled (I'm guessing in these cases the mirroring worked, but a viewport update call is missing):

EditBone.bbone_curveinx
EditBone.bbone_curveoutx
EditBone.bbone_rollin
EditBone.bbone_rollout
E̶d̶i̶t̶B̶o̶n̶e̶.̶h̶e̶a̶d̶_̶r̶a̶d̶i̶u̶s

The following properties work, but only after interacting with the bones in the 3D viewport, and the interaction must NOT be cancelled, in order for the mirroring to take effect:

EditBone.tail_radius
E̶d̶i̶t̶B̶o̶n̶e̶.̶h̶e̶a̶d̶[̶1̶]̶ ̶*̶2
E̶d̶i̶t̶B̶o̶n̶e̶.̶h̶e̶a̶d̶[̶2̶]̶ ̶*̶2
E̶d̶i̶t̶B̶o̶n̶e̶.̶t̶a̶i̶l̶[̶1̶]̶ ̶*̶2
E̶d̶i̶t̶B̶o̶n̶e̶.̶t̶a̶i̶l̶[̶2̶]̶ ̶*̶2
EditBone.bbone_z *3
EditBone.bbone_x *3
(Edit)Bone.envelope_distance

*2: These are mirrored fine when changed in the 3D Viewport, but not when changed in the UI.
*3: These can currently only be changed individually via the python console. They can be changed uniformally with Ctrl+Alt+S, but that works as intended.

Event Timeline

Demeter Dzadik (Mets) renamed this task from Armature X-Mirror inconsistencies (Edit Mode) to Armature X-Mirror inconsistencies.Jun 9 2019, 10:44 PM
Demeter Dzadik (Mets) updated the task description. (Show Details)
Philipp Oeser (lichtwerk) lowered the priority of this task from Needs Triage by Developer to Confirmed, Medium.Jun 11 2019, 10:05 AM

Thanks for the patch!

I went and tested everything, there are still problems in here.

The following seem to be fixed and work perfectly:

head_radius
head[1]
head[2]
tail[1]
tail[2]

envelope_distance has changed behaviour from not being mirrored at all, to only being mirrored after a finished interaction. This could be T65669 but what makes me not think so is that the interaction has to be finished, so I don't think it's a drawing problem.

tail_radius and all bbone properties still seem to have the same problems as before, with either only being mirrored after interaction, or not being mirrored at all, except curveinx, curveoutx, rollin, rollout, which work but seem to be missing viewport update.

Except for envelope distance, things that didn't get mirrored before still don't get mirrored (again, maybe these are not a bug, but I think they should be)

Demeter Dzadik (Mets) reopened this task as Open.Jun 11 2019, 4:41 PM

@Sebastian Parborg (zeddb) suggested to re-open and edit the report with strike-throughs, so I'm doing that.

Demeter Dzadik (Mets) reopened this task as Open.EditedAug 21 2019, 2:30 PM

Re-opening again since Pose mode mirroring still needs work.

The thing is though, instead of having a "Pose Mode X-Mirror" and an "Edit Mode X-Mirror", it should be reworked to a "Pose Data X-Mirror" and "Bone Data X-Mirror". This is because some properties don't really belong to either pose or edit mode.

These are:

  • BBone Segments
  • BBone X/Z Display Size
  • BBone "Inherit End Roll" checkbox
  • Envelope Distance
  • Envelope Weight (which is still not being mirrored at all, because I wasn't sure if it would be a good idea. But I think it would be afterall.)
  • Radius Head (which seems to have an issue with updating the mirrored bone when parents are connected. This is because the parent's tail radius overwrites the connected child's head radius, but the mirroring logic actually affects the parent's tail radius in an attempt to be smart. It should probably do nothing, and the slider itself should be grayed out in this case.)
  • Radius Tail
  • Deform (also not being mirrored at all, same reason as Envelope Weight)
  • BBone handle settings (Same here)

"Bone Data X-Mirror" would mirror these, as well as edit mode properties, irrespective of what mode you're actually in. "Pose Data X-Mirror" would only mirror properties that belong to the pose bone.
(Feedback on this idea would be welcome. @Sebastian Parborg (zeddb) ? )

So to really have proper armature symmetry tools, it needs a bit of work. I'd like to give it a shot when I can find time, which is probably not soon.

Having Relative mirror work outside of operators (so, when changing UI sliders) is also another can of worms which I don't really want to touch.

I think that we should probably look at if we shouldn't treat these things like the other bone attributes in pose mode. IE they would be applied to the edit mode properties so it would be more of a delta value instead.