If you haven’t heard of soft IK before, please read http://www.softimageblog.com/archives/108. Andy Nicholas explains the problem very clearly. Essentially it adds a “soft” distance and slow down the movement causing the pop with a formula. Andy showed this in Softimage but the idea works anywhere.
Below are some lines of expression showing the ideas in maya. They are running node-based in my final rig but making the setup works in expression first is faster for me.
// -----------------------------------------------------------
// $d : current distance betw ends
// $D : initial distance betw ends
// $S : IK softness
//
// softJ_start & softJ_end
// a 2-joint chain with it's IK parented under e.g. foot ctrl
// the main IK is point constrainted to softJ_end
// -----------------------------------------------------------
float $S = ctrl.soft;
float $D_soft = $D - $S;
float $new_d = $d;
if ( $d > $D_soft ) {
float $x = $d - $D_soft;
$new_d = $D_soft + $S *( 1-exp(-$x) );
}
softJ_end.ty = $new_d;