Animation and Rigging Tools: FAQ, Known Issues and Feature Roadmap

Knee/Foot Solving problem

Hello everybody again.

So in the last few days I worked with some mocap data to stress the ARTv1 (Thanks for the update on the ETA for V2, I needed it!)
Unfortunately I’m getting some problems with the knee and foot solving over the IK chain:

Source files: Maya2014 FBX - Maya2016 FBX
Info: Using tool released with 4.13 (the files on dropbox have some problems with Modules and IK/FK switching), on both Maya 2016 and 2014.
Mocap source: Recorded with OptiTrack, solved using Ikinema Action and retargeted on the ExportFile Mannequin joints. Exported as FBX and then imported with the “Import Mocap” tool.

First problem - Knee Solving:

As you can see in the image above, in some particular motions, the IK knee solving can produce some flipping of the knee. Not having a poleVector system doesn’t help maintaining a correct direction.
I don’t know if this can be automatically solved in the code. For now I can only fix this manually.

The other problem is the high volume of jittering on the knees with the auto solving.
Cleaning the animation curves isn’t immediately possible in some cases becuase the values on the knee twist are jumping from 4/5 to 354.
For whoever needs it, I wrote a super simple/super quick script to fix and clean the curves so you can have a smoother movement on the knees:



#Usage:
#Copy the script inside a Python tab of your script editor, select one or both the "ik_foot_anim_*" controls and press enter (numeric pad) on your script editor

import pymel.core as pm

ctrls = pm.ls(sl = True)
for ctrl in ctrls:
    try:
        list = pm.keyframe( str(ctrl) + ".knee_twist", query=True, valueChange=True, timeChange=True)
        for key in list:
            if key[1] > 0:
                newValue = (( key[1] // 180 ) * ( -180 )) + ( key[1] % 180 )
                pm.keyframe( str(ctrl) + ".knee_twist", time= (key[0], key[0]), valueChange= newValue)
        
        pm.simplify(str(ctrl) + ".knee_twist", timeTolerance = 4.2, floatTolerance = 5, valueTolerance = 0.3 )
    except:
        pm.warning("Something, somewhere, went horribly wrong")


Please note this script is very simple and may not work in some rare cases (like keys switching from -180 to 180).

Second problem:

Using the Foot Roll solving creates some weird offset on the foot itself. This doesn’t happen with FK or IK without FootRoll solving.
In this case I really don’t have a specific idea on how to fix this automatically.

Anyone having similar problems?