1
\$\begingroup\$

I have recently implemented skeleton animation in my custom engine by following this tutorial. I made several improvements based on that, and was able to load/play simple humanoid animations without problem, like the final output in that link. Now I'm very excited to try out more animations, unfortunately it doesn't work all the time. For example, this model comes with a small sample animation, I can correctly play the legs, arms, necks, fingers and eyes, everything. But if I try some MMD-style animations (exported from Blender as FBX), or those downloaded from Mixamo, none of them works, the animation is still playing but looks very weird, the legs/feet are not moving when they are supposed to, instead the hips bone is rotating (luckily the mesh is not broken though).

After some trials and errors, I found such weirdness might be related to inverse kinematics, because when I play the same animation in Blender but have all IK disabled, it looks just like how it would appear in my own engine. It seems that both Mixamo and Blender have built-in IK support, but I don't know what to do in my case, do I need to implement IK from scratch? Or is there a way to "bake" IK into the animation? Perhaps I'm not using the correct import settings? Does Assimp have an import flag specific to this? I'm still not 100% sure it's caused by IK, just want to know if other people have encountered the same issue, could anyone give me some hints as to what might be the cause?

\$\endgroup\$

1 Answer 1

0
\$\begingroup\$

Okay, turns out this is much easier to solve than I thought...... The problem is simply because my engine does not have an IK solver as Blender or Unity does, so it can only handle animations driven by FK (forward kinematics) only. I learned a lot more about FK/IK while struggling with this issue.

So, we need to convert the original armature that use IKs to a new armature that uses only FK bones. For this, I found a Blender addon called Landon that does the convertion, it's as simple as running a line in the Blender Python Console:

import bpy
bpy.ops.rigging.iktofk()

After the convertion, I can play it normally in my engine, there are some small position "flickerings" around the feet, but that might vary from model to model, and overall the animation is very smooth.

\$\endgroup\$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .