Hi,
Does anyone know of any tool/addon that can convert IK animation to FK or rather just rid of IK bones animation to other normal bones. Example the “heel IK bone” animation transfer to related bones just as the upper leg and lower leg bones … hope my question is clear.
My requirement is to transfer MMD with IK bones animation to others like XPS or Maximo armature bones with no IK bones.
Thanks if any help please.
You “bake action”, with visual keying and clear constraints enabled. This writes visual keys-- keyframes that represent the apparent visual location of the bones (or other objects) and then deletes constraints like IK, so you’re not double dipping.
Be aware that this makes a keyframe for every frame, and there’s not really a way to get around that. Accurate conversion from IK keyframes to FK keyframes requires that.
hi @bandages,
Just to clarify … you are saying baking action with visual keying/clear contraints enabled (eg. IK) will give keyframes for every frame.
I suppose the next question is … is there a tool or addon that can help to average out or “intelligently” pick “peak” keyframe position and removes in between keyframes?
I suppose having keyframe for every frame is “heavy” and slow down the system … right?
Yes, baking keyframes creates a keyframe for every frame (unless you tell it not to, but if you do that, you won’t get an accurate recreation of your animation.)
This does not cause slowdown; it just leaves you with an f-curve that is difficult to edit.
There are tools built in to Blender to clean curves up, but if you use them, you will no longer have an accurate representation of your original IK animation (except for the parts where your IK controlled bones were perfectly still.) This is not a solvable technical problem, it’s a mathematically provable fact of life. It is that IK is just different than FK, and you can’t represent IK interpolation in FK without just sampling every single frame of animation.
@bandages,
Thanks for the clarity on this.
Say, if I will to select those “peak keyframes” of the motion, say in a 2000 frames (each with a keyframe) but selected say 300 keyframes each marked with a “marker” that I wanted to retain, is they a quick way to remove all “others” keyframes in between them?
I only know of using “box select” to do this manually between any 2 keyframes, but it is very very tedious if I need to do with this 300 select keyframes and delete any other keyframes in between out of a 2000 keyframes (where each frame has a keyframe). This get worst if I am dealing with 3000 or 6000 frames for some motions !!! and only wanted to retain just 300+ keyframes and removing others in between.
Any advise ??
You should be looking at the clean keys/channels operations in the graph editor. Any other way of reducing the number of keyframes is a bad idea. “Clean” itself is often a bad idea. But you should play with it and see for yourself exactly why that’s the case.
If you marked 300 keyframes, in a way that you could select them, all you’d have to do is select inverse and delete to only keep those keyframes. To do what you want, you’d likely be placing markers on important frames, then start at frame 1, jump to next marker, keyframe all, which first makes sure there is a keyframe for that bone at that frame, and which second adds that frame’s keyframes to your existing selection in the graph editor; when complete, ctrl i invert selection, delete. This could be scripted, but really, the most tedious part is telling Blender which frames you want to keep, which is something you’d have to do even if you scripted.
But, again, it’s unlikely to be a good idea, even if you choose your keyframes very carefully. Before getting too deep into thinking about it, try it out the manual way, on just 1000 frames of your animation,and see if you’re happy with the output.
You are much better off learning how to adjust the other rigs you have to use IK bones, if you want to edit animations on those rigs. It is not hard. You export to FK only when your animation is finalized, for use in animation/rendering engines that do not support IK.
Hi @bandages,
Thanks for this input.
One more help needed …
To clarify …
- Position “cursor” head to frame to capture. Add Marker
- Keyframe all bones at this Marker … what’s the Command to select all bones at this marker?
Basically assuming I have keyframe all bones for selected frame … what I do not know is the “command in Blender” to
a. Move to next Marker (this I know)
b. Key frame all bones at this marker (Press I > Rotation)
b. Select all bones in this marker (adds to current selection)
… what’s the command to do this???
c. Repeat a and b. for all markers.
Finally if we solve step b., how to write a simple to repeat step a to c? 1st to last markers?? Any sample scripts you know I could “adapt” from?
hi @bandages,
I am trying to learn python scripting to do the above.
My requirement is simply to select all my markers with this scripts…
I am found out how to get all the markers in a specific armature … below .
But I still can’t figure out how to “select” all of them in python …
Any help please?
scene = bpy.data.scenes[‘Scene’]
Markerlist = scene.timeline_markers.keys()
#print(Markerlist)x=1
while x < 10:
… print(Markerlist)
… x += 1
…
F_21
F_50
F_65
F_91
F_70
F_110
F_149
F_173
F_187
@bandages,
I figure out finally … thanks for the insights / tips …
this_scene = bpy.context.scene
for marker in this_scene.timeline_markers:
print(marker.name,’ ',marker.frame)
marker.select = 1 # set marker as selected
Does this need to be deleted, or is there a way to simply ‘disable’ the IK at a certain frame and have the following frame as FK?
Edit: NVM, I was thinking in a different scope/intent.
I’m not sure what you’re asking needs to be deleted. It is possible to disable IK and have the following frame as FK; you keyframe the influence of the IK constraint from 1 to 0, that’s all. But that’s not what seemon is talking about.