Is "Smart IK" possible?

Hello All!

So I was recently using a rig in Cinema4D as somebody told me to try it out and I thought the whole experience was okay but something really stood out to me.
The arms and legs had what I would label as “Smart IK” where the IK and FK bones are always showing and you can select any of them and move them. This allows the arm to be positioned quickly in IK and edited using FK without having to use any weird switching methods at all.

I was wondering if this was possible in blender, and if anybody knows how that would be awesome to share :smiley:

Thanks All

Hi !

You mean when moving the ik controller around the fk controllers would follow, and when rotating the fk controllers the ik controller would follow as well ?

As far as I know bidirectional constraints are not possible in Blender (or in Maya or anything I know), but there’s probably a smart trick at play we can try to emulate in Blender. This is an interesting problem. Right now I have no lead though.

Oh, maybe a constraint loop is actually possible with the new depsgraph ??

BEPUik kind of works like this but it isn’t available for 2.77. You can try it out here (separate branch): https://wiki.blender.org/index.php/User:Squashwell

Wow that looks really cool! I’ll make sure to take a look at that sometime and try something out with it because hopefully I can get this effect :smiley:

Thanks for your reply, I wasn’t too sure how I would go about trying it myself to be honest. Hopefully bidirectional constraints are added at some point or maybe even in an addon :smiley:

For Blender, you might also like to consider just having FK chains, but with either

  1. a “Targetless IK” constraint setup as you would normally, OR
  2. the “Auto IK” option enabled (see Toolshelf -> Options)

This way, you can pose normally using FK, while also having some IK-like behaviour if you want it. It might not be exactly what’s wanted though.


The new depsgraph as it currently stands doesn’t actually allow for bidirectional stuff either. That said, I did mock up some mechanisms that could be used to support that one day, if we really wanted. If done in certain ways, it’s certainly possible to get bidirectional stuff working (e.g. by having some “conditional branching” nodes in the depsgraph, we could limit which sequence of nodes gets scheduled and executed; Thus, one of the two branches would be used. Making that work with the transform tools wouldn’t be that nasty either - those could just flick a switch to change which way it goes. The hard part is saying what should happen when we need to interpolate! Incidentally, that’s also exactly the part that’s often glossed over in most technical papers and documentation/demos of these kinds of fancy systems, but I digress…)