I developed a Houdini based workflow which relies heavily on being able to import animation curves contained within character FBX files. The curves are used primarily inside of control rigs, similar to the metahuman face control curves.
However, since UE 5.3, 5.4 and now 5.5, these animation curves do not get imported and do not appear on the skeleton or anywhere else as far as I can tell.
This is problematic for several reasons, not least of which is that because these curves are no longer imported and added to the skeleton, they are not accessible inside of control rigs.
I only see the TPose and UnrealPose curves when I import in 5.2.
I also get warning for almost all curves that are “skipped because it only contains invalid values.”
LogFbx: CurveName : ctlTestAnimationCurveOne
LogFbx: CurveName(ctlTestAnimationCurveOne) is skipped because it only contains invalid values.
LogFbx: CurveName : ctlTestAnimationCurveTwo
LogFbx: CurveName(ctlTestAnimationCurveTwo) is skipped because it only contains invalid values.
LogFbx: CurveName : ctlTestAnimationCurveThree
LogFbx: CurveName(ctlTestAnimationCurveThree) is skipped because it only contains invalid values.
Howdy, I’m Mike, helping Adam above with the problem. In tracing through the engine, we found this snippet in InterchangeGenericAnimationPipeline.cpp that seems to skip over non-floating point curves:
to get force it to consider the curve. However, when trying to use the project settings to add a custom attribute curve name for import, I find it causes an editor exception for me (something about a write accessor sentinel), and for Adam, the curve shows up in the sequencer editor as empty, and in a completely different area than expected. This tells us that there is more involved, so still looking forward to any help you can give us.
Alright, I’m still on this because we need to get this fixed, sooner rather than later. I’ve been messing around in the engine to see what happens if I push our integral curve through, and I’ve found that if I relax the guard above to allow it to consider integral curves, in
UE5\Engine\Plugins\Interchange\Runtime\Source\Import\Private\Animation\InterchangeAnimSequenceFactory.cpp, line 772,
there is a guard that prevents the integral curve from being added to the AnimSequence from AnimSequenceFactory.
The blue box on the bottom is where the internal function (the blue box on the top) is called to reject the integral curve. The comment associated with the internal function up top declares that it only accepts floating point (and vector) types so as to stay compatible with the underlying FRichCurve that it uses.
Is there a reason that it doesn’t convert integral values to floating point values? I guess I can see that if the intention is a stiff integral curve and all that can be provided is a smooth curve instead, that might be a change of behavior; but what we have now is no curves and that is breaking us.
Thank you! really looking forward to resolving this!
I’ve been taking a deeper look into this issue, and I should have also clarified the import options I am using.
In UE 5.2 there are two import options required to get the curves to be imported onto the skeleton correctly. These are making sure that Import Animations is ticked and also making sure that Do not import curves with only 0 values is unticked.
In addition to the above comparison between 5.2 and 5.4, it’s worth noting that this isn’t the only instance where, since 5.3, the issue of curves no longer being associated with the skeleton can occur.
Another instance is with pose assets.
In 5.2 when you create a pose asset from an animation sequence, the resulting pose asset animation curves would automatically appear on the skeleton.
However, after repeating the exact same steps in 5.4, the pose asset animation curves are not visible on the skeleton and are therefore not accessible from control rigs.
I have a feeling that these two issues are related somehow.
It seems that any animation curve which isn’t a morph or material type curve, just do not get registered on the target skeleton since 5.3.
The only workaround I have right now is to generate a long list of the curves in Houdini which I can then copy and paste onto the skeleton. If I do that they are visible on the skeleton and do remain that way, however it would be far batter to not have to go through those steps as it can cause other problems.
It would be far better to restore the previous functionality of being able to import these curves along with the source Fbx file and, have pose asset curves once again automatically associated with the target skeleton.
Upon conferring with my teammate Adam here, we originally thought that our issue was the same as OP’s but upon reflection and investigation it seems they are related but not the same. We’ll split our problem out into it’s separate post to allow Peter to focus on his problem here in this thread (gl, Peter!)
@UE_FlavienP with the additional information I have provided in the posts above, are you able to confirm if this is intended behaviour or a bug. It would be good to know one way or the other.