0
$\begingroup$

There's a question regarding character rigging, let me show two examples of different skeletons taken from Mixamo.

  1. Zombie. All its bones' heads start from the character's joints and directed upwards with roll == 0
  1. Warrior. Her bones's heads also start from joints but oriented along the body, from torso towards limbs' ends.

I have an algorithm that does animation and it performs well on the first case, but not in the second case, because it is based on assumption that bones are all oriented along Z axis. The question is, is there a way to convert bones in the second case to conform the first cases' assumption (rotate all of them upwards) preserving the ability to control the pose?

Manual bones adjustment in the Blender desktop has led me towards weird movements whenever I rotate the bone in Pose Mode.

$\endgroup$
7
  • $\begingroup$ blender.stackexchange.com/questions/67289/… $\endgroup$
    – John Eason
    Jul 28, 2022 at 20:24
  • $\begingroup$ Thanks @JohnEason. I've seen this thread too, unfortunately it doesn't work in opposite way. I wasn't able to import rig in the second case to be present as the first case. $\endgroup$ Jul 28, 2022 at 21:20
  • $\begingroup$ CGDive has done a series of tutorials about Mixamo and Blender including this one which appears to show your problem. $\endgroup$
    – John Eason
    Jul 28, 2022 at 23:01
  • $\begingroup$ This one is also very helpful @JohnEason, I'll try defer from the source code of the RetargetHelper how do they do it. But my issue is still opposite, I want to make "good" Mixamo rig to be "weird". Bones faced upwards $\endgroup$ Jul 29, 2022 at 0:29
  • $\begingroup$ Ah ok. Can't help with that one I'm afraid! :^( $\endgroup$
    – John Eason
    Jul 29, 2022 at 8:13

2 Answers 2

0
$\begingroup$

For those who discover the same issue,

Consider scrutinizing the plugin RetargetHelper, here's the source code. If you change all calls of snap_tail to hang_tail (your custom function, that aligns each bone tail upwards) then your model will transform from the rig in the second case to the rig in the first two images of a question.

Thanks to @JohnEason

$\endgroup$
0
$\begingroup$

If we have a large number of bones, and want to set their world space rotation to something fixed, we can do that relatively quickly with a few Blender operations.

  1. Make an empty, on default alignment with the world. Rotate it 90 degrees in the X axis (local or global, same thing.)

  2. Enter edit on your armature and make sure none of your bones are "connected". You can disconnect all bones quickly by selecting all, then alt-p -> disconnect bone.

  3. Switch to pose mode on your armature. Give one bone in your armature a copy rotation constraint, targeting your empty. Defaults-- world->world, replace mode-- are appropriate.

  4. Select all bones, then shift select your constrained bone, and use a "copy constraints to selected bones" operation. I access this via the searchbar.

  5. Use "apply pose as rest pose" operation. I access this from the ctrl-a menu.

  6. Clear all constraints from your bones, by selecting all in pose mode, and using "clear pose constraints" operation. I access this from the searchbar. You can also now delete the empty you created in 1) above if you would like.

This edits your armature so that none of the lengths of any bones change, and none of the positions of any bones change, but all bones will point in world +Z, and all bones' X axes will point in world +X.

It is not appropriate for use on an armature with constraints (it will replace constraints, but constraints will probably have to be redone anyways); it is not appropriate for use on an armature that has any meaningful animation (that animation will no longer make any sense after changing bone axes.)

$\endgroup$
2
  • $\begingroup$ Thank you @Nathan, this is very useful. But what about bone roll property, how it should be adjusted? What if we set it up to zero? $\endgroup$ Jul 29, 2022 at 23:27
  • $\begingroup$ Bone roll will be set correctly by the process I described. You're copying the rotation necessary to set the X and Z axes to the same as the empty, which is the same thing as setting the bone roll. $\endgroup$
    – Nathan
    Jul 30, 2022 at 3:11

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .