5
$\begingroup$

My goal is to rig the Ears of my quadruped character, which has huge and soft ears (rabbit-like).

I've set up a Spline-IK constraint for the ear's bones chain, and added soft body physics to the curve that control this constraint. Everything is working fine at this point.

Now, I want to give control to the animator over each individual bones of this chain, so that he can animate it the same way a basic FK chain would do, but keeping the soft body effect while playing back the animation.

Unfortunately, hooking the curve with empties will override the soft-body simulation for the vertices of the curve which are hooked (which seems quite normal). In addition, there is a dependency cycle because :

 Curve depends on Armature through Bone Parent.
 Armature depends on Curve through Spline IK constraint.

I've tried several workaround (adding empties, separate the ear bones in another object...) but it always results in a dependency cycle, just with more steps :

 Armature_body depends on Armature_ears through Copy Rotation.
 Empty depends on Armature_body through Bone Parent.
 Curve depends on Empty through Parent.
 Armature_ears depends on Curve through Spline IK.

So, my question is: Is there a way to add soft body effect to a bones chain, but keeping FK control over it?

Here is a .blend file at the state of my progress: Crastor Rig B.SE blend file

$\endgroup$
2
  • $\begingroup$ So wait , do you mean you want to implement both IK and FK at the same time on the same armature? Just to clarify. $\endgroup$ – TheMinecraftMan757 Mar 24 '15 at 13:44
  • $\begingroup$ No, not really, I just need an FK chain to be "soft body-ed", but still controllable in the meantime. $\endgroup$ – Polosson Mar 24 '15 at 13:59
8
+100
$\begingroup$

The key is to have the hook modifiers before the soft-body on the curve, so the soft-body will take the hook-deformed curve as an input:

enter image description here

I also subdivided the curve to add it more control points that can be hooked (but subdivision affects the soft-body sim). Without the subdivison you could control only the end-point. The hook-Empties are parented to the head. This works like this:

enter image description here

enter image description here

So you can control the curve shape with hooks now. But you can't control the same bone-chain with IK-spline and FK at the same time without dependency issues. You would have to build 3 sets of bones - IK, FK and a final set to blend between the two. Look up IK/FK blending.

Here is the blend:

Another approach that I would prefer is to rig the character the usual way without any soft-body curves etc. and to put a soft-body after the armature modifier. With the Soft-body Goal vertex group you can control which parts of model will be giggly and which not. For good performance this should be done on a low-poly skinned Mesh-deform mesh controlling the high-poly character.

$\endgroup$
1
  • $\begingroup$ Well, this is great one. I had not thought to take into account the modifiers order, and that's the key! For the IK-FK blending, be sure I'll do that, like I did for the other parts of the character. About soft body sim on a low poly mesh-deformed mesh, that's a good idea but I think I'll stick on the method you described here. Thanks a lot, your answer deserve the bounty! $\endgroup$ – Polosson Mar 25 '15 at 22:19
0
$\begingroup$

I'm facing a similar problem, where I'm trying to transfer motion from a simmed mesh to an armature that then controls a final mesh. I don't have a full answer for you, but part of the problem you face is the way that splineIK overrides everything. But if you used a method other than splikeIK, perhaps you would have more options?

The other method is to use a vertex chain instead of a curve, then constrain a bone chain to it. Use curve bones (bbones) to get your curve back. You'll want each bone to be IK constrained to a vertex group at its tip, with a chain length of 1. The bone is then Connected to the bone higher up the chain. The bone at the start of the chain will need Child Of or Copy Loc to a vertex group at it's head. This whole setup will give you the same results as spline IK. (Note that, like spline IK, this won't give you any Roll aka local Y rotation. But if you also put a copy rot on each bone to a loop running perpendicular to that bone you can get it.)

I'm not sure if you'll be able to get FK working with this either, but it may give you more options to work with, as it doesn't have the hard override that splineIK does.

It's complicated, but what if you had something like this: Your mesh, controlled by an armature. Then a second armature, controlled by the softbody sim (either through spline IK or the method above.) The second armature is locked, but you can control the first, and they are mixing their force on the object?

$\endgroup$
2
  • $\begingroup$ Thanks, I'll test it tomorrow, but the main problem here for me is that the simmed mesh (or curve in my case) should also follow the first bone... In your setup the simmed mesh must be animated by hand, the same way as the first bone. I really need to have this simmed mesh to follow permanently and automatically the first bone's location and rotation, and (to be perfect), to follow each bone of the chain... the snake bites its own tail... $\endgroup$ – Polosson Mar 24 '15 at 0:48
  • $\begingroup$ Then give it an armature based on the first bone, and don't constrain that bone to it. Just constrain the rest of the chain. Have the armature before the softbody in the modifier stack. Or make a new bone that controls the mesh in the same position as the first bone, and constrain the first bone to it. Keep in mind that for softbody, a chain of vertices and a curve will behave in the same way, just that the curve articulates between the points differently. But as the sim is only on vertices, it makes no difference. $\endgroup$ – Ascalon Mar 24 '15 at 1:32

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.