2
$\begingroup$

I'm trying to make some custom bone shapes for my armature control bones. I've made the custom shapes in the location I want. However, whenever I set the 'Display -> Custom Shape' property to the object I made, it appears in a crazy orientation and scale relative to the bone's position (not in the position of the 'real' mesh, as I'd expect).
I've applied the rotation and scale to the original mesh I want to use as the shape (using CtrlA) but am unable to get it to work in place like I'd expect.

I've read that the bone size and orientation are applied to the mesh shape key (I'm assuming the size and rotation relative to the parent?). That seems like it's terrible, is there some way to turn it off or position the original mesh so it lines up?

I found a plugin ( http://wiki.blender.org/index.php/Extensions:2.6/Py/Scripts/Rigging/Auto_custom_shape ) that seems to do what I want - but it doesn't seem to work with the newer version of blender I'm using (2.73).

I don't want to just randomly flip and scale my original mesh around in the scene until it looks right - that seems like it's just going to be confusing down the road if I need to change the shape (as it will be in an arbitrary orientation in the scene someplace). There has to be a way to set this up nicely - I can see that rigify puts it's WGT-* bone shape meshes in the world in a way that lines them up with the bones they're applied to.

Anyone have a good solution for this?

$\endgroup$
1
$\begingroup$

By now, this is the better way I've found: - put the 3D cursor (Shift S) on the base of the bone - create a cube - turn on the axis view both in the bone (in pose mode) and in the new cube (Obj mode) - in object mode, align the cube to the bone on the three axes - in edit mode, move all vertices of the cube until it surrounds the bone - assign the cube as bone shape - in obj mode scale the cube equal to the bone shape - in edit mode rescale the cube mesh as it was when created

Now you can freely edit the mesh: it will remain the same as bone shape.

This method is useful only for complicated bone shapes, as it is long and tedious; with simple meshes i prefer to get some headache with trial and errors movements :)!

I'm looking for better methods from the community!!

$\endgroup$
1
$\begingroup$

I struggled with this as well, and after trial and error came up with a method that works pretty well.

  1. Create your custom shape using standard alignment (global axis)
  2. Select the bone in edit mode, and align the view to the bone's top (or sometimes front) view.
  3. Select the base of the bone and move the cursor (Shift-S, Cursor to selected)
  4. Tab back into object mode and select your shape. Move it to the cursor (Shift-S, Selected to Cursor)
  5. Make sure your transform orientation is set to "view" and then align the shape object to the view (Object -> Transform -> Align to Transform Orientation)
  6. Now select the bone in POSE mode and assign the custom shape. With any luck it should be similarly positioned to the bone.
  7. Size the shape in OBJECT mode to the size of the bone.
  8. Now you can change the shape in EDIT mode and the bone should follow.

I made a quick screencast and shared it to youtube that may help visualize this process better.

https://www.youtube.com/watch?v=cctkbxxgONU

$\endgroup$
1
$\begingroup$

For solving this issue I use a script called orient_custom_shape_V2.py I found here: https://developer.blender.org/F207430

After installing and activating the script in User Preferences select a custom shape as you do normally (Pose Mode -> Bone panel -> Display section). Then you have this new button called Orient Custom Shape beneath the custom shape options. It should bring the representation of your bone to where your custom shape mesh is. Which is what we want.

Custom shape fix

It works fine for me (v.2.77). Though I know people experienced issues with scale and orientation for some bones using the script.

And as to scale I recommend having bone size equal to one if possible (this should not scale your custom shape at all).

$\endgroup$
  • 1
    $\begingroup$ Wow, this worked supernice, exactly aligning it. I had to go into Object mode and CTRL + A to Apply Scale first, to make it work. $\endgroup$ – Niclas Feb 25 '17 at 16:13
  • 1
    $\begingroup$ I have updated this script for Blender 2.80 at github.com/scaredyfish/orient_bone_shapes $\endgroup$ – Wossname May 2 at 1:03

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.