10
$\begingroup$

I was wondering if anyone knows how to set up a hose-like, cartoon-type limb like in this picture?

enter image description here

My current setup for my model's limbs uses Inverse Kinematics and actually works quite well for the moving whole arm around, although I do get some really nasty-looking deformations I get when I try to bend the limb, but this isn't my primary concern right now.

enter image description here

My main concern is that while I can manipulate the arm as a whole without trouble, trying to get the arm to bend like in the first picture is an extremely frustrating and finicky affair. Basically, I need some method of being able to improve control over how the arm bends in order make more manageable for posing the model.

enter image description here

My first solution was to try and add a second IK controller to the arm that could be used as a bend point to create a curvature in the arm. Unfortunately, trying to manipulate this second controller doesn't seem to do anything at all, and I'm not too sure whether or not I screwed something up in setting up the IK controller or if you simply cannot attach another IK controller to another IK chain (I assume the answer is the latter, although me screwing up in setting up something is also quite plausible).

Another potential solution I saw on various tutorial videos was using a Bezier Curve to control the overall curvature, but I'm not too sure whether or not I can attach a Bezier Curve to only part of a model rather the whole thing.

I tried looking for a solution by searching YouTube for a tutorial on how to rig cartoony hose limbs, but instead I was surprised by the dearth of materials on the subject, especially since its been a staple of animation since pretty much the very beginning of the medium. I mean, I get that the standard skeleton armature is a lot easier to setup than the classic hose-style limb, but it is simply not the look that I want for this particular model.

One final thing to keep in mind is that I've been making this model for a game project that I've been working on, and thus any potential solutions for this problem must be compatible with game engines like Unreal Engine or Unity.

I hope that what I'm not asking for too much, and that I would greatly appreciate it if anyone could offer any potential help with this endeavor.


Sorry for not responding earlier, but thanks a lot for going to the effort of responding to my question, although it would appear that it wasn't needed to begin with. After going back and playing with the armature some more, it turns out that Inverse Kinematic chains that I set up for the arms actually do work for posing, I guess I just didn't have a very good grasp of how to properly control them.

It's probably for the best that I use Inverse Kinematics anyway because I am trying to make a model that can be imported into Unreal Engine 4 and my understanding is that game engines like Unreal and Unity are incompatible with Bendy Bones. At least that's what I have read in the past, I'm not sure if that has changed recently, but my recent attempts at trying to look into the matter has mostly come up with older information, so I have to assume that nothing has changed so far.

However, despite the fact that I won't be using your solution, I still think it was worth posting anyways because while I might not use it, there's always the possibility that it might help someone else out. There is after all, a distinct lack of info out there on how to do cartoon-style hose limbs and having this information out there means that others can now find it and use it to help themselves out. Its because of this I decided to go back and add some additional tags to my original post to make it easier for others to find this info.

Regardless of everything, thanks again for the help!

$\endgroup$
  • 1
    $\begingroup$ Maybe bendy bones could help? $\endgroup$ – Legoman Aug 15 '18 at 19:36
14
$\begingroup$

I think you could test at least 3 solutions, the classic rigging with bendy bones playing with Easing In and Out, the Stretch To constraint solution, will allow you to stretch the arm, and the Spline IK constraint solution, which is a bit more complicated but will deform more nicely.

1) CLASSIC RIGGING

  • Create a chain of bones: upper arm, lower arm, hand, etc. Flex the elbow a bit so that Blender will know how it will have to bend.
  • Create a controller bone at the wrist position, deparent it and unclick the Deform option in the Properties > Bone panel.
  • Parent the hand to this controller with ctrl P > Make Parent > Keep Offset.
  • Create a Pole Target bone from the elbow, deparent it and move it a bit backward, unclick the Deform option in the Properties > Bone panel.
  • In the Properties > Data > Display panel, choose B-Bone instead of Octahedral. Give your upper and lower arms several Segments (for example 6). You'll see later that the Easing options will allow you to bend the arm in a rounder way. Maybe you'll have to correct the rotation of some bones with ctrl R so that they all follow the same axis.
  • In Pose mode, give your lower arm bone an IK Constraint, choose the controller as the Target, choose the Pole Target, and choose 2 for Chain. You can also give it a Copy Rotation constraint with the hand as the target, so that when you rotate the hand, the lower arm will follow.
  • Parent your mesh to the armature.
  • Don't forget to put the Armature modifier of your mesh above the Subdivision Surface modifier otherwise your mesh could be weirdly deformed (maybe it's the problem in your screenshot). Also, click Preserve Volume in the Armature modifier.
  • Now you can control the arm with the controller.
  • Sometimes it will go crazy because the Pole Target is not enough to show how to rotate, in that case select your arm, go in Pose mode, then in Properties > Bone > Inverse Kinematics, limit the rotation on the axis you want.

enter image description here

2) STRETCH TO CONSTRAINT

If you want your arm to be more free and elastic you could also try the Stretch To constraint:

  • Create a chain of bones with shoulder / upper arm / elbow / lower arm / hand / hand controller.
  • In the Properties > Data > Display panel, choose B-Bone instead of Octahedral. Give your upper and lower arms several Segments (for example 6). You'll see later that the Easing options will allow you to bend the arm in a rounder way. Maybe you'll have to correct the rotation of some bones with ctrl R so that they all follow the same axis.
  • The hand controller needs to be deparented, the hand is parented to the controller, the elbow must be deparented, the shoulder is parented to the torso of course. For the controller, unclick the Deform option in the Properties > Bone panel.
  • In Pose mode, give the upper arm and lower arm a Stretch To constraint.
  • In the lower arm constraint, select the hand as the Target. In the Properties > Bone > Bendy Bones panel, click the Use Custom Handle References and choose In > elbow and Out > hand.
  • In the upper arm constraint, select the elbow as the Target. In the Properties > Bone > Bendy Bones panel, click the Use Custom Handle References and choose In > shoulder and Out > elbow.
  • To test the arm, move the hand controller and the elbow, there are independent.
  • Parent you mesh to your armature.
  • Don't forget to put the Armature modifier of your mesh above the Subdivision Surface modifier otherwise your mesh could be weirdly deformed (maybe it's the problem in your screenshot). Also, click Preserve Volume in the Armature modifier.

enter image description here

3) SPLINE IK CONSTRAINT

Third method is Spline IK, a bit more difficult to set but very flexible and will probably preserve the volume better:

  • Create an armature as long as the arm, subdivide it for example 7 times, with one bone for the hand, deparent this hand bone
  • Create a curve as long as the arm (until the wrist), subdivide it once (so it has now 3 vertices), align it to the bones of the armature. In Edit mode make sure its direction is good, if not press W > Switch Direction.
  • Switch the armature to Pose mode, give the 6th bone a Spline IK constraint with the curve as Target and a Chain Length of 6 if you have chosen 6 bones for the arm. Now your curve controls your bones.
  • Choose the B-Bone display type for your armature, and segment your arm bones, for example 3 times.
  • Create a second armature, with one bone for each curve vertex.
  • Switch this armature to Pose mode, select one bone, shift select the curve, go in Edit mode, select the corresponding vertex, press ctrlH > Hooked To Selected Object Bone. Do it for the 3 vertices. Now the 2nd armature controls the vertices position. It allows you to come back to a rest position whenever you want.
  • Parent the 7th bone (hand) of the first armature to the 3rd bone of the second armature with a Child Of constraint so that this 3rd bone control the hand position and rotation. In the constraint, press the Set Inverse button so that the bone stays at its place.
  • Now parent the mesh to the first armature With Automatic Weight. Put the Armature modifier above the Subsurf modifier, enable the Preserve Volume option.

enter image description here

$\endgroup$

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.